Über

Seit nun fast 10 Jahren beschäftige ich mich mit der Java-Web-Entwicklung. Damals noch ohne den Einsatz von Frameworks, dann mit Spring MVC, JSF, Struts, ZK, Wicket und schließlich mit Grails™. Beruflich habe ich viele von den genannten Frameworks im Einsatz erlebt, Grails hatte ich bisher aber nur privat “angetestet”.

Vor ca. 6 Monaten (Stand: 28.03.2012) fing ich an, mich intensiv mit Grails zu beschäftigen, da ich es für die Entwicklung eines großen Projektes vorschlug. Auf Grund meiner Erfahrung (und der damit verbundenen Frustrationen) mit anderen Frameworks, wollte ich Grails mal produktiv einsetzen. Grails bot alles, was wir für das Projekt brauchten:

  • modulare Entwicklung (sehr wichtig)
  • leichtgewichtige Entwicklung
  • basierend auf bekannten Frameworks, die wir eh einsetzen (bis auf groovy, das war neu)
  • große Community, die die Entwicklung stetig weiter vorantreibt, sowie Fragen beantwortet
  • Vorgabe / Förderung von erfolgreichen Pattern, wie convention over configuration, test-driven development und MVC.
  • gute Dokumentation
  • einfach zu lernen

Ich war von den Möglichkeiten begeistert. Ich wusste, dass es mit Grails einfach ist, eine dynamische Webseite zu entwickeln, wobei die Entwicklung stark an Rails angelehnt ist. Natürlich musste die Zeit zeigen, ob Grails auch für größere Projekte geeignet ist, über die nicht nur ein paar Daten angezeigt und geändert werden sollen.

Das Projekt, für das ich mich so intensiv mit Grails beschäftigt hatte, ist kein Kleines. Ob der Begriff “Enterprise” angebracht ist, möchte ich an dieser Stelle dahingestellt lassen, denn dieser Begriff ist ziemlich schwammig und fast jeden Produkt wird so angepriesen. Das Produkt wird so ausgelegt, dass es von mehreren tausend Leute zu benutzen ist.

Während der Entwicklung, wie das immer so ist, gab es viele Sonderfälle, die über die einfache Entwicklung einer Webseite hinausgehen. Dabei stießen wir auch auf Dinge, die sich mit Grails nicht so umsetzen ließen, wie wir das gerne gemacht hätten. Bspw. wird von Grails nicht das von hibernate angebotene Vererbungs-Mapping table per concrete class unterstützt, sondern nur table per class und table per subclass. Dies ist nur ein Beispiel von mehreren. Einige Probleme ließen sich umgehen, wurden bereits gefixt oder werden in einer der nächsten Version gefixt.

Von den Problemen und deren Lösungen möchte ich u.a. in diesem Blog berichten, um nicht nur die Verbreitung von Grails weiter voranzutreiben, sondern auch anderen Entwicklern eine mögliche Lösung präsentieren, die, so hoffe ich, hilfreich ist. Vielleicht gibt es auch bessere, elegantere Lösungen der Probleme, von denen ich in den Kommentaren gerne hören würde.

- dp