Archiv der Kategorie: portlet

Installation von Liferay Portal unter Debian und Glassfish

Ich habe mich gerade eine ganze Weile mit der Installation von Liferay Poral 5.2 unter einer existierenden Glassfish-Installation herumgeärgert, damit mir das nicht nochmal passiert, habe ich hier die notwendigen Schritte dokumentiert:

1. Download des entsprechenden War-Files von hier.

2. Deploy des Warfiles unter Glassfish

3. Download der zugehörigen Dependencies von hier und entpacken in das globale Glassfish-Application Lib Verzeichnis ([GLASSFISH_HOME]/lib)

4. Hochsetzen des MaxPermSize für den Memoryverbrauch des Glassfish (siehe hier), ich konnte nach dem Deployment von Liferay die Admin-Konsole nicht mehr starten.

5. Anlegen einer Datasource für Liferay und Konfiguration derselben in der portlet-ext.properties (siehe hier)

6. Importieren der entsprechenden SQL-Skripte (siehe hier) oder Liferay das Ganze automatisch generieren lassen (hierzu einfach in der portal-ext.properties die beiden Properties

schema.run.enabled=true
schema.run.minimal=true

setzen.)
7. Neustart des Servers

Das sollte es eigentlich gewesen sein, viel Spass damit.

Portlet-Kurzreferenz

Ich habe mir kürzlich mal einige NOtizen zu Portlets gemacht, da dieser Blog mir als Notizblock dient, hier die Notizen

Portlet-Konfiguration

Portlets haben einen eigenen Deployment-Deskriptor – portlet.xml.

Dieser befindet sich im Verzeichnis WEB-INF.

Eine typische Konfiguration sieht so aus:

<portlet-app

xmlns=http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd&#8220;

version=„1.0“ xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance&#8220;

xsi:schemaLocation=http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd&#8220;>

<portlet id=„Pentasys_Login_Portlet“>

<portlet-name>PLoginPortlet</portlet-name>

<display-name>PENTASYS Login Portlet</display-name>

<portlet-class>

com.sun.faces.portlet.FacesPortlet

</portlet-class>

<!– <portlet-class>de.pentasys.myfaces.portlet.MyFacesGenericPortlet</portlet-class> –>

<init-param>

<name>default-view</name>

<value>/pages/index.jsp</value>

</init-param>

<init-param>

<description></description> <name>com.sun.faces.portlet.INIT_VIEW</name>

<value>/pages/index.jsp</value>

</init-param>

<init-param>

<description></description> <name>com.sun.faces.portlet.INIT_EDIT</name>

<value>/pages/edit.jsp</value>

</init-param>

<supports>

<mime-type>text/html</mime-type>

<portlet-mode>VIEW</portlet-mode>

</supports>

<portlet-info>

<title>Pentasys Login Portlet</title>

<short-title>Pentasys Login Portlet</short-title>

<keywords>Pentasys Login Portlet</keywords>

</portlet-info>

</portlet>

</portlet-app>

Interessant hierbei ist der Tag <Portlet-Info>, da hier Meta-Informationen wie Titel etc.. angegeben werden können.

§ Der Tag <Portlet-Class> gibt die jeweilige Portlet-Klasse an (in diesem Fall ein BridgePortlet zur Verwendung von JSF)

§ Der Tag <init-param> kann benutzt werden, um init-Parameter an das Portlet zu übergeben.

§ Soll ein Resource-Bundle genutzt werden, kann dies mit dem Tag
<resource-bundle>com.foo.myApp.QuotePortlet</resource-bundle> geschehen.

Portlet-URL

Es gibt 2 URL-Typen – ActionURL und RenderURL.

Hiermit wird eine URL erzeugt, die den Portlet-Container entweder veranlasst, die processAction… oder die render.. Methoden aufzurufen. Um eine URL zu erstellen kann die create<..>URL – Methoden eines renderResponse-Objektes genutzt werden.

Innerhalb einer URL kann ebenfalls der PortletMode und die WindowState-Parameter gesetzt werden.

Standard-Portlet-Modes sind VIEW, EDIT und HELP. Eigene Modes können implementiert werden.

Welche Modi ein Portlet unterstützt wird im Deployment-Deskriptor festgelegt, mit Hilfe des Tags

<supports>

<mime-type>text/html</mime-type>

<portlet-mode>VIEW</portlet-mode>

</supports>

Unterstütze Window States sind NORMAL, MAXIMIZED und MINIMIZED.

Portal-Context

Jedes Portlet hat einen eigenen Context. Daten eines PortletContextes werden im ServletContext gespeichert, d.h. Portlets haben Zugriff auf Servlet-Daten und umgekehrt.

Portlet-Request

