Apr 19

Nun startet wieder das Frühjar mit etlichen Konferzen, auf den man leider nicht bei allen teilnehmen kann. Morgen gehts es gleich schon mal los mit JAX’08 auf der ich auch einen Vortrag und Workshop über Spring halte. Außerdem hält Rod Johnson eine Keynote über die Zukunft von Enterprise Java am Dienstag auf die ich persönlich sehr gespannt bin.
Nach der JAX geht es auch gleich Anfang Juni weiter mit der SpringONE. Die SpringONE dauert dieses Jahr lediglich 2 Tage was aber dem Inhalt in keiner Weise schadet. Im gegenteil, wir haben so viele Announcements und Neuerungen für die Konferenz so dass man gar nicht weiss an welchen Sessions man teilnehmen soll.
Darunter fallen unter anderem Spring 2.5 mit dem Ausblick auf Spring 3.0 für den Herbst, und natürlich Web Flow 2.0 was bis dahin released sein sollte. Außerdem gibt es komplett neue Projekte wie z.B. Spring Integration und natürlich unseren kommerziellen Offerings welche auch komplett neue Funktionalitäten erschließen. Dazu gibt es bereits die SpringSource Toolsuite als Beta für die Entwicklung von Java (vor allem Spring) Anwendungen sowie die Spring AMS (Application Managment Suite) als Release Candidate. Letzteres ist vor allem immer wieder ein Thema vor allem beim Betrieb, nämlich die Überwachung und Kontrolle einer Spring Anwendung.

Feb 03

Am 03 März 2008 findet in Stuttgart eine Spring Release Party statt. Auf der Party werden spannende Vorträge zu Spring, Spring .NET, Spring Security (ehemals Acegi) sowie Spring Web Flow / Spring Faces gehalten.

Zu den letzten beiden Themen werde ich einen Vortrag von 16.30 - 17.30 halten. Im Anschluss an dem Vortrag findet ein Code Camp statt an dem auch gehackt werden darf.

Weitere Informationen gibt es hier http://www.jugs.org/veranstaltung-03-03-08.html

Aug 19

Spring Webflow ist ein Web Application Controller Framework. Mit Hilfe von Spring Webflow lassen sich autonome und in sich konsistente Maskenabläufe innerhalb einer Web Anwendung modellieren und wiederverwenden. Dadurch können einzelne Dialoggestützte Geschäftsprozesse innerhalb einer Web Anwendung Logisch abgebildet werden (z.B. Order erstellen etc.). Spring Webflow ist unabhängig von einem MVC Framework. Derzeit wird Spring MVC, Java Server Faces und Struts unterstützt. Weitere Informationen zu Spring Webflow befinden sich auf der Webseite selbst.

Aktuell befindet sich Spring Webflow in der Version 1.0.4 welches ein Bugfix Release zum 1.0 Branch darstellt. Wobei hier bemerkenswert ist, das Spring Webflow mit der Version 1.0 bereits einen sehr reifen und stabilen Stand hatte. Ich habe Spring Webflow persönlich in mehreren Projekten eingesetzt, und wir hatten sehr wenige und vor allem nur triviale Probleme während der Entwicklung.
Mit Spring Webflow 2.0 ist ein neues Feature Release geplant, in diesem sollen einige neue Funktionen implementiert werden, und natürlich bestehende verbessert werden. Spring Webflow 2.0 wird in 3 Milestone Releases veröffentlicht. Nachfolgend einige der neuen (geplanten) Spring Webflow 2.0 Features

Für Milestone 1 sind folgende Features geplant

- Spring Webflow Scopes
Seit der Version 2.0 des Spring Frameworks (welches von Spring Webflow verwendet wird), besteht die Möglichkeit das Beans unterschiedliche Gültigkeitzeiträume besitzen (Scopes). Von Haus aus werden von Spring die Scopes Singleton, Session, Request sowie Prototyp mitgeleifert. Mit Spring Webflow 2.0 stehen zudem die Scopes Conversation sowie Flow zur Verfügung. Dadurch können einzelne Objekten aus den beiden Scopes direkt aus dem ApplicationContext ausgelesen werden. Ben Hale hat hierzu einen Blog Eintrag (in Englisch) erfasst.

- Flow Namespaces
Mit Version 2.0 können einzelne Flows in verschiedene Namespaces abgelegt. Dadurch können auch Flow mit identischen Namen innerhalb von Spring Webflow verwendet werden.

Bsp.
/order/createFlow.xml
/reporting/createFlow.xml

Die beiden Flowdefinitionen würden Aufgrund der angelegten Verzeichnisstrukturen in unterschiedlichen Namespaces liegen. Dadurch erhält man eine erhöhte Flexiblität vor allem bei der Wiederverwendung von Flow Dateien.

- EL Ausdrücke anstelle von OGNL Ausdrücken
Seit der Version 2.0 werden EL (Expression Language) Ausdrücke zusätzlich zur OGNL (Orthogonal Graph Notation Language) unterstützt. Dies ist vor allem dann sinnvoll wenn man mit Java Server Faces arbeitet, und in der View sowieso EL Ausdrücke verwendet.

- Verwendung von Java Server Faces Managed Beans im Flow
Mit der Version 2.0 können in Faces Definierte Beans (sog. Faces Managed Beans) über EL Ausdrücke im Flow angesprochen werden. Dies ist dann sinnvoll wenn man die Managed Beans für die Anzeige z.B. in der Faces Konfigurationsdatei konfiguriert. Ich persönlich sehe hier keinen wirklichen Vorteil, da ich sowieso alle Beans im ApplicationContext konfiguriere. Alleine schon deswegen weil gewisse Herren von Sun noch nichts von XML Attributen gehört haben.

