Im Bereich Free and Open Source (FOSS) Webframeworks hat Java einiges zu bieten. Die bekanntesten dürften Struts, Java Server Faces (JSF), Wicket, Appfuse und das Groovy-basierende Grails sein. Doch seit vielen Jahren gibt es ein komponentenorientiertes Framework mit einigen Vorteilen, nämlich Tapestry.
Einige Kritikpunkte an Tapestry sollen nicht verschwiegen werden, bevor ich die neueste Version, Tapestry 5, näher beschreibe:
Zum einen ist da die fehlende Kompatibilität zwischen den großen Versionen (Tapestry 3, 4 und 5) und das Fehlen eines einfachen Upgrade-Pfades. Dem ist aber entgegenzuhalten, daß die Legacy-Versionen 3 und 4 nach wie vor gepflegt werden.
Zum anderen hängt vieles bei Tapestry vom Genie seines Efinders Howard Lewis Ship ab. Mit Tapestry 5 wurde das Developerteam aber erweitert und damit die Abhängigkeit verringert.
Tapestry in der Version 5 orientiert sich an Komponenten und verfolgt das seit Ruby On Rails (RoR) bekannter gewordene "Convention over Configuratioin" (Konvention statt Konfiguration) Paradigma. Wenn man seine Klassen in der Tapestry-Struktur anordnet, erledigt Tapestry selbständig die mühselige Konfiguration im Hintergrund.
Dazu hat Tapestry 5 oder kurz Tap5 seinen eigenen IOC (Inversion of Control) Container, welcher die Abhängigkeiten im Hintergrund verwaltet und an den entsprechenden Stellen in den Code injiziert.
Eine Tapestry-Anwendung besteht aus Pages (Seiten), auf denen Components (Komponenten) angeordnet sind. Strenggenommen sind Pages eigentlich nur eine besondere Form einer Komponente. Jede Seite hat eine einfache Java-Klasse (POJO), welche auf Ereignisse reagiert, ein Template, welches in jedem beliebigen HTML-Editor entwickelt werden kann, aber im Hintergrund auf XML basiert und einen eigenen Namespace für Tapestry-Komponenten bietet und optional ein ResourceBundle zur Internationalisierung (i18n) der Anwendung.
Von Haus aus bringt Tapestry alle möglichen Formularkomponenten mit und 3 besonders mächtige "automagische" Komponenten:
Das BeanEditForm zum Editieren einer JavaBean, das über Reflection und eine optionale einfache, aber mächtige Konfiguration ein Formular zum Editieren eines Objektes bereitstellt.
BeanDisplay, der ähnlich wie der BeanEditor funktioniert, aber nur zum Anzeigen bestimmter Eigenschaften einer Bean dient.
Grid, eine ebenfalls automatisch erstellte Tabelle mit einer ähnlichen, optionalen Konfiguration (welche Eigenschaften werden wie angezeigt) wie die beiden schon genannten, zur Anzeige einer ganzen Liste von Objekten mit Sortierung und Paginierung.
Tapestry ist auf hohe Performance und Skalierbarkeit optimiert. Neben dieser Eigenschaft, die unter anderem durch intelligentes Caching erreicht wird und Tapestry-Seiten um Größenordnungen schneller macht als äquivalente JSP's, ist besonders auch die einfache Integration von Spring und Hibernate für datenbankorientierte Unternehmensanwendungen interessant.
Besonders die Integration von Spring ist so nahtlos, daß SpringBeans und Tapestry-Komponenten im Programm genau gleich behandelt werden.
Die wenige Konfiguration, die auch bei Tapestry noch nötig ist, wird über Annotations geregelt und damit ist auch klar, dass Tap5 mindestens die Java-Version 5 benötigt.
Ich persönlich habe noch nicht einmal in Grails meine Anwendungen so schnell geschrieben, wie in Tapestry. Dies mag und wird bei anderen anders sein, aber im Endeffekt sind beide Systeme was die Produktivität angeht wohl sehr gut vergleichbar. Inzwischen gibt es auch für Tap5 eine ganze Reihe sehr guter 3rd-Party Komponenten, die die Arbeit und besonders Ajax noch einmal erheblich erleichtern.
Eine genauere Darstellung oder ein Beispiel würden den Rahmen dieses kurzen Artikels sprengen, aber ich hoffe, ich habe neugierig auf Tapestry gemacht und nun bleibt nur noch:
Da Bilder mehr als 1000 Worte sagen, empfehle ich die auf der Homepage
http://tapestry.apache.org/tapestry5
angebotenen Screencasts, sowie das Tutorial und den Maven-Quickstart Archetypen mit denen man sehr schnell zu vorzeigbaren Ergebnissen kommt.
Das erste und sehr gute Buch zu Tapestry 5:
Kolesnikov, Alexander: Tapestry 5: Building Web Applications