JSF-Erweiterung Woodstock Umgang mit JSF Erweiterungen am Beispiel Woodstock Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim Version: 0.3 www.oio.de [email protected] Java, XML und Open Source seit 1998 ) Projekte ) • Schlüsselfertige Realisierung von Software • Unterstützung laufender Projekte • Pilot- und Migrationsprojekte ) Beratung ) ) Akademie ) • Methoden, Standards und • Schulungen, Coaching, Tools für die Entwicklung von offenen, unternehmensweiten Systemen Weiterbildungsberatung, Train & Solve-Programme 2 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH 1 Der Sprecher: Oliver Wolff Ajax mit Java JavaServer Faces Java Portalentwicklung QS mit Open Source XML mit Java Trainer Berater Entwickler 3 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH Gliederung • • • • JavaServer Faces Woodstock Ajax & Dynamic Faces Diskussion & Ausblick 4 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH 2 JavaServer Faces - Übersicht • UI-Framework für Webanwendungen • JSF Design: – Fokus auf Komponenten-APIs – Lebenszyklus nicht perfekt – Aber: Alle Framework-Aspekte leicht erweiterbar • Java Specification Request (JSR) 127 / 252 • Ed Burns, Craig R. McClanahan • Beteiligte Firmen: IBM, Oracle, BEA, ... 5 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH JavaServer Faces - Spezifikation-Implementierung • JSR 127 / 252 ist reine Spezifikation • Neben der Referenzimplementierung (RI) gibt es – – – – MyFaces, Apache ADF / Trinidad, Oracle ICEfaces ... • Implementierungen prinzipiell austauschbar 6 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH 3 JavaServer Faces - Architektur JSF bildet eine Architektur • • • • • • • Model-View-Controller Navigationskonzept Komponentenmodell Bean-Mangement Konverter und Validatoren Eventhandling ... 7 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH JavaServer Faces Erweitern - Übersicht • Framework: Æ Apache Shale, Seam, Orchestra, ... JSF = Komponenten-Framework JSF + Shale = Anwendungs-Framework Æ www.oio.de/public/presentations/#JAX2008 • Alternative ViewHandler – JavaServer Pages nicht optimal – Facelets, JSFTemplating, Shale Clay • Komponenten Bibliotheken 8 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH 4 Bibliotheken • Implementierungen beinhalten nur Grundfunktionalität • Selbst Entwickeln ÍÎ Einbinden bestehender Bibliotheken • Viele Probleme wurden schon gelöst • Aber wie vorgehen? 9 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH Bibliotheken - Implementierung mit Erweiterung Standard Html <h:form> <h:inputText> <h:commandButton> <h:dataTable> .... Andere: Struktur Events .... Erweiterung ist Teil der Implementierung, nicht austauschbar, Bindung an Implementierung Erweiterung <ice:superTable> <ice:ajax> <ice:events> .... 10 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH 5 Bibliotheken - Implementierung & Erweiterung Referenz-Impl. MyFaces Html <h:form> <h:inputText> <h:commandButton> <h:dataTable> .... Html <h:form> <h:inputText> <h:commandButton> <h:dataTable> .... Andere: Struktur Events .... Andere: Struktur Events .... Erweiterung <ext:superTable> <ext:ajax> <ext:events> .... Erweiterung getrennt von Implementierung 11 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH Bibliotheken - Tomahawk • Zusammen mit MyFaces entwickelt • Viele interessante Komponenten: – – – – – – JSCook Menu (JavaScript-Menu) File Upload Calendar Data List Tree .... • Externe Bibliothek Æ Modular 12 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH 6 Bibliotheken - ICEfaces • Kommerziell, Community Edition • Gute Komponenten, z.B: Fortschrittsbalken • Ajax-Einbindung, jedoch eigener Ansatz • Externe Bibliothek Æ Modular • JSF 1.1, 1.2 13 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH Bibliotheken - Oracle ADF, MyFaces Trinidad • Gute Ajax-Unterstützung, jedoch eigener Ansatz • ADF: Gute Dokumentation, Support – Trinidad beinhaltet Kern, nicht alle Komponenten • Viele Komponenten: – Drag and Drop – DataBinding, Datentabelle .. • Eigene Implementierung Æ Monolith – Trinidad: teilweise Bibliothek • JSF 1.1 & 1.2 14 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH 7 Bibliotheken - NetAdvantage • Kommerziell • Ajax-Komponenten, jedoch eigener Ansatz • Live-Visualisierung von Daten • Externe Bibliothek Æ Modular • JSF 1.1, 1.2 15 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH Bibliotheken - JBoss ajax4jsf/RichFaces • ajax4jsf: wenig invasive „Ajaxifizierung“ – Gut für Legacy Anwendungen • Mächtige Komponenten • Gute Ajax-Unterstützung • Externe Bibliothek Æ Modular • JSF (1.1) & 1.2 16 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH 8 Bibliotheken - Monolith vs. Modular X Woodstock Woodstock Facelets Facelets Shale (Shale) RI 1.2 Monolith MyFaces 1.2 X X X RI 1.2 17 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH Gliederung • • • • JavaServer Faces Woodstock Ajax & Dynamic Faces Diskussion & Ausblick 18 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH 9 Woodstock - Übersicht • Ursprung: Glassfish - Administrationsoberfläche • NetBeans: VisualWeb-PlugIn – Gut integriert: Entwicklung durch Drag-and-Drop • Open Source, CDDL-Lizenz • Sehr hohe Qualität • Mächtiges Komponenten Framework 19 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH Woodstock - NetBeans 20 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH 10 Schaufenster - Struktur und Layout • Viele Elemente für Struktur und Layout: – – – – Accordion, Breadcrumbs MastHead, Page, Panel Bubble, Alert LogIn, Wizard 21 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH Schaufenster - Eingabe und Spezielles • Erweiterte Varianten von Textfeldern, Buttons & Co • Calendar, FileUpload • Aber auch Rating, ProgressBar, dndContainer 22 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH 11 Schaufenster - Datentabelle • Umgang mit Daten zentrales Problem • Ziel: Einfache Verwendung & Hohe Funktionalität 23 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH Datentabelle - DataProvider - Übersicht • JSF-DataModel guter Ansatz, jedoch nicht sehr komfortabel • DataTable muß ergänzt werden: Paginieren, Sortieren • DataProvider: Verallgemeinerte DataSources, externe Lib • Dienste: – Einheitlicher Zugriff mit Bean Notation – Grundlage für Sortierung, Paginierung • Kombination w:table & TableDataProvider – Paginierung, Sortierung – Filter: Hilfsklassen sind direkt der Javadoc zu entnehmen – Durch einfache Struktur leicht generierbar 24 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH 12 Datentabelle - DataProvider - Verwendung <w:table title="System User" id="systemUserTable" paginateButton="true" clearSortButton="true" sortPanelToggleButton="true" paginationControls="true"> <w:tableRowGroup sourceData="#{listSystemUserBean.dataProvider}" sourceVar="systemUser" rows="10"> <w:tableColumn id="shortname" headerText="Anmeldename" sort="shortname" rowHeader="true"> <w:staticText text="#{systemUser.value.shortname}" /> ... 25 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH Datentabelle - DataProvider - Übersicht Woodstock Facelets Shale RI 1.2 Data Provider Über DataProvider wenig GlueCode notwendig Backend 26 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH 13 Gliederung • • • • JavaServer Faces Woodstock Ajax & Dynamic Faces Diskussion & Ausblick 27 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH Ajax - Übersicht • Asynchronous JavaScript And XML • Kleine Datenpakete werden asynchron vom Server geladen und angezeigt • Interaktion findet mittels JavaScript und DOM statt • Erweiterung zu Request / Response-Zyklus • Web 2.0, Desktop, schick... 28 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH 14 Ajax - JSF 1.1 • Auf Request / Response Zyklus ausgelegt • Kein eleganter Weg zur Einbindung – PhaseListener – ServletFilter – ... • Kernproblem: Adressierung einzelner Komponente – Overhead durch Baumaufbau: Phase RestoreView – Lebenszyklus zu komplex • Unterschiedliche Lösungen: Nicht kompatibel – Eigene Implementierung: ICEfaces, Oracle ADF – ServletFilter: RichFaces / ajax4jsf Æ Siehe: www.oio.de/public/presentations/#OOP2007 29 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH JSF 1.2 & DynamicFaces • Wichtigste Änderung: UIComponent#invokeOnComponent(.) – Jakob Hookom, Avatar – Erstaunlich schnell Teil der Spezifikation • Darauf basierend: Projekt JSF-Extensions-DynamicFaces • DynamicFaces bildet eine einheitliche Grundlage für Ajax – – – – Eigener Lebenszyklus JavaScript API für asynchrone Kommunikation Benötigt JSF 1.2 Verwendet Shale-Remoting 30 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH 15 DynamicFaces - Lebenszyklus Quelle: https://jsf-extensions.dev.java.net/mvn/tutorial.html 31 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH Woodstock & DynamicFaces • Woodstock verwendet DynamicFaces für Remoting • Dojo-Widget für jede JSF-Komponente – Client-seitiges Rendering – Umfangreiche JavaScript-API • Konsequenzen – Mehr JavaScript als beispielsweise bei RichFaces – Hohe Flexibilität: domNode.refresh() – Nicht auf JSF beschränkt (Server-Seite) 32 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH 16 Woodstock - Client-Server Kommunikation 33 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH Praxis - AutoComplete - Übersicht • Wichtigste Ajax-Anwendung • „Zu Fuß“ nicht ganz einfach • Beispiel: Feld Organisation 34 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH 17 Praxis - AutoComplete - Code • JSP <w:textField id="organisationInput" required="true" autoComplete="true" autoCompleteExpression="#{userBean.getOrganisationChoices}" notify="organisationLabel" text="#{modifyUserBean.updateUser.organisation}" /> • Java public Option[] getOrganisationChoices(String searchString) {....} Æ Zwei Attribute und eine Funktion 35 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH Praxis - Andere Komponenten • Viele Komponenten verfügen über Ajax-Funktionalität • Einbindung über mehrere Wege: – MethodExpression, wie bei AutoComplete – Durch JavaScript domNode.refresh() – Implizit, z.B: MastHead • Spezielle Komponenten: table2 alias Ajax-Tabelle 36 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH 18 Gliederung • • • • JavaServer Faces Woodstock Ajax & Dynamic Faces Diskussion & Ausblick 37 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH Und der Haken? • Sun zieht sich gerade zurück • Dojo-Bug mit Firefox 3 • Starke Verwendung von JSF-1.2 Expressions – Facelets hat damit Probleme – JSFTemplating eine gute Alternative • Starke Verwendung von JavaScript – Höhere Flexibilität • NetBeans vs. Eclipse 38 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH 19 Warum Woodstock? • Herausragende Qualität: Dokumentation, Spezifikation – Wird in vielen Projekten verwendet – Saubere Architektur – Skaliert gut • Umfangreiche Komponenten • DataProvider-API – NetBeans punktet auch hier • Technisch die eleganteste Lösung: DynamicFaces – Basis für einheitliches Remoting 39 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH Qual der Wahl oder Wahl der Qual? • Modulare Erweiterungen wählen • Einheitliche Remoting Schicht: z.B: DynamicFaces • RichFaces besser / schlechter als Woodstock? • Die ideale Erweiterung gibt es nicht: Es muß passen • „JavaScript ist böse“Æ RichFaces • CRUD-Schleudern & Flexibilität Æ Woodstock 40 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH 20 Links • Woodstock http://woodstock.dev.java.net/index.html • JSF-Extensions http://jsf-extensions.dev.java.net • Glassfish https://glassfish.dev.java.net • NetBeans http://www.netbeans.org • Jacob Hookom Avatar-Blog http://weblogs.java.net/blog/jhook/archive/2005/09/jsf_avatar_vs_m_1.html • Woodstock-Showcase http://webdev2.sun.com/example/faces/index.jsp • Woodstock Ajax-Architektur https://woodstock.dev.java.net/docs/specs/ajaxarchitecture-spec.html • Kurze Einführung DataProvider http://blogs.sun.com/winston/entry/creator_data_provider_a_gentle • Facelets http://facelets.dev.java.net • JSFTemplating: https://jsftemplating.dev.java.net/ 41 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH Vielen Dank für Ihre Aufmerksamkeit ! Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim Version: 0.3 www.oio.de [email protected] 21 ? ? ? ? ? Fragen ? Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim Version: 0.3 www.oio.de [email protected] Bilder Raffael: Die Schule von Athen http://en.wikipedia.org/wiki/Image:Sanzio_01.jpg IvanGrohar-Portrait of France Preseren http://commons.wikimedia.org/wiki/Image:Ivan_Grohar_-_Portrait_of_France_Preseren.jpg http://commons.wikimedia.org/wiki/Image:PlateVIIFlyTyingFromRodFishingWithFlys.JPG Bild aus dem Codex Gigas, 13. Jh http://commons.wikimedia.org/wiki/Image:Codex_Gigas_devil.jpg Carl Spitzweg: Der Bücherwurm. (wikimedia): http://commons.wikimedia.org/wiki/Image:Carl_Spitzweg_021.jpg Exekias-Ajax:http://commons.wikimedia.org/wiki/Image:Ajax%27s_face.jpg Coupe.nef.cathedrale.Amiens http://commons.wikimedia.org/wiki/Image:Coupe.nef.cathedrale.Amiens.png http://commons.wikimedia.org/wiki/Image:Flowerpowerportfolio.jpg Die Bilder sind public domain (commons.wikimedia) Shale-Logo: shale.apache.org Screenshots, Diagramme:www.oio.de 44 Die JSF-Erweiterung Woodstock © 2008 Orientation in Objects GmbH 22