- Flow Managed Persistence Context für Hibernate und Java Persistence API
Bei der Verwendung eines O/R Mappes steht man schnell vor dem Problem des dynamischen Nachladen von Objektgraphen (lazy-loading). Dabei gibt es mit Sicherheit sehr viele Ansätze dies zu handeln (DTOs, Open Session in View). Bei der Verwendung des Open Session In Views Pattern müssen die Objekten manuell wieder in die Hibernate Session (oder den JPA Persistence Context) überführt (saveOrUpdateCopy bzw. merge) werden.
Spring Webflow 2.0 bietet für diese Problem eine Lösung an. Dabei wird beim Erstellen eines Flows eine Hibernate Session geöffnet (mit dem FlushMode MANUAL). Innerhalb der Flow Verarbeitung können nun Daten über einzelne Transaktionen gelesen werden. Beim Beenden des Flows wird nun (deklarativ) gesteuert ein commit durchgeführt. Da der commit gleichzeitig ein Flushen der Session bewirkt werden somit alle Änderungen an den Objekten innerhalb eines Flow in die Datenbank geschrieben. Nach dem beenden des Flows wird auch die Hibernate Session geschlossen. Die Lösung bietet mit Sicherheit einige Vorteile gegenüber dem klassischen OpenSessionInView Patterns an (es wird immer in einer Transaktion gelesen), hat aber wie auch alle anderen Lösungen auch verschieden Nachteile.

Für Milestone 2 sind folgende Features geplant

- Verbesserte Java Flow Definition
Derzeit existiert noch keine konkrete Implementierung zu dieser Funktionalität. Allerdings stehen hierzu erste Überlegungen im Raum die Flow Erstellung mit Hilfe von Java durch Annotation zu Vereinfachen. So können einzelne Klassen mit den Annotations @Flow markiert werden. Eine State wird durch eine innere Klasse innerhalb der markierte Klasse dargestellt und mit einer Annotation z.B. @ViewState annotatiert. Die einzelnen Methoden innerhalb des ViewState Klasse stellen die einzelnen Transitionen dar.

Bsp.

@Flow
class FlowClass{

@ViewState
class MeinViewState{

public void meineTransition(){
}
}
}

- Unterstützung für paralelle Subflows
Derzeit kann nur ein Subflow aufgerufen und verwaltet werden. In viele Anwendungsfällen will man aber mehrere Subflows parallel starten und diese anschließend an einem konkreten Punkt (Barriere) wieder zusammen führen (auch bekannt als fork/join Szenario aus dem Workflow Bereich). Spring Webflow 2.0 wird das forken und zusammenführen von Subflows unterstützen. Dadurch lassen sich Use-Cases abbilden wie z.B. eine Reisebuchung in welcher die Flüge, Hotels und Mietwägen parallel ausgesucht werden können, und erst beim Übergang zur Buchung beendet sein müssen. Auch beim Abbruch des Buchungsvorgangs würden alle “geforkten” Subflow beendet werden.

- Vererbung von Flow Definitionen

In vielen Webanwendung existieren des öfteren Anwendungsweit verschiedene Menüpunkte welche aus jeder Maske heraus aufrufbar sind. Dies sind typischerweise Hauptmenüs, Hilfe System etc. In der Version 1.0 konnte man lediglich über einen EntityResolver solche “globale Transitionen” für jede Flow Definitionen Anwenden. Mit Spring Webflow 2.0 können diese Szenarien über Flowvererbung abgebildet werden. So kann man z.B. einen BasisAnwendungsflow Flow definieren, dieser enthält alles States und globale Transitionen für die Anwendungen. Anschließend leiten die konkreten Flow Implementierungen von der BasisAnwendungsflow Definition ab.

Ich persönlich denke das sich durch diese Funktonalität einige schreibareit in Zukunft sparen lässt, da man doch immer solche “breadcrump” transitionen wie hilfe-system und hauptmenü in einem flow hat.

- Message Abstraktion

In jeder Web Anwendung besteht die Notwendig Meldungen zu generieren und anzuzeigen. Da Spring Webflow einen Application Controller darstellt und darin auch Meldungen für die Anzeige generiert werden, ist eine Abstraktion sinnvoll. Die Abstraktion würde als Fassade zu den darunter liegenden MVC Framework agieren, welche die Meldungen entgegen nehmen und Anzeigen. Somit entfällt der Aufwand für eine Eigenimplementierung falls man die Action Klassen von dem MVC Framework entkoppeln will. (Was meiner Meinung nach sehr sinnvoll ist).

Die Inhalte für Milestone 3 sind noch nicht festgelegt

- Verbesserte Java Server Faces Integration
Auf Grund er sehr häufigen Verwendung von Spring Webflow zusammen mit Java Server Faces wird auch während der gesamten Spring Webflow 2.0 Entwicklung die Integration mit Java Server faces verbesset. Dazu gehört zu einem das Verbesserte Error Handling während dem Rendern der View, es werden Probleme welche durch das POST-Redirect-GET Pattern im Zusammenhang mit Java Server Faces auftauchen behoben. Für das komplette Themengebiet wurde deshalb ein neues Modul innerhalb vom Spring Webflow mit dem Namen Spring Faces “herausgelöst”. In diesem Modul sollen sämtliche Java Server Faces spezfischen Themen behandelt werden.

Alles in allem sind die oben genannte Punkte nur ein sehr kleiner Ausschnitt der neuen Spring Webflow Version. Es wird allerdings deutlich das sich einiges in nächster Zeit tun wird. Ich gehe auch von einer sehr guten Abwärts-Kompabilität (wie man das von Spring her bereits kennt) aus, so das ein Update auf Spring Webflow 2.0 ohne größere Schwierigkeiten klappen sollte.