Oberflächlich betrachtet handelt es sich bei Spring Roo zunächst um eine Art Grails für Entwickler, die in ihren Projekten, aus welchen Gründen auch immer, kein Groovy verwenden dürfen oder können: Roo erlaubt es, sehr schnell Projekte aufzusetzen, unterstützt die Evolution von Domänenobjekten, bietet Scaffolding usw., alles aber auf reiner Java-Basis. Hervorzuheben ist, dass mit Roo generierte und entwickelte Projekte keine Abhängigkeiten zu Spring Roo haben, sondern vollständig autark lauffähig sind – ein wichtiger Vorteil, wenn man Entwicklungen auch ohne Roo weitertreiben oder in andere Umgebungen überführen will. Unterstützt werden zum Beispiel JPA, Hibernate und die verschiedenen Spring-Module.
Schaut man etwas genauer hin, könnte man Roo für eine Art Architektur-Wizard für Spring-Projekte halten: Es fördert die hinlänglich bekannten Best Practices von Spring, indem automatisch entsprechende Klassen- und Interfacehierarchien generiert, die entsprechenden Annotations-, Aspekt- oder XML-basierten Konfigurationen sinnhaft erstellt werden usw. Insbesondere unterstützt Roo dabei auch ein vollständiges Roundtripping und weiß Code-Änderungen wieder in das zugrunde liegende Metamodell zu übernehmen und auch mit diesen zielführend umzugehen. Dies erlaubt einen schnelleren und leichtgängigeren Einstieg in moderne (und damit komplexe) Spring- bzw. JavaEE-Projekte, denn Roo generiert auch viel Nützliches um die eigenen Klassen herum – Methoden zum Zählen, Laden, Speichern und Suchen von Objekten zum Beispiel, erweiterte Debugging-Informationen über toString() und mehr.
Geht man noch tiefer und nutzt z. B. die Vortragspausen auf der SpringOne, um sich mit dem vor Begeisterung glühenden Ben Alex, dem SpringSource Project Lead hinter Spring Roo, zu unterhalten, entdeckt man aber viele weitere interessante Aspekte, die Spring Roo als interessante Basis für vielfältige Erweiterungen erscheinen lassen, u. a.:- Es verfügt intern über ein ausgefeiltes Metamodell zur Abbildung der verschiedenen Projektartefakte und ihrer Abhängigkeiten – damit stehen sehr detaillierte Informationen über die Sourcecode-Ebene zur Verfügung, die aber auch für weiterführende Aktionen nutzen können (zum Beispiel im Rahmen von Projektarchitektur-Refactorings als eine Idee).
- Es verwaltet ein Metadateisystem, das auch transaktionale Veränderungen unterstützt. Intern benötigt Roo dies, um Änderungsoperationen an Artefakten zurücknehmen können, wenn eine späte Änderung aus welchen Gründen auch immer fehlschlägt.
- Es nutzt ein ausgefeiltes Event-System, um über Änderungen an Artefakten informiert zu werden und dann weiterführende Aktionen anzustoßen.
- Es stellt ein Plug-in-Konzept bereit, dass laut Ben darauf optimiert ist, leicht Erweiterungen zu Roo implementieren zu können. Hier hofft SpringSource auf eine wachsende Community, die analog zur Grails-Community auch Roo in noch weitere Höhen katapultiert.
Bezüglich der Werkzeueg bietet Spring Roo zunächst ähnlich wie Grails eine ´"kommandozeilenbasierte Benutzeroberfläche". Diese Kommandozeilenorientierung wird allerdings auf Grundlage einer eigenen Shell bereitgestellt, die erheblichen Bedienkomfort und vielfältige Unterstützungsmöglichkeiten für den Roo-Nutzer bietet. Insbesondere gibt es eine sehr starke, kontextsensitive Anleitung des Roo-Anwenders, was von implizit sinnvollen Kontextbezügen über Autovervollsändigung bis auf Parameterebene und sogar hin zum Ausblenden aktuell nicht sinnvoller Befehls- und Parameterkombinationen reicht. Dieser Ansatz ist so leistungsfähig, dass es zukünftig sogar eine ausgegliederte „Spring Shell“ für die Nutzung auf dem selben Paradigma auch in anderen Projekten geben soll – der SpringSource dm Server mit seiner Administrationskonsole ist hier im Spring-Porfolio sicherlich ein erster heißer Kandidat, Grails könnte davon sicher auch profitieren.
Über diese Shell hinausgehend, wird Roo zukünftig aber auch eine zunehmende intensivere Unterstützung innerhalb von Eclipse in Form einer engeren Integration in die SpringSource Toolsuite (STS) erfahren.
Zusammenfassend stellt sich Spring Roo als ein vergleichsweise interessantes Projekt für die reine Java-/Spring-Welt dar: Gelingt auch nur eine annähernde Dynamik wie bei Projekten wie Grails, dürfte sich hier schnell ein interessantes Ökosystem zur Standardisierung und Beschleunigung von Spring-Projekten ergeben. Die Ansätze wirken erheblich ausgereifter und moderner als klassisch Maven-basierte Vorgehensweisen, und insbesondere das Vorhandensein eines Metamodells zu allen betrachteten Artefakten dürfte sich als extrem hilfreich erweisen, um interessante Erweiterungen zu entwickeln. Gerade Refactorings von Roo-basierten Projekten auf Projektartefaktebene erscheinen dem Autor als ein sehr spannendes Thema – die nächsten Wochen und Monate werden zeigen, wohin Roo (was übrigens von "Cangaroo" kommt) hinspringt.




