Softwareentwicklung mit JAVA EE Portlets
Was sind Portale? Aufgaben von Portalsystemen Integration unterschiedlicher Anwendung Schwerpunkt liegt auf der Präsentationsebene Ermöglichung personalisierter Oberflächen Unterstützung unterschiedlicher Endgeräte weitere Ziele Single Sign On Einheitliches Look-And-Feel Portlets-2
Beispiel Portlets-3
Portlets? Im Gegensatz zu Servlets, die ganze Web-Seiten rendern, liefern Portlets nur einen Teil einer Seite Eine Portalseite besteht idr aus mehreren Portlets Portlets sind allein nicht lauffähig Laufzeitumgebung (Portlet Container) erforderlich z.b. Apache Pluto (Referenzimplementierung) Zahlreiche proprietäre Schnittstellen für bestimmte Portale Portlets-4
JSR 168 Portlet Spezifikation 1.0 Verabschiedet Ende 2003 basiert auf Servlet 2.3 Kompromisslösung an der viele namhafte Hersteller beteiligt waren Wird inzwischen von sehr vielen Portalen (auch Open Source) unterstützt Portlets-5
JSR 286 Portlet Spezifikation 2.0 Verabschiedet 2006 abwärtskompatibel Wesentliche Erweiterung Kommunikation zwischen Portlets Portlets-6
Portlet Lebenszyklus zentrale Methoden init() processaction() implementiert die Funktionalität kann eine Weiterleitung (Redirect) zu einer anderen Seite veranlassen sowie den Modus und den Zustand des Fensters ändern. render(), doview(), doedit(), dohelp() stellt das Portlet dar, entweder durch Ausgabe auf ein PrintWriter-Objekt oder durch die Delegation an ein Servlet oder eine JSP destroy() Besonderheit: Unterscheidung: processaction() und render() Portlets-7
Window States 3 Fensterzustände sind im Standard definiert Normal das Portlet nimmtden vorgesehenen Platz auf der Seite ein Minimiert Das Portlet reduziert sich auf den minimal möglichen Platz Maximiert Das Portlet nimmt die gesmmte Seite ein weitere Zustände können konfiguriert werden Abfrage des Zustandes im Portlet über PortalContext Änderung ist über Link-Parameter (URL) möglich Portlets-8
Portlet Modes View Normal-Zustand Render-Methode: doview() Edit (optional) Zur Konfiguration von Parametern Render-Methode: doedit() Help (optional) Der Name sagt es schon Render-Methode: dohelp() Weitere können konfiguriert werden z.b. About-Mode, Preview-Mode,... Render-Methode: render() Portlets-9
Darstellung im Portal Portlets-10
Portlet Entwicklung Angelehnt an Servlet-Entwicklung Portlet-Klasse wird abgeleitet von javax.portlet.genericportlet Deployment Deskriptor Datei WEB-INF / portlet.xml Portlets-11
Beispiel portlet.xml <portlet> <portlet-name>testportlet</portlet-name> <portlet-class>mein.testportlet</portlet-class> <supports> <mime-type>text/html</mime-type> <portlet-mode>view</portlet-mode> <portlet-mode>edit</portlet-mode> <portlet-mode>help</portlet-mode> </supports> <supported-locale>en</supported-locale> <supported-locale>de</supported-locale> <portlet-info> <title>test Portlet #1</title> <short-title>test #1</short-title> <keywords>test,testing</keywords> </portlet-info> </portlet> Portlets-12
Beispiel Portletklasse public class TestPortlet extends GenericPortlet { public void init() throws PortletException {... } public void processaction(actionrequest requ, ActionResponse resp) throws PortletException, IOException {... } public void doview(renderrequest requ, RenderResponse resp) throws PortletException, IOException {... } protected void doedit(renderrequest requ, RenderResponse resp) throws PortletException, IOException {... } } protected void dohelp(renderrequest requ, RenderResponse resp) throws PortletException, IOException { PortletRequestDispatcher dispatcher = getportletcontext().getrequestdispatcher("/jsp/help.jsp"); dispatcher.include(requ, resp); } Portlets-13
Portletsession Funktioniert ähnlich wie HttpSession public void processaction (ActionRequest requ, ActionResponse resp) throws PortletException, IOException { PortletSession ps = requ.getportletsession(); ps.set Attribute ("MeinWert", var); } Portlets-14
Portlet-JSP Besonderheit: URLS <portlet:actionurl windowstate="minimized" secure="true" var="url"> <portlet:param name="testid" value="val1"/> </portlet:actionurl> <a href="<%=url%>">minimal</a> <portlet:actionurl windowstate="normal" var="url"> <portlet:param name="testid" value="val2"/> </portlet:actionurl> <a href="<%=url%>">normal</a> Portlets-15
Wie kommt das Portlet ins Portal? Der Weg hier hängt stark von Portal ab! Häufig Build-Tools ant maven Gelegentlich Deploy-Oberflächen im Portal Beispiel: uportal ant deployportletapp -DportletApp=d:\deploy\helloworld.war Passend zum ant-target gibt es ein build.xml beim Portal Portlets-16
Beispiel: Apache Pluto Apache Pluto installieren Herunterladen der aktuellen Version von http://portals.apache.org/pluto/ Entpacken Fertig! Start des Portals bin/startup.bat (windows) bin/startup.sh (linux) Aurfufen http://localhost:8080/pluto Portlets-17
Bereitstellen eines neuen Portlets Assembly Deployment Publishing Hinzufügen von Pluto-spezifischen Informationen Die web.xml wird um Angaben zum Portal-Servlet ergänzt Zur Automation dieser Schritte steht ein Maven-Skript zur Verfügung Erzeugen einer *.war Datei im einfachsten Fall: Kopieren der war-datei in den webapps-ordner Auswahl der anzuzeigenden Seiten im Portal z.b. durch Benutzung der Portal-Oberfläche (Administrationsportlet) Portlets-18
Portalprodukte Apache Pluto Apache Jetspeed Apache Cocoon Liferay uportal IBM WebSphere Portal BEA WebLogic Portal ORACLE App Server Portal SAP Enterprise Portal... JBoss Portal... Portlets-19