Surviving the Jungle
Die JSF-Spezifikation sieht sich häufig der Kritik ausgesetzt, dass sie sich in vielen Punkten nicht nahe genug an den "Real Life"-Problemen eines Webentwicklers orientiert. Hier setzt das Subprojekt Trinidad an, einer Open Source Code Donnation aus dem Hause Oracle.
Trinidad bietet insgesamt mehr als 100 Komponenten an, die bereits Ajax verstehen. Neben einfachen Komponenten, z.B. SpinBox, oder verbesserten Varianten des Standards (inputText) gibt es auch komplexere Komponenten, wie tree oder table. Die Tabelle verfügt über zahlreiche Features, wie sie der einfach gehaltene JSF-Standard nicht vorsieht. Integrierte (Mehrfach-)Selektion, Navigation über große Datenbestände oder das Einblenden von weiteren Details einer Zeile sind mit Trinidad direkt – ohne extra Aufwand – möglich. Trinidad selbst ist nicht nur eine einfache Komponentenbibliothek, sondern auch ein Framework, das für eigene Komponenten genutzt werden kann. Das Oracle-ADF-Faces-RichClient-Projekt basiert auf der Trinidad-1.2.x-Version. Trinidad enthält ebenfalls zahlreiche Maven-Plug-ins, die das Programmieren von Komponenten deutlich erleichtern.
HTMLless Web
Das Subprojekt Tobago – aktuell in der Version 1.0.20 verfügbar – stellt an sich selbst den Anspruch, dem Entwickler ein Werkzeug an die Hand zu geben, mit dem komplexe, Desktop-ähnliche Webanwendung umgesetzt werden können. Zu diesem Zweck bietet Tobago eine ganze Reihe komfortabler High-Level-Komponenten, die mithilfe eines Layoutmanagers in einer Seite platziert werden können. Die Tobago-UI-Komponenten abstrahieren von HTML und Layoutinformationen, die sich nicht auf die generelle Seitenstruktur beziehen. Ein Layoutmanager sorgt für die automatische Anordnung der UI-Komponenten. Ein Theming-Mechanismus ermöglicht die schnelle und konsistente Anpassung des gesamten Look-and-Feels der Anwendung. Tobago basiert somit auf der strikten Trennung von Struktur und Design. Der Entwickler definiert die Struktur einer Seite sowie die enthaltenen Komponenten. Die Repräsentation wird von Tobago übernommen und kann via Themes den eigenen Wünschen angepasst werden.
Mehr ist mehr ...
Der Begriff "JSF Extension" trifft wohl am ehesten die Ausrichtung des Subprojekts Orchestra. Es handelt sich bei Orchestra um eine JSF Library mit etlichen Features, die das Leben eines JSF-Entwicklers deutlich vereinfachen können. Eines der Kernfeatures stellt die Einführung eines in der JSF-Spezifikation nach wie vor schmerzlich vermissten Conversation Scope für ManagedBeans dar, der für die Implementierung von lang laufenden Dialogen mit mehreren Requests – also zum Beispiel Wizards – genutzt werden kann. In der reinen JSF-Welt wird für diesen Zweck leider nicht selten der Session Scope missbraucht. Die einzige Voraussetzung für die Verwendung des Conversation Scope ist, dass die entsprechenden ManagedBeans via Spring, und nicht via klassischer Faces-Konfiguration, deklariert werden müssen. Alternativ dazu können ab Java 5 auch entsprechende Annotationen verwendet werden.
Neben dem eben beschriebenen ConversationScope sind im Orchestra-Umfeld auf jeden Fall noch der PersistenceContext und der ViewController eine nähere Betrachtung wert: Exceptions wie die LazyInitializationExeption bzw. NonUniqueException kennt wohl jeder, der seine ersten Gehversuche im JSF-Umfeld mit Persistenzobjekten à la JPA oder Hibernate gemacht hat. Orchestra schafft hier Abhilfe, indem der Orchestra PersistenceContext und ConversationScope in Einklang gebracht werden. Der ViewController bietet eine Lösung für die in JSF bisher noch fehlende Unterstützung von LifeCycle Events auf View-Ebene. Mithilfe seiner drei Callback-Methoden initView(), preProcess() und preRenderView() kann der Entwickler gezielt auf die wichtigsten Phasen innerhalb des Lebenszyklus einer View reagieren. Das Mapping zwischen View und Controller funktioniert dabei via Namenskonvention. Eine Alternative stellt ab Java 5 ein explizites Mapping via Annotationen dar, durch das auch mehrere Views auf einen Controller gemappt werden können:
@ViewController(viewIds={"/pageOne.jsp", "/pageTwo.jsp"})public class MultiViewControllerBean {...@InitViewpublic void initializeView () {...}...}
Brücken schlagen
Auch das Thema "JSF und Portlet" kommt bei MyFaces mit der JSF Portlet Bridge nicht zu kurz. Seit einer Codespende von Oracle wird die Referenzimplementierung des JSR 301 nun durch die große MyFaces-Community erstellt.
Die Spielwiese
Das Subprojekt Sandbox dient als Spielwiese für zukünftige Tomahawk-Komponenten, Validatoren und andere JSF-"Goodies". Ein regelmäßiger Blick in die Sandbox verschafft einen guten Eindruck von der zukünftigen Ausrichtung des Tomahawk-Subprojekts. Bei der Verwendung der dort zu findenden Komponenten sollte allerdings unbedingt bedacht werden, dass es sich hier um work in progress handelt, d.h. Stabilität der Sourcen und Schnittstellen sind nicht oberstes Ziel.
Fazit
Wie sich zeigt, hat das Apache-MyFaces-Projekt deutlich mehr zu bieten als „nur“ eine reine JSF-Implementierung. Jedes einzelne Subprojekt beschäftigt sich mit der Lösung von Problemfeldern aus dem realen JSF-Entwicklerleben. Nahezu alle Subprojekte lassen sich optimal kombinieren und spielen so ihre Stärke aus. Es gilt, wie im Titel bereits vermerkt: 1 + 1 = 3.
Lars Röwekamp ist Geschäftsführer der OpenKnowledge GmbH und berät seit mehr als 10 Jahren Kunden in internationalen Projekten rund um das Thema Enterprise Computing.
Matthias Weßendorf arbeitet für die Oracle Corp. an ADF Faces und Apache Trinidad. Seit 2004 ist er PMC von Apache MyFaces. Matthias hat an verschiedenen internationalen Konferenzen als Redner teilgenommen.




