Ein Gesicht für Spring Web Flow

Markus Stäuble

Der Markt an Web-Frameworks ist riesig. Um die Projektkosten aber halbwegs im Zaum zu halten, muss man sich zwangsläufig für das eine oder andere entscheiden. Am liebsten würde man aber gerne doch Dinge aus anderen Welten verwenden. Die JSF-Welt wird durch Spring Web Flow 2 endgültig in die Welt von Spring gebracht.

Es hat zwar etwas länger gedauert als angekündigt, aber Ende April 2008 war es dann doch endlich soweit und die finale Version 2 von Spring Web Flow wurde in einem neuen Gewand veröffentlicht. Die Distribution (aktuelle Version 2.0.2) enthält folgende vier Module:

Tabelle 1: Bestandteile von Spring Web Flow 2
Modulname Beschreibung
Spring Binding Modul für das Binding
Spring Faces Mithilfe von diesem Modul ist es möglich, Java Server Faces (JSF) als View-Technologie innerhalb von Spring Web Flow zu verwenden.
Spring JavaScript Abstraktions-Framework zur Verwendung von JavaScript. Als Basis wurde das Dojo Framework verwendet.
Spring Web Flow Das eigentliche Spring Web Flow

Spring Web Flow 2 baut, wie bereits die Vorversion, auf Spring MVC auf. Für die aktuelle Version wird mindestens die Version 2.5.4 des Spring Frameworks und Java 1.4 oder höher benötigt. Ein wichtiges Element im Zusammenhang mit neuen Frameworks sind mit Sicherheit Beispiele. Dies hat Sun schon vorbildlich mit dem Java Pet Store vorgemacht und damit Maßstäbe für andere Frameworks gesetzt. Die erste Version von Spring Web Flow hat zwar einige Beispiele für die Einarbeitung mitgebracht, aber die wirklich große Applikation hat gefehlt. Dieses Manko wurde nun durch die neue Version ausgebessert und es steht eine Webanwendung zur Hotelbuchung zur Verfügung (Abb. 1). Diese Anwendung kann auch direkt online getestet werden.

Abb. 1: Die Hotelbuchung im Einsatz

Nach dem Download der Distribution befinden sich die Beispielapplikationen im Verzeichnis projects. Diese sind hierbei aber nur im Quellcode vorhanden. Dies wurde schon alleine deswegen gemacht, um die Archivgröße klein zu halten. Die Beispiele können mit Apache ANT 1.7.0 erzeugt werden.

Bausteine zum Erfolg

Der Hauptbestandteil von Spring Web Flow sind die Flows. Ein Flow stellt in der Praxis zumeist einen Geschäftsvorfall dar. Wobei solch ein Geschäftsvorfall auch aus mehreren Flows (Subflows) modelliert sein kann. Der Flow selbst ist dabei in einer DSL (Domain Specific Language) beschrieben. Listing 1 zeigt ein einfaches Beispiel eines Flows.

Listing 1

  
  

Ein ganz großer und wichtiger Baustein in der neuen Version ist die Integration mit JSF über das Spring-Faces-Modul. Dies ist auch schon daran zu sehen, dass die Referenzanwendung mit diesem Modul umgesetzt wurde. Ein weiterer wichtiger Punkt ist der Flow Managed Persistence Context. Hiermit ist die Integration mit gängigen O/R Mappern wie Hibernate oder JPA möglich. Die Unterstützung geht so weit, dass am Ende eines Flows die Änderungen automatisch in die Datenbank gespeichert bzw. auch bei Abbruch Änderungen verworfen werden.

Nur Rouge oder doch mehr?

Schon die Vorankündigungen für das neue Release von Spring Web Flow haben erahnen lassen, dass es sich hierbei um mehr als nur eine reine Stabilisierung einer API handelt. Und Entwickler der ersten Stunde, die sich auch schon mit Spring Web Flow der ersten Version befasst haben, müssen darum zunächst auch wieder die Referenzdokumentation wälzen. Vor allem die neue Definition der Flows war am Anfang eine kleine Überraschung, aber nach etwas Entwicklung überwiegt das Positive. Spannend, aber nicht überraschend, ist, dass Spring Web Flow 2 bereits schon auf der SpringSource Application Platform lauffähig ist. Als Fazit bleibt zu sagen, dass es sich für Anwender der Version 1 sicherlich lohnt, umzusteigen, und Neulingen sei gesagt, dass sich ein Blick auf dieses Framework auszahlen wird.

Markus Stäuble ist CTO (Head of Technology) bei namics (deutschland) GmbH, einem führenden IT- und Webdienstleister. Darüber hinaus ist er freier Autor von Fachartikeln.
Geschrieben von
Markus Stäuble
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.