Ab der Version 1.1 basiert Grails auf Groovy 1.6, das seit 18. Februar verfügbar ist. Damit werden Grails-Applikationen nochmals schneller und können von Neuerungen wie AST-Transformationen profitieren, um zum Beispiel eine Klasse einfach als @Immutable zu deklarieren.
Gorm
Oft gewünscht und nun realisiert ist die Möglichkeit, die sehr attraktive Persistenzlösung von Grails (GORM) auch außerhalb von Webapplikationen benutzen zu können. Dazu muss man lediglich einen Eintrag in der Spring-Konfiguration vornehmen und die persistenten Klassen mit @Entity annotieren. Bei der Nutzung von GORM im Grails-Kontext ist keine Konfiguration notwendig.
Das Java Magazin Tutorial
Im aktuellen Java Magazin finden Sie den ersten Teil des Tutorials von Marc-Oliver Scheele: "Blogentwicklung mit Grails - in 30 Minuten"
GORM bietet außerdem einen erweiterten Event-Mechanismus, mit dem vor oder nach jedem insert, update oder delete notifiziert wird. Es gibt einen vereinfachten Umgang für Collections von Basistypen wie Integer und String, aber auch Aufzählungstypen (enum). Als sehr nützlich erweisen sich auch die neuen Deklarationen für die Standardsortierung und blockweises Laden (batchSize).
Der Zugriff auf persistente Objekte unterstützt jetzt auch den gesichert reinen Lesezugriff (read), mit dem man "versehentliches" Speichern von veränderten Objekten durch Hibernate ausschließt, die explizite Nutzung des Query Caches und Lesen mit Schreibsperre (lock). Wer jemals Suchanfragen wie "x==1||x==2||x==3" benutzt hat, freut sich über die neue Listenunterstützung in den dynamischen Suchmethoden "findByXInList [1,2,3]".
Plug-ins
Das Plug-in-System ist ein Mehrwert von Grails, der deutlich macht, was eine Plattform im Vergleich zu einem Framework zusätzlich bietet. Bisher waren Plug-ins in jedem Applikationsverzeichnis installiert, was bei großen Plug-ins wie Canoo WebTest ungeschickt war. Neu werden sie im "user.home" gespeichert. Wer das alte Verhalten beibehalten möchte, kann die System Property "grails.project.plugins.dir" auf den Wert "./Plug-ins" setzen.
In der Applikation wird lediglich eine Referenz auf die verwendeten Plug-ins gespeichert (in den application.properties), den Rest erledigt Grails, inklusive transitiver Abhängigkeitsauflösung à la Maven/Ivy. Man kann einstellen, welche Repositories benutzt werden, wie paketiert werden soll und dass man zum Beispiel das code-coverage Plug-in bitteschön nicht in der Produktionsumgebung haben möchte.
Wer seine Grails-Applikation modular aus Plug-ins aufbaut, kann nun leicht eine Integrationsapplikation definieren, die lediglich auf alle beteiligten Module im Dateisystem verweist.
Während der Entwicklung von Grails 1.1 sind viele neue Plug-ins hinzugekommen, die sich anzusehen lohnt. Es ist aber zu erwarten, dass es noch etwas Zeit braucht, bis alle auf den Grails-1.1-Stand aktualisiert sind.
Testing
Für Grails 1.0 gab es ein eigenes Testing-Plug-in, das jetzt zum Lieferumfang von Grails gehört. Es erweitert die Testunterstützung von Groovy um Grails-Spezifika wie das Mocking von Grails-Artefakten (Controller, Domain Classes, Tag Libraries, Url Mappings), um Tests schneller schreiben zu können, vor allem aber um sie isoliert und schneller ausführen zu können.
Aber nicht nur die Unit-Tests werden schneller, sondern auch die Integrationstests, für die ein Start der gesamten Grails-Umgebung notwendig ist. Der Trick ist, die Umgebung nur einmal zu starten und zwar im interaktiven Modus ("grails interactive") und dann beliebig häufig Integrationstests auszuführen ("test-app MyClass").
Applikation
Für die Implementierung der Applikation gibt es Verfeinerungen beim Data Binding und der Controller-Logik zum Erkennen und Vermeiden von doppelten Anfragen ("double-click protection"), vereinfachten REST Mappings, Server-Side Forwards und selektivem Exception Handling.
In die Templates, die für das Scaffolding benutzt werden, kann man nun selbst eingreifen, was besonders für das dynamische Scaffolding sehr wertvoll ist. Dazu verwendet man das Kommando "grails install-templates". Neu unterstützt das Scaffolding auch Many-to-Many-Relationen.
Generell werden die Groovy Server Pages (GSPs) nun mehr als doppelt so schnell angezeigt. Sie erlauben außerdem die Verwendung beliebiger JSP Tag Libraries und referenzieren die Grails-"Templates" jetzt mit dem Namespace "tmpl". Wer sich noch an die Server Side Includes erinnert, die ein Vorläufer von JSP waren, findet sie in Grails 1.1 im "include"-Tag wieder.
Infrastruktur
Grails erstellt ein Ant build.xml, mit dem man die Applikation auch bauen kann, selbst wenn kein Grails – aber doch zumindest Ant – installiert ist. Das ist häufig auf Build-Servern wie Cruise-Control oder Hudson der Fall. Als Bonbon für die Maven-Fans gibt es "mvn grails:create-pom", um eine Grails-Applikation in eine Maven-Umgebung zu integrieren.
Neben vielen weiteren kleinen Verbesserung ist auch ein echtes Defizit behoben: Passwörter für die DataSource sind nicht mehr im Klartext gespeichert, sondern verschlüsselt.
Der Übergang von Grails 1.0.x auf 1.1 sollte mit wenig Aufwand machbar sein. Am ehesten gilt das Augenmerk den Plug-ins, die noch nicht aktualisiert sind. Ansonsten gilt: aktuellen Zustand im Versionierungssystem speichern, Umgebung auf Grails 1.1 umstellen und "grails upgrade" aufrufen.
Weitere Informationen finden sich unter der Linksammlung. Bemerkenswert ist noch, dass es zur Grails-Version 1.1 nicht nur die Online-Dokumentation gibt, sondern sogar zwei aktuelle Bücher. Die zweite Auflage des "Definitive Guide to Grails" (Rocher, Brown / Apress) deckt die Version bereits ab. Außerdem ist "Grails in Action" (Smith, Ledbrook / Manning) kurz vor der Fertigstellung und als Early Access zugänglich.















