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.
- Verwendete Software
- Projekt initialisieren
- Fachklassen mit Hilfe der Roo Shell generieren
- WebController
- Anwendung testen
- Fazit
Verwendete Software
- SpringSource Tool Suite (STS) herunterladen und installieren
- Maven herunterladen und installieren (entpacken + in Klassenpfad aufnehmen)
Projekt initialisieren
- STS starten und Neues Roo Projekt anlegen
Roo Shell Projekt hinzufügen - Nachfrage nach Aktivierung von AspectJ Feature bestätigen
- STS neu starten lassen
- Roo Shell Window öffnen, sofern dies noch nicht geschehen ist und das neue Roo Projekt hinzufügen
Roo Shell |
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 - 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 |
Webanwendung - Ticketliste |
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