JAOO: Grails: Spring + Hibernate reinvented. (Graeme Rocher, Skills Matter)
Graeme ist CTO bei Skills Matter, eine Training-Firma in Großbritannien, und leitet den JSR für Groovy.
Grails ist inspriert von verschiedenen Frameworks. Es basiert auf Groovy, Spring, Spring MVC, Hibernate, Quartz, Sitemesh, Embedded Jetty and HSQLDB. Und natürlich basiert es damit auch auf Java. Damit ist es ein Full Stack. Groovy ist dabei sowohl Java-freundlich und hat auch viele Features - andere Sprachen auf der JVM bieten nur entweder das eine oder das andere. Groovy ähnelt Java, Java-Code kann gültiger Groovy-Code sein. Aber wirklich nützlich ist es, wenn man mehr Rücksicht auf Groovy nimmt. Durch die Ähnlichkeit zu Java wird die Migration zu Groovy deutlich einfacher. Und es benutzt die vorhandenen APIs und Frameworks.
Man kann mit Grails ein Anwendungs-Skelett generieren lassen. Es enthält Controller, Domänen-Objekte usw. Die kann man dann in einem integrierten Web-Server starten. Es gibt auch eine passende Konfiguration und man kann recht einfach neue Controller integrieren. Es gibt ein automatisches Data Binding von den Request-Parametern zum Objekt, so dass man die Parameter nur einfach als Argument übergeben muss, was das Data Binding deutlich vereinfacht. Auch kann man die Objekte sehr leicht als JSON oder XML rendern. Ebenfalls kann manmit dynamischen Findern Datensätze suchen lassen.
Seiner Meinung nach ist die Java-Persistenz zu komplex. Und es gibt bei Java zu viele XML-Konfigurationen. Grails löst das bei Persistenz dadurch, dass es ein eigenes Hibernate-Mapping definiert. Es heißt GORM. Dadurch werden Methoden wie save() usw. automatisch implementiert. So hat man die Vorteile von Hibernate und die Transaktionen von Spring. Die Criteria-API von Hibernate wird auch unterstützt. GORM funktioniert mit Groovy- und Java-Objekten.
Auch die Implemeniterung von Tag-Libs wird einfacher - und es gibt einige vorbereitete Tag-Libs. Dabei werden Closures verwendet, was die Programmierung wesentlich einfacher macht.
Ebenfalls gibt es eine eigene DSL, um URLs auf Controller und Actions abzubilden. Dabei kann man beispielsweise Teile der URL automatisch in Parameter umwandeln lassen und verschiedene Controller oder Actions abhängig von der URL anstoßen lassen. So sind REST-mäßige URLs sehr leicht implementierbar.
Ebenfalls gibt es Unterstützung für die Spring Scopes und für Spring Web Flow. Dabei gibt es für Spring Web Flow auch eine eigene DSL. Dadurch gibt es eine Alternative zu der XML-Konfiguration von Spring Web Flow. Zusammen mit der Untestützung für Scopes kann man auch leicht Objekte im Flow speichern.
Es gibt auch eine Menge an Plug-Ins für Erweiterungen, die von einer größeren Anzahl an Committern betreut wird. So gibt es Integration für XFire (SOAP) und Suchen mit Lucene und Compass. Es ist sehr einfach, dadurch Services mit verschiedenen Technologien zur Verfügung zu stellen. Interessant auch, dass eine Spring Security Integration gibt.
Labels: GORM, Graeme Rocher, Grails, Groovy, JAOO2007