Communardo Software GmbH, Kleiststraße 10 a, D-01129 Dresden
0800 1 255 255

Liferay Portlets mit Grails

Seit mei­nem letz­ten Grails Projekt ver­folge ich auf­merk­sam jede Neuigkeit zum Thema Groovy und Grails. Aber auch die Entwicklung von Portlets für den freien Portal Server Liferay liegt im Bereich mei­nes Interesses. Als ich dann auf  groovyblogs.org (emp­feh­lens­werte Quelle!) laß, dass ein Grails Plugin released wurde, mit dem man Portlets für Liferay erstel­len kann, war klar, dass ich das aus­pro­bie­ren muss. Die Vorstellung davon, Portlet- und Deploymentdeskriptoren nicht alle hän­disch erstel­len zu müs­sen, Actions sowie Views gene­rie­ren zu las­sen und dazu noch in Groovy ent­wi­ckeln zu kön­nen erschien mir durch­aus als vielversprechend.

Doch als Erstes muss­ten die Hürden einer Installation und eines lauf­fä­hi­gen Deployments genom­men wer­den, was ich im Folgenden doku­men­tie­ren möchte:

1. Liferay ab Version 5.2 installieren

2. Grails ab Version 1.1.1 installieren

3. Umgebungsvariable für Liferay setzen:
LIFERAY_HOME=/your_path_to/liferay-portlet-5.2.1

4. Grails Application erstellen:

grails create-app demoportlets

5. In App Verzeichnis wech­seln und Portlet Plugins installieren:

grails install-plugin portlets
grails install-plugin portlets-liferay
grails install-plugin liferay-exploded

6. Portlet erstel­len: Hierbei sollte man dar­auf ach­ten, keine Großbuchstaben im Namen (z.B. demo­port­let) zu ver­wen­den, da die gsp`s zur Laufzeit in einem Verzeichnis ohne Großbuchstaben gesucht werden.

grails create-portlet demoportlet

Ergebnis die­ses Befehls ist, dass im Verzeichnis "port­lets" eine lauf­fä­hige Portletklasse mit dem Namen DemoPortlet.groovy mit fol­gen­dem Inhalt liegt:

import javax.portlet.*

class DemoportletPortlet {

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':'renderEdit called']
}

def actionView = {
//TODO Define action phase
}

def renderView = {
//TODO Define render phase. Return the map of the variables bound to the view
['mykey':'renderView called']
}

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':'renderHelp called']
}
}

7. Ich hatte das Problem, dass beim Generieren der Views ein Fehler flog, weil native2ascii nicht gefun­den wer­den konnte. Das kann man behe­ben, in dem man JAVA_HOME auf ein JDK zei­gen lässt. Alternativ kann man fol­gende Option in der config.groovy aus­schal­ten um den Fehler zu umgehen:

grails.enable.native2ascii = false

8. Views gene­rie­ren – net­ter Befehl, um edit.gsp, view.gsp und help.gsp vorzugenerieren:

grails generate-portlet-views demoportlet

9. Bauen und Deployen: An der Stelle hatte ich die größ­ten Probleme, da auf mei­nem Rechner stan­dard­mä­ßig Java 1.6 läuft, Liferay jedoch seine eigene JRE mit der Version 1.5 mit­bringt. Deswegen lau­tet meine Empfehlung: Bauen mit Java 1.5!

grails war

Danach kann man das fer­tige war-File aus dem App-Verzeichnis nach "liferay/deploy"  kopie­ren, was bei einem lau­fen­den Liferay dazu füh­ren sollte, dass das Portlet auto­ma­tisch deployed wird.

Alternativ kann man zum Deployen auch das Liferay Exploded Plugin ver­wen­den, was bei mir aber lei­der nicht funk­tio­niert hat und beim Deployen mit einem Fehler quit­tiert wurde:

grails liferay-deploy
und folgend grails liferay-update

Nach dem Deployen sollte man das Portlet in der Kategorie "MyCategory" fin­den und auf einer belie­bi­gen Seite instan­ti­ie­ren können.

DemoPortlet
DemoPortlet

Getestet habe ich das Deployment in Liferay Version 5.2.1 und 5.2.3, was dank Java 1.5 auch für beide Versionen funk­tio­niert hat.

Für das ganze Prozedere habe ich am Ende doch län­ger gebraucht als erwar­tet und war einige Male kurz davor  auf­zu­ge­ben. Jetzt bin ich aber wie­der zuver­sicht­lich und werde mich dem­nächst damit befas­sen, was man denn nun alles von der Grails-Funktionaliät im Portlet ver­wen­den kann. Das Portlet sel­ber bringt immer­hin 23 MB auf die Waage und ent­hält sämt­li­che Libraries die Grails auch sonst so benö­tigt, wie Core, Crud, Gorm, Webflow etc. Das lässt zumin­dest hof­fen, dass man auch Domainobjekte im Portlet ver­wen­den kann.

Links:

http://grails.org/plugin/portlets
http://grails.org/plugin/portlets-liferay
http://grails.org/plugin/liferay-exploded

MyCategory

Related Posts

Beim gene­rie­ren des war Ordners oder beim gene­rie­ren der portlet-views erhalte ich jeweils die Fehlermedlung "Unable to gene­rate portlet.xml". Laut Foren und JIRA sollte der Fehler beho­ben sein.

Meine Umgebung: Windows 7, Grails 1.3.1

Vielen Dank für die inter­es­san­ten Beiträge!
Gruss Peter

Hallo,
ich bekomme genau die glei­che Fehlermeldung wie Peter, gibt es dafür eine Lösung? 

Windows Vista, Grails 1.3.4

Gruss Sandy

Hallo,

also es liegt daran, dass das Portlet im Default package lie­gen muss. Was ich per­sön­lich nicht so toll finde. 🙁
Selbst mit der aktu­el­len Version (0.8) des Plugins ist der Bug noch vor­han­den, also nicht gefixed!! 🙁

GRuß Sandy

Comments are closed.

Pin It on Pinterest