JBoss Seam ist ein junges “Web 2.0” Enterprise Java Framework, das eine Reihe von Java-Standards und freien Technologien vereint und so eine Grundlage für komplexe Java-Webanwendungen bietet. Seam wurde von niemand geringerem als Gavin King erdacht, der bereits das Mastermind hinter dem erfolgreichen O/R-Mapping-Framework Hibernate war. Auch beide Autoren von »JBoss Seam – Simplicty and Power beyond Java EE«, Michael Yuan und Thomas Heute, waren zum Zeitpunkt der Veröffentlichung bei JBoss beschäftigt und aktiv in Seam involviert. Auf 400 Seiten führen sie den Leser in sieben Teilen und insgesamt 27 Kapiteln in JBoss Seam 1.2 ein.
Der Getting Started Teil führt den Leser an JBoss Seam heran und beginnt mit einer Übersicht über Seam und die Design-Philosophien, mit denen Seam entworfen wurde: die Integration der Standard JEE5 Frameworks EJB 3 und JSF 1.2 sowie die Überwindung einiger Schwächen ebendieser, die sinnvolle Integration von weiteren Open Source Frameworks, Vermeidung von XML Overhead für Configuration Management, leichte Testbarkeit, und so fort. In Kapitel 2, Seam Hello World, folgt das klassische Hello World Beispiel, in welchem dem Leser die Entwicklungsschritte zum Aufsetzen und Implementieren eines einfachen Seam Projekts mithilfe von JSF und EJB3 Session Beans oder POJOs nahegebracht werden, inklusive Testen und Packaging. Darauf aufbauend diskutiert Kapitel 3, Recommended JSF Enhancements, wie man allgemeinen Problemen mit JSF entgegenwirken kann. Hier werden Facelets sowie Seam eigene Erweiterungen besprochen, wie Seam UI Tags oder die Seam PDF und Mail Bibliotheken, die aus einer Facelet XHTML Datei PDFs generiert oder Mails verschickt. Seam kommt mit einem Generator in Ruby On Rails Manier, der leere Projekte wahlweise für Eclipse oder NetBeans mitsamt allen nötigen Konfigurationsdateien erzeugt oder Beans aus Datenbanktabellen herleitet. Seam Gen wird in Kapitel 4, Rapid Application Development Tools, vorgestellt.
Teil II, Stateful Applications Made Easy, beschreibt das Seam-eigene Konzept der Conversations, mithilfe derer Seam statusbehaftete Web-Anwendungen auch über einzelne Requests hinaus (Yuan und Heute nennen beispielhaft den Bezahlvorgang in einem Internetshop, von Bestätigung über Zahlungsmittel- und Adresseingabe bis zur Bestätigung) und konkurrierend verwaltet, und zwar unabhängig von JSF und EJB3. In Kapitel 5, An Introduction to Stateful Framework, werden die Vorzüge dessen vorgestellt, wie beispielsweise der verbesserte Umgang mit der Nutzung des “Zurück” Buttons im Browser aus Benutzersicht oder die Reduzierung von Memory Leaks und unnötigem Code aus Entwicklersicht. Kapitel 6, A Simple Stateful Application, beschreibt, wie statusbehaftete Komponenten in Seam deklariert werden – von Entity Beans über Session Beans bis zu kompletten Lebenszyklen – und wie die Navigation per JSF Navigation Rules gesteuert werden kann. Die folgenden drei Kapitel, Conversations, Workspaces And Concurrent Conversations, sowie Transactions gehen dann im Detail auf das Conversation Konzept sowie die Möglichkeit der Verwaltung von mehreren konkurrierenden Conversations innerhalb einer Session (gebündelt in sog. Workspaces) und Transaktionsklammern ein.
Teil III, Integrating Web and Data Components, beschäftigt sich mit den Seam-eigenen Erweiterungen. Kapitel 10, Validating Input Data, behandelt Seams eigene Validatoren auf Bean-Ebene, die den Vorteil bieten, dass sie sowohl Richtung Oberfläche als auch Richtung Datenbank stets eingehalten werden müssen, und die Anzeigemöglichkeiten von Validator-Nachrichten auf der Oberfläche sowie der Lokalisierung ebendieser. Ebenso bietet Seam selbstredend Mittel zur Fehlerbehandlung (Kapitel 14, Failing Gracefully), um gezielt Exceptions abzufangen. Hierbei wird auch erwähnt, wie Seam mithilfe von Annotations auf Exceptions reagieren und bspw. einen Rollback durchführen kann, und wie man Fehler mithilfe der Seam-eigenen Debugseite aufspürt. Sogenannte “Rich UIs” sind heute auch bei Webanwendungen selbstverständlich, und so wird auch JavaScript und AJAX von Seam umfänglich unterstützt. Letzteres schlägt sich im Kapitel 15, Custom and AJAX UI Components, nieder, das sich umfänglich mit der Integration von ICEFaces und Ajax4JSF beschäftigt. Kapitel 17, Direct JavaScript Integration, zeigt dem Leser diejenigen Mittel auf, mit deren Hilfe Seam den Entwickler clientseitig in die Lage versetzt, direkt auf Entity Beans oder JavaBean POJOs zuzugreifen. Ebenso wird die Einbindung weiterer JavaScript Bibliotheken wie Dojo besprochen.
Teil V des Buches, Business Processes and Rules, behandelt die Unterstützung zweier weiterer JBoss eigener Frameworks, namentlich jBPM zur Modellierung von Geschäftsvorgängen sowie die JBoss Rule-Engine (Drools).
Seam bietet ein eigenes Test-Framework auf Basis von TestNG, mit dessen Hilfe die Funktionalität von POJOs im Rahmen von Unittests überprüft sichergestellt werden kann. Darüber hinaus sind Integrationstests mithilfe der Seam Runtime möglich, ohne dass ein Application Server gestartet werden muss. Diese Testmöglichkeiten werden in Teil VI, Testing Seam Applications, in den Kapiteln 21, Unit Testing, und 22, Integration Testing, behandelt.
Schlussendlich schließt Teil VIII, Production Deployment, das Buch und behandelt das Deployment von Seam in verschiedene Application Server wie JBoss und Glassfish (Kapitel 23, Java EE 5.0 Deployment) wie auch das Deployment in den Tomcat Servlet Container (Kapitel 25, Tomcat Deployment). Außerdem wird die Konfiguration einer Produktionsdatenbank und Performance-Optimierung und Clustering besprochen.
Im Anhang findet der Leser Informationen über die Installation des JBoss Application Servers sowie eine Anleitung, wie man die vorhandenen Beispielanwendungen als Ausgangspunkt für eigene Applikationen verwenden kann.
Zum Zeitpunkt der Veröffentlichung von JBoss Seam standen Java-Webentwickler vor der Wahl zwischen dem in die Jahre gekommenen Struts sowie zwei Frameworks jüngeren Datums, Struts Shale und Seam. Konsequenterweise wurden zu Seam zügig die ersten Bücher geschrieben, obwohl neue Versionen fast im Wochentakt veröffentlicht wurden. »JBoss Seam – Simplicity and Power beyond Java EE« war der erste Titel, der als Print verfügbar war, nachdem interessierte Entwickler bereits beim Safari Books Online Programm Blicke auf die Vorabversionen werfen konnten. Der ersten Auflage hat dieser Prozess nicht geschadet: Auch ohne tiefergehende JEE Kenntnisse findet man als Leser schnell einen Einstieg, nicht zuletzt dank des obligatorischen Hello World Beispiels. Außerdem lassen sich die Autoren über zahlreiche Pros und Contras von JEE5 aus, so dass sich leicht nachvollziehen lässt, wie Seam funktioniert und warum dieser oder jener Ansatz gewählt wurde. Die weitergehenden Konzepte von Seam werden bausteinartig vorgestellt, wobei sich die Autoren insbesondere bei Seams eigenem Conversations-Konzept bemühen, die Lernkurve möglichst flach zu halten. Das Hello World Projekt wird hier bspw. anhand eines einfachen Beispiels erweitert, was dem Leser zugute kommt und die Nachvollziehbarkeit fördert. Wieder und wieder streuen die Autoren Hinweise und Tipps in grauen Textboxen ein, z.B. über Bugs in verwendeten Bibliotheken oder dem aktuellen Thema verwandte Befehle.
Wer das frühe Hello World Beispiel nicht so dankbar annimmt, wird sich darüber ärgern, dass das zugehörige Kapitel 2 zahlreiche Referenzen auf Folgekapitel hat – kein Wunder, schließlich schneidet das Kapitel viele später im Detail besprochene Themen kurz an um zu einem Ergebnis zu kommen. Man kann es den Autoren außerdem nicht verübeln, dass gerade die ersten Kapitel stellenweise wie eine Werbeveranstaltung für Seam klingen.
Wer sich mit Seam beschäftigen möchte, wird Java und Webentwicklung zumindest in Grundzügen beherrschen und damit mit Yuans und Heutes Titel wenig Schwierigkeiten haben. Dank des einfachen Einstiegs, dem moderat ansteigenden Schwierigkeitsgrad und den zahlreichen Codebeispielen lassen sich die im Buch entwickelten Beispielanwendungen auch ohne JEE5 Expertenkenntnisse nachvollziehen. Experten überfliegen die bekannten Teile und widmen sich direkt den Seam-Spezifika. Damit ist der Titel gleichermaßen für JEE-Einsteiger wie -Experten geeignet. Wer allerdings eher nach einer Referenz sucht, sollte nach alternativen Titeln Auschau halten. Ebenfalls zu Seam erschienen sind die Titel »Beginning JBoss Seam – From Novice To Professional« von Joseph F. Nusairat im Verlag Computer Bookshops sowie das deutschsprachige »JBoss SEAM – Die Web-Beans Implementierung« von Bernd Müller, erschienen im Hanser Fachbuchverlag.
»JBoss Seam – Simplicty and Power beyond Java EE« enthält keine CD, Michael Yuan pflegt allerdings ein Blog in dem alle Codebeispiele zum Download zur Verfügung stehen, die als zusätzlicher Bonus auch auf aktuellere Seam Versionen portiert wurden. Wer das Buch erwirbt, findet im Innenteil außerdem einen Aktivierungscode für einen 45-tägigen Zugang zur Online-Ausgabe des Buchs bei Safari Books. So kann der Leser schnell nach Stichworten suchen und das Buch am Bildschirm studieren.
Blog zum Buch: http://www.michaelyuan.com/blog
Matthias Gall, Oktober 2007