Über den Portlet-Request lassen sich Sicherheitsinformationen erfragen:

getAuthType()

getRemoteUser()

getUserPrincipal()

isUserInRole()

isSecure()

Die Methode getAuthType liefert einen der möglichen Werte (BASIC_AUTH, DIGEST_AUTH, CERT_AUTH and FORM_AUTH)

Die Methode getRemoteUser liefert den UserNamen des Benutzers der den Request abgesetzt hat.

getUserPrincipal liefert ein Objekt vom Typ java.security.Principal mit dem Namen des Benutzers.

Portlet-Response

Über den Response kann ein Redirect veranlasst werden, mit der Methode „sendRedirect()“.

Preferences

Zum Verwalten von Preferences bietet ein Portlet die Klasse „PortletPreferences“.

Bsp:

PortletPreferences prefs = req.getPreferences();

String[] symbols =

prefs.getValues(”preferredStockSymbols”,

new String[]{”ACME”,”FOO”});

String 5 url = prefs.getValue(”quotesFeedURL”,null);

int refreshInterval =

Integer.parseInt(prefs.getValue(”refresh”,”10”));

Der Zusätliche Parameter jeweils ist ein Default-Value der zurückgegeben wird, wenn der angeforderte Wert nicht vorhanden ist.

Preferences sind Benutzerspezifisch und sollten nicht zwischen Benutzersessions geteilt werden.

Es ist möglich, für Preferences Default-Values im Deployment-Deskriptor zu übergeben.

<portlet-preferences>

<preference>

<name>PreferredStockSymbols</name>

<value>FOO</value>

<value>XYZ</value>

<read-only>true</read-only>

</preference>

<preference>

<name>quotesFeedURL</name>

<value>http://www.foomarket.com/quotes</value&gt;

</preference>

</portlet-preferences>

</portlet>

Preferences können validiert werden, hierfür muss eine Klasse vom Typ PreferencesValidator implementiert werden und anschliessend im DeploymentDeskriptor registriert werden.

<portlet-preferences>

<preferences-validator>

com.foo.portlets.XYZValidator

</preferences-validator>

</portlet-preferences>

Sessions

Für das Session-Management bei Portlets gibt es 2 Scopes (APPLICATION- und SESSION-SCOPE).

Attribute im SessionScope bleiben gültig, solange man sich im gleichen PortletWindow befindet.

Dispatching

Ein Request-Dispatcher kann vom PortletContext über die Methode getRequestDispatcher(<Pfad>) erfragt werden. Der Pfad ist relativ zum Root des Contextes und muss mit einem „/“ beginnen.

Über die Methode getNamedDispatcher(<name>) kann ein Dispatcher für ein bekanntes Servlet erfragt werden.

Um ein Servlet- oder eine JSP-Seite zu inkludieren wird die Methode include(..) eines Request-Dispatchers aufgerufen.

Security

Die zuvor beschriebene Methode isUserInRole(..) kann benutzt werden, um zu prüfen ob ein user eine bestimmte Benutzerrolle innehat. Hierzu muss im Deployment-Deskriptor folgender Tag vorhanden sein.

<portlet>

<security-role-ref>

<role-name>FOO</role-name>

<role-link>manager</manager>

</security-role-ref>

</portlet>

Das Element<role-link> wird dazu benutzt, um einen Rollennamen auf eine im web.xml deployment-deskriptor angegebene rolle zu mappen. Wird dieses Element nicht angegeben, wird automatisch versucht, eine definierte Rolle mit dem im element <role-name> angegebenen value zu finden. Die hier definierten Rollen können als Argument für die Methode isUserInRole(..) genutzt werden.

Portlets können mit User-Constraints geschützt werden.

<security-constraint>

<display-name>Secure Portlets</display-name>

<portlet-collection>

<portlet-name>accountSummary</portlet-name>

</portlet-collection>

<user-data-constraint/>

<transport-guarantee>CONFIDENTIAL</transport-guarantee>

</user-data-constraint>

</security-constraint>

Tag-Lib

Es gibt eine TagLib zur Verwendung innerhalb von JSP-Seiten.

<%@ taglib uri=”http://java.sun.com/portlet” prefix=”p” %>

Über den Tag “<p:defineObject/>” warden nun die Objekte “renderRequest”,“renderResponse” und „portletConfig“ zur Verfügung gestellt.

Weiterhin kann über den Tag <p:actionURL/> und <p:renderURL/> eine jeweilige Action/oder RenderURL generiert werden.

Parameter für actionURL sind windowState, portletMode.

<portlet:actionURL windowState=”maximized” portletMode=”edit”>

<portlet:param name=”action” value=”editStocks”/>

</portlet:actionURL>