Das Java-Framework Spring bekommt eine Zustandsmaschine

Spring Statemachine bringt das Konzept der Zustandsmaschinen mit einer hierarchischen und dank Hadoop-Wurzeln verteilten Maschinenstruktur in das Java-Framework Spring.

In Pocket speichern vorlesen Druckansicht 35 Kommentare lesen
Das Spring-Framework bekommt eine Zustandsmaschine

(Bild: Pivotal)

Lesezeit: 2 Min.
Von
  • Rainald Menge-Sonnentag

Finite State Machines (FSM) übertragen das Konzept echter Maschinen in die Softwareentwicklung zur Verarbeitung von Ereignissen: Vereinfacht ausgedrückt hat ein Automat zu einem Zeitpunkt einen festen Zustand, der sich durch Ereignisse verändern lässt. Die Auslösung des Ereignisses hängt wiederum vom aktuellen Stand ab: Eine geschlossene Fahrstuhltür reagiert nicht auf den Befehl "schließe die Tür". Ein Zustandsübergang wird von Aktionen außerhalb der Maschine begleitet. Die saubere Implementierung von FSMs hilft bei der Verarbeitung asynchroner Prozesse.

UML-Diagramm einer einfachen Zustandsmaschine am Beispiel einer Computertastatur

(Bild: Wikipedia, Mirosamek)

Die Spring Statemachine entstand laut dem Blog-Beitrag dazu genau aus dieser Notwendigkeit: Janne Valkealahti stieß bei der Integration von Hadoop YARN auf das Problem, dass die Kommunikation mit dem Resource Manager asynchron abläuft. Alle Versuche ohne Zustandsmaschine führten bei Code-Änderungen zu neuen Problemen und ihn damit zu der Erkenntnis: "goddammit Janne, I need a state machine." Die komplette Story zu den Beweggründen im Blog ist durchaus lesenswert, zumal wohl jeder Entwickler schon einmal so oft mit dem Kopf gegen die Wand gerannt ist, bis er erkannt hat, dass er eine Tür suchen muss.

Version 1.0.0 der Spring Statemachine verwendet das Grundkonzept mit Auslösern, Übergängen, Aktionen und Bedingungen. Sie bildet sowohl flache Automaten mit einer Ebene als auch komplexere hierarchische Maschinenstrukturen ab. Die Hadoop-Wurzeln des Projekts zeigen sich darin, dass die Statemachine auch verteilte Zustandsmaschinen auf Basis von Zookeeper abbilden kann.

Die Release-Notes geben bereits einen Ausblick in die Zukunft: Version 1.0.x bekommt primär Bugfixes und erweitert dabei eventuell die vorhandenen Konzepte, 1.1 widmet sich der Sicherheit und dem Ausführungsmodell. Bei Version 2.x steht vor allem die Integration in das kommende Spring Framework 5 und JDK8 im Mittelpunkt. Interessierte Entwickler können die Version 1.0.0 bei Maven Central und im Spring Repository herunterladen. (rme)