December 2, 2009

Spring Webanwendung generieren

Inspiriert durch den Artikel Spring ROO - Codegenerierung "the Spring Way" von Mike Wiesner in Novemberausgabe des Java Magazins, probierte ich das neue Framework vor Kurzem mal aus. Der Ansatz CRUD-Anwendungen zu generieren ist zwar nicht neu, allerdings wirkt die Entwicklungsumgebung enorm leistungsstark. Zudem erscheinen mir die verwendeten Konzepte zur Organisation/Trennung von generierten und manuellen Artefakten recht praktikabel, so dass ein leichter Einstieg in die Domain-Driven Entwicklung von Anwendungen möglich ist.

Mit Spring Roo können komplette CRUD-Webanwendungen inklusive Zugriff per REST erzeugt werden. Die umfangreiche Konfiguration, die dafür notwendig ist, wird einfach generiert. Das stellt natürlich eine enorme Erleichterung dar und die ersten Schritte zu einer minimalen Anwendung sind schnell erledigt. Wie aufwendig die manuelle Implementierung einer solchen einfachen Anwendung ist, musste ich bereits in diesem Posting feststellen.
Hier nun kurz die Schritte zu ersten CRUD-Webanwendung mit Hilfe von Spring Roo.
  1. Verwendete Software
    1. Projekt initialisieren
    2. Fachklassen mit Hilfe der Roo Shell generieren
    3. WebController
    4. Anwendung testen
  2. Fazit

Verwendete Software

Projekt initialisieren

  • STS starten und Neues Roo Projekt anlegen
    Roo Shell Projekt hinzufügen
    Roo Shell Projekt hinzufügen
  • Nachfrage nach Aktivierung von AspectJ Feature bestätigen
  • STS neu starten lassen
  • Roo Shell
    Roo Shell
  • Roo Shell Window öffnen, sofern dies noch nicht geschehen ist und das neue Roo Projekt hinzufügen

Fachklassen mit Hilfe der Roo Shell generieren

  • Anleitung ausgeben (roo> hint)
  • die Roo Shell erzeugt lange und ausführliche Ausgaben, so dass die Limitierung der Konsolenausgabe in Eclipse deaktiviert werden sollte (Limit console output abwählen)
    Ausschalten der Limitierung der Konsolenausgabe
    Ausschalten der Limitierung der Konsolenausgabe
  • Persistenz einrichten (roo> persistence setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY)
  • daraufhin werden die notwendigen Konfigurationen geschrieben (persistence.cml, database.properties) und alle notwendigen Pakete per Maven heruntergeladen
  • Anleitung für den nächsten Schritt ausgeben (roo> hint)
  • Ticket Entität erzeugen (entity --name ~.entity.Ticket --testAutomatically), wobei sogar ein Test-Setup gleich mit erzeugt wird (--testAutomatically)
  • und wieder weiter mit (roo> hint)
  • roo> field string --fieldName name usw.
  • Enumeration TicketStatus per Hand erstellen
  • Ticketstatus im Ticket referenzieren: roo> field reference --fieldName tstate --type ~.entity.TicketState

WebController

  • Controller generieren (Anweisungen: roo> hint controllers)
  • roo> controller scaffold --name ~.web.TicketTrackerController --entity Ticket
  • das funktioniert nicht Could not determine the plural name for the 'status' field in Ticket
    • Suche im Internet schlägt die Verwendung der Annotation @RooPlural vor, doch das löst das Problem nicht
    • also erstmal die Referenz im Ticket entfernen (einfach in der Java Klasse)
  • und nochmal roo> controller scaffold --name ~.web.TicketTrackerController --entity Ticket, dass zahlreiche Dateien generiert

Anwendung testen

  • mit roo> perform package ein Webpaket builden (dauert einen Moment, da eine Menge Libraries per Maven noch heruntergeladen werden)
  • Webanwendung starten (roo> deploy --server "SpringSource tc Server v6.0")
  • http://localhost:8080/$eclipse_project_name aufrufen

Startseite der gernerierten Webanwendung
Startseite der gernerierten Webanwendung
Webanwendung - Ticketliste
Webanwendung - Ticketliste

Webanwendung - Ticket anlegen
Webanwendung - Ticket anlegen

Fazit

Mit Hilfe von Spring Roo kann sehr schnell eine CRUD-Webanwendung erzeugt werden, die dann weiterentwickelt werden kann. Die Auslagerung von generierten Komponenten in Form von Aspekten erscheint praktikabel, da die restlichen Klassen sehr übersichtlich bleiben. Allerdings kann an dieser Stelle nicht beurteilt werden, wie einfach das initiale Gerüst anzupassen ist.

Eine Einschränkung fiel im Rahmen dieses kurzen Tests auf. Die Referenzierung einer Enumeration führte bei der Erzeugung des WebControllers zu Problemen, weil die Pluralform des Attributs nicht abgeleitet werden konnte. Stellt sich die Frage, ob das ein allgemeines Problem bei Referenzen ist, oder es an der Enumeration liegt.

Das zeigt allerdings, dass der Release Candidate mit Vorsicht eingesetzt werden sollte. Außerdem gibt es auch noch nicht einmal eine initiale Stable Version von Spring Roo, so dass man wahrscheinlich die ersten Releases abwarten sollte, so dass die üblichen Kinderkrankheiten überwunden werden. Dann könnte Spring Roo eine interessante Basis zur Entwicklung von CRUD-Anwendungen sein.

No comments:

Post a Comment