Andy Bosch | www.jsf-academy.comJavaServerFaces im PortalStatusbestimmung: Was geht, was geht nicht?
AgendaPortale und PortletsMotivation für JSF+PortletsJSR-301& Co: Portlet Bridge for JSFWas ist der JSR-301? Was ist der JSR-329?Funktionsweise der Portlet BridgeAusblick JSF 2.0 und Portlet 2.0Fazit
Wer bin ich?Name: Andy BoschEntwickler, Berater und TrainerFokusiert auf JSF und PortletsMitglied der Expert Group des JSR-301 undJSR-329Buchautor „Portlets und JSF“Betreiber von www.jsf-academy.com
AgendaPortale und PortletsMotivation für JSF+PortletsJSR-301& Co: Portlet Bridge for JSFWas ist der JSR-301? Was ist der JSR-329?Funktionsweise der Portlet BridgeAusblick JSF 2.0 und Portlet 2.0Fazit
Ich rede von „Echten Portalen“
PortallösungenIBM WebSphere PortalSAP Netweaver PortalOracle PortalLiferay PortalJBoss Portal / GateIn…Portale unterliegen keinem Standard. Dennoch bieten heutige Portallösungen ähnliche Funktionalität, allerdings ist die Umsetzung zum Teil komplett unterschiedlich.
Von Portalen zu PortletsEin Portal aggregiert verschiedene Dienste, Services und Inhalte.Dazu wird eine Portalseite in verschiedene Fragmente zerlegt.Ein Fragment ist somit ein Portlet.Portlets sind im Gegensatz zu Portalen standardisiert.
JSR-168 und JSR-286Funktionsweise eines PortletsEin Portlet bekommt durch den PortletContainer den Trigger, sich darzustellen (Render-Phase).Erfolgt eine Aktion in einem Portlet, wird in diesem einen Portlet eine Action-Phaseangestossen.
Lifecycle eines Portlets (JSR-168)InitRenderActionDestroyDer JSR-286 (PortletV2) erweitert diesen Lifecycle.
Ein triviales Portlet …publicclassSimplePortletextendsGenericPortlet {protectedvoiddoView( ... ) {PrintWriterwriter = response.getWriter();writer.println( "Hallo Portlet Welt" );    String link = ....writer.println( "<a href='" + link + "'>                        Klick mich</a>" );  }publicvoidprocessAction( ... ) {    // TODO do someactionlogic}}
Aufgaben des JSR-168Festlegung des PortletLifecyclesInterfaces und Basisklassen Window States und Portlet ModesPortletSessionsPortletPreferences... Fokus auf dem Portlet selbst
Aktuell: JSR-286Alles aus JSR-168 ist weiterhin gültigPublic Render ParameterPortlet EventsResource ServingPortlet FilterBasis für Ajax-Integration Fokus auf dem Zusammenspiel von Portlets
AgendaPortale und PortletsMotivation für JSF+PortletsJSR-301& Co: Portlet Bridge for JSFWas ist der JSR-301? Was ist der JSR-329?Funktionsweise der Portlet BridgeAusblick JSF 2.0 und Portlet 2.0Fazit
Warum kombinieren?Portlets (bzw. die Portlet-API) ist recht „basisnah“. Trotz des JSR-286 ist eine direkte Verwendung der API nicht gerade komfortabel.Konzepte wie Pageflow, Konvertierung, Validierung, Eventhandling, UI-Komponenten fehlen komplett.Es muss somit die Portlet-Technologie mit einem „reichhaltigen“ UI-Gerüst kombiniert werden.
Die Lösung: JavaServer FacesJavaServerFaces ist ein Framework spezialisiert auf das User InterfaceJavaServerFaces kennt Konzepte wie Konvertierung, Validierung, Bean Management und FehlerhandlingJSF hat zahlreiche Erweiterungen für Ajax-Integration, Templating oder Persistenz
JSF + Portlets?Das Problem jedoch ist der „Glue-Code“Jede Technologie soll ihre „ureigene“ Funktionalität beibehalten Integrationsaufwände sollen möglichst gering seinGeht das überhaupt? Ja, mit dem JSR-301 und dem JSR-329
AgendaPortale und PortletsMotivation für JSF+PortletsJSR-301& Co: Portlet Bridge for JSFWas ist der JSR-301? Was ist der JSR-329?Funktionsweise der Portlet BridgeAusblick JSF 2.0 und Portlet 2.0Fazit
JSR-301: PortletBridgeSpecification              for JavaServerFacesZiel ist die Bereitstellung einer standardisierten BridgeUnterscheidung nach Versionen:JSF 1.2 + Portlet 1.0 = JSR-301JSF 1.2 + Portlet 2.0 = JSR-329JSF 2.0 + Portlet 2.0 = … sage ich nachher
Überblick von „ganz oben“
Grundsätzliche HerausforderungMapping der LifecyclesJSF-LifecyclePortlet-Lifecycle
Mapping der Lifecycles: JSF
Zur Erinnerung: Portlet LifecycleInitRenderActionDestroy
Mapping der Lifecycles: Bridge
Mapping der Lifecycles: Bridge
Bridge Request ScopeJSF geht davon aus, dass der komplette Lebenszyklus in einem Request abgearbeitet wird.Bei Portlets wird die Render- und die Action-Phase in zwei komplett unabhängigen Requests durchgeführtDie Bridge muss dafür sorgen, dass alle notwendigen Informationen für JSF in beiden Requests vorhanden sind.
JSF-Bridge ImplementierungenReferenzimplementierunghttp://myfaces.apache.org/portlet-bridge/index.htmlOpen Portal Implementierunghttps://jsfportletbridge.dev.java.net/JBoss Implementierunghttp://www.jboss.org/portletbridge/…
Einsatz der PortletBridge (1)Entwicklung einer „normalen“ JSF-AnwendungEntfernen „verbotener“ Tags wie <html>, <body>, <head> etc.Einbinden der JSR-301 / JSR-329 LibsEinbinden der portlet.xml und Hinterlegen des GenericFacesPortlet
GenericFacesPortletDie Portletspezifikation verlangt eine Klasse, die das Portlet-Interface implementiert.Eine JSF-Anwendung hat zunächst keine Klasse, die das Portlet-Interface implementieren könnte.Der JSR-301/ JSR-329 stellt ein GenericFacesPortlet bereit, das als erster Ansprechpartner dienen kann
Einsatz der PortletBridge (2)<portlet>   <portlet-name>HelloJSFPortlet</portlet-name>   <portlet-class>javax.portlet.faces.GenericFacesPortlet </portlet-class><init-param>     <name>javax.portlet.faces.defaultViewId.view   </name>     <value>/helloJSF.jsp</value>  </init-param>  ...</portlet>
JSF-Komponentenbibliotheken?Eine generelle Aussage zur Einbindung von Komponentenbibliotheken kann nicht getroffen werden.Jede Bibliothek muss auf ihre „Portal-Tauglichkeit“ hin überprüft werden.Ggf. muss eine eigene Lösung ergänzt werden.Mit JSF 2.0 ist vieles besser 
AgendaPortale und PortletsMotivation für JSF+PortletsJSR-301& Co: Portlet Bridge for JSFWas ist der JSR-301? Was ist der JSR-329?Funktionsweise der Portlet BridgeAusblick JSF 2.0 und Portlet 2.0Fazit
JSF 2.0 und Portlet 2.0Noch kein Standard in SichtPersönliche Versuche und einzelne InitiativenZ.B.: Liferayhat ein neues Projekt initiiert: www.portletfaces.orgMit den aktuellen JSF-Bridges für 2.0 sind schon gute Ergebnisse erziehlbar.
AgendaPortale und PortletsMotivation für JSF+PortletsJSR-301& Co: Portlet Bridge for JSFWas ist der JSR-301? Was ist der JSR-329?Funktionsweise der Portlet BridgeAusblick JSF 2.0 und Portlet 2.0Fazit
FazitEine Kombination von JSF und Portlets ist standard-basiert möglich.Der Vorteil der JSR-301/JSR-329 Lösung ist: Konzentration auf die JSF-Entwicklung, dann eine einfache und schnelle PortierungAuch JSF 2.1 geht schon im Portal, auch wenn der JSR noch nicht in Sicht ist.
Sind noch Fragen offen geblieben?Follow me on Twitter:@andyboschKontakt gerne über:andy.bosch@jsf-academy.com

ESEconf2011 - Bosch Andy: "JavaServer Faces im Portal - Statusbestimmung"

  • 1.
    Andy Bosch |www.jsf-academy.comJavaServerFaces im PortalStatusbestimmung: Was geht, was geht nicht?
  • 2.
    AgendaPortale und PortletsMotivationfür JSF+PortletsJSR-301& Co: Portlet Bridge for JSFWas ist der JSR-301? Was ist der JSR-329?Funktionsweise der Portlet BridgeAusblick JSF 2.0 und Portlet 2.0Fazit
  • 3.
    Wer bin ich?Name:Andy BoschEntwickler, Berater und TrainerFokusiert auf JSF und PortletsMitglied der Expert Group des JSR-301 undJSR-329Buchautor „Portlets und JSF“Betreiber von www.jsf-academy.com
  • 4.
    AgendaPortale und PortletsMotivationfür JSF+PortletsJSR-301& Co: Portlet Bridge for JSFWas ist der JSR-301? Was ist der JSR-329?Funktionsweise der Portlet BridgeAusblick JSF 2.0 und Portlet 2.0Fazit
  • 5.
    Ich rede von„Echten Portalen“
  • 6.
    PortallösungenIBM WebSphere PortalSAPNetweaver PortalOracle PortalLiferay PortalJBoss Portal / GateIn…Portale unterliegen keinem Standard. Dennoch bieten heutige Portallösungen ähnliche Funktionalität, allerdings ist die Umsetzung zum Teil komplett unterschiedlich.
  • 7.
    Von Portalen zuPortletsEin Portal aggregiert verschiedene Dienste, Services und Inhalte.Dazu wird eine Portalseite in verschiedene Fragmente zerlegt.Ein Fragment ist somit ein Portlet.Portlets sind im Gegensatz zu Portalen standardisiert.
  • 8.
    JSR-168 und JSR-286Funktionsweiseeines PortletsEin Portlet bekommt durch den PortletContainer den Trigger, sich darzustellen (Render-Phase).Erfolgt eine Aktion in einem Portlet, wird in diesem einen Portlet eine Action-Phaseangestossen.
  • 9.
    Lifecycle eines Portlets(JSR-168)InitRenderActionDestroyDer JSR-286 (PortletV2) erweitert diesen Lifecycle.
  • 10.
    Ein triviales Portlet…publicclassSimplePortletextendsGenericPortlet {protectedvoiddoView( ... ) {PrintWriterwriter = response.getWriter();writer.println( "Hallo Portlet Welt" ); String link = ....writer.println( "<a href='" + link + "'> Klick mich</a>" ); }publicvoidprocessAction( ... ) { // TODO do someactionlogic}}
  • 11.
    Aufgaben des JSR-168Festlegungdes PortletLifecyclesInterfaces und Basisklassen Window States und Portlet ModesPortletSessionsPortletPreferences... Fokus auf dem Portlet selbst
  • 12.
    Aktuell: JSR-286Alles ausJSR-168 ist weiterhin gültigPublic Render ParameterPortlet EventsResource ServingPortlet FilterBasis für Ajax-Integration Fokus auf dem Zusammenspiel von Portlets
  • 13.
    AgendaPortale und PortletsMotivationfür JSF+PortletsJSR-301& Co: Portlet Bridge for JSFWas ist der JSR-301? Was ist der JSR-329?Funktionsweise der Portlet BridgeAusblick JSF 2.0 und Portlet 2.0Fazit
  • 14.
    Warum kombinieren?Portlets (bzw.die Portlet-API) ist recht „basisnah“. Trotz des JSR-286 ist eine direkte Verwendung der API nicht gerade komfortabel.Konzepte wie Pageflow, Konvertierung, Validierung, Eventhandling, UI-Komponenten fehlen komplett.Es muss somit die Portlet-Technologie mit einem „reichhaltigen“ UI-Gerüst kombiniert werden.
  • 15.
    Die Lösung: JavaServerFacesJavaServerFaces ist ein Framework spezialisiert auf das User InterfaceJavaServerFaces kennt Konzepte wie Konvertierung, Validierung, Bean Management und FehlerhandlingJSF hat zahlreiche Erweiterungen für Ajax-Integration, Templating oder Persistenz
  • 16.
    JSF + Portlets?DasProblem jedoch ist der „Glue-Code“Jede Technologie soll ihre „ureigene“ Funktionalität beibehalten Integrationsaufwände sollen möglichst gering seinGeht das überhaupt? Ja, mit dem JSR-301 und dem JSR-329
  • 17.
    AgendaPortale und PortletsMotivationfür JSF+PortletsJSR-301& Co: Portlet Bridge for JSFWas ist der JSR-301? Was ist der JSR-329?Funktionsweise der Portlet BridgeAusblick JSF 2.0 und Portlet 2.0Fazit
  • 18.
    JSR-301: PortletBridgeSpecification for JavaServerFacesZiel ist die Bereitstellung einer standardisierten BridgeUnterscheidung nach Versionen:JSF 1.2 + Portlet 1.0 = JSR-301JSF 1.2 + Portlet 2.0 = JSR-329JSF 2.0 + Portlet 2.0 = … sage ich nachher
  • 19.
  • 20.
    Grundsätzliche HerausforderungMapping derLifecyclesJSF-LifecyclePortlet-Lifecycle
  • 21.
  • 22.
    Zur Erinnerung: PortletLifecycleInitRenderActionDestroy
  • 23.
  • 24.
  • 25.
    Bridge Request ScopeJSFgeht davon aus, dass der komplette Lebenszyklus in einem Request abgearbeitet wird.Bei Portlets wird die Render- und die Action-Phase in zwei komplett unabhängigen Requests durchgeführtDie Bridge muss dafür sorgen, dass alle notwendigen Informationen für JSF in beiden Requests vorhanden sind.
  • 26.
    JSF-Bridge ImplementierungenReferenzimplementierunghttp://myfaces.apache.org/portlet-bridge/index.htmlOpen PortalImplementierunghttps://jsfportletbridge.dev.java.net/JBoss Implementierunghttp://www.jboss.org/portletbridge/…
  • 27.
    Einsatz der PortletBridge(1)Entwicklung einer „normalen“ JSF-AnwendungEntfernen „verbotener“ Tags wie <html>, <body>, <head> etc.Einbinden der JSR-301 / JSR-329 LibsEinbinden der portlet.xml und Hinterlegen des GenericFacesPortlet
  • 28.
    GenericFacesPortletDie Portletspezifikation verlangteine Klasse, die das Portlet-Interface implementiert.Eine JSF-Anwendung hat zunächst keine Klasse, die das Portlet-Interface implementieren könnte.Der JSR-301/ JSR-329 stellt ein GenericFacesPortlet bereit, das als erster Ansprechpartner dienen kann
  • 29.
    Einsatz der PortletBridge(2)<portlet> <portlet-name>HelloJSFPortlet</portlet-name> <portlet-class>javax.portlet.faces.GenericFacesPortlet </portlet-class><init-param> <name>javax.portlet.faces.defaultViewId.view </name> <value>/helloJSF.jsp</value> </init-param> ...</portlet>
  • 30.
    JSF-Komponentenbibliotheken?Eine generelle Aussagezur Einbindung von Komponentenbibliotheken kann nicht getroffen werden.Jede Bibliothek muss auf ihre „Portal-Tauglichkeit“ hin überprüft werden.Ggf. muss eine eigene Lösung ergänzt werden.Mit JSF 2.0 ist vieles besser 
  • 31.
    AgendaPortale und PortletsMotivationfür JSF+PortletsJSR-301& Co: Portlet Bridge for JSFWas ist der JSR-301? Was ist der JSR-329?Funktionsweise der Portlet BridgeAusblick JSF 2.0 und Portlet 2.0Fazit
  • 32.
    JSF 2.0 undPortlet 2.0Noch kein Standard in SichtPersönliche Versuche und einzelne InitiativenZ.B.: Liferayhat ein neues Projekt initiiert: www.portletfaces.orgMit den aktuellen JSF-Bridges für 2.0 sind schon gute Ergebnisse erziehlbar.
  • 33.
    AgendaPortale und PortletsMotivationfür JSF+PortletsJSR-301& Co: Portlet Bridge for JSFWas ist der JSR-301? Was ist der JSR-329?Funktionsweise der Portlet BridgeAusblick JSF 2.0 und Portlet 2.0Fazit
  • 34.
    FazitEine Kombination vonJSF und Portlets ist standard-basiert möglich.Der Vorteil der JSR-301/JSR-329 Lösung ist: Konzentration auf die JSF-Entwicklung, dann eine einfache und schnelle PortierungAuch JSF 2.1 geht schon im Portal, auch wenn der JSR noch nicht in Sicht ist.
  • 35.
    Sind noch Fragenoffen geblieben?Follow me on Twitter:@andyboschKontakt gerne über:andy.bosch@jsf-academy.com