Voraussetzungen:
- Grails Version 1.1.1
- Tomcat 5.5.x + Pluto 1.1.7 (optional - siehe Deployment)
Plugins:
Vorgehen:
Zuerst muss natürlich eine Grails-Anwendung erstellt werden. grails create-app PortletTest
Danach können die Plugins installiert werden, welche für die Portlet-entwicklung benötigt werden.
grails install-plugin portlets grails install-plugin portlets-pluto grails install-plugin pluto
Jetzt sind erst einmal die Voraussetzungen erfüllt und wir können beginnen, ein erstes Portlet zu erstellen. grails create-portlet First
Grails erzeugt uns eine Portlet-Klasse FirstPortlet.groovy im Ordner grails-app/portlets.
import javax.portlet.* class FirstPortlet { def title = 'Portlet Title' def description = ''' Description about the portlet goes here. ''' def displayName = 'Display Name' def supports = ['text/html':['view', 'edit', 'help']] // Liferay server specific configurations def liferay_display_category = 'MyCategory' def actionEdit = { //TODO Define action phase portletResponse.setPortletMode(PortletMode.VIEW) } def renderEdit = { //TODO Define render phase. Return the map of the variables bound to the view ['mykey':'myvalue'] } def actionView = { //TODO Define action phase } def renderView = { //TODO Define render phase. Return the map of the variables bound to the view ['mykey':'myvalue'] } def actionHelp = { //TODO Define action phase portletResponse.setPortletMode(PortletMode.VIEW) } def renderHelp = { //TODO Define render phase. Return the map of the variables bound to the view ['mykey':'myvalue'] } }
Das allein reicht aber nicht, denn es müssen noch die Views erstellt werden. grails generate-portlet-views First
Wenn alles geklappt hat, befinden sich nun im Ordner grails-app/views je eine GSP-Seite pro Portlet Modus:
- view.gsp
- edit.gsp
- help.gsp
Damit wären wir schon mit den Grundsätzlichen fertig und das Portlet muss nur noch deployed werden.
Deployment:
Variante 1 "Nutzung des Pluto-Plugins" : grails install-plugin pluto grails run-app
Das Plugin integriert Apache Pluto in das Kommando run-app. Vorteil dieser Lösung ist, dass man keinen separaten Tomcat + Pluto benötigt.
Variante 2 "Deployen in eigener Serverinstanz" : grails war
Danach das WAR-Archiv in den webapps - Ordner des Tomcat kopieren - fertig.
Probleme:
Natürlich kann dabei nicht immer alles sofort glatt gehen. Über die folgenden Problem bin ich gestolpert.
Fehler bei der Angabe von Packages
Beim Ausführen von grails generate-portlet-views net.example.First erhielt ich die folgende Fehlermeldung: Unable to generate portlet.xml: FirstPortlet
Der Fehler trat immer auf, sobald ich versucht habe, die Portletklasse in ein Package zu schieben. Ohne Package-Angabe beim Anlegen trat der Fehler nicht auf.
Fehler beim Deployment
OutOfMemory - Exception (PermGen) beim Deployment im Tomcat. Dagegen half das Erhöhen der maximalen PermGen-Größe: -XX:MaxPermSize=128m