Da groovt das Web: Agile Software-Entwicklung - JAXenter
Grails bringt mehr Agilität in die Entwicklung von Web-Anwendungen

Da groovt das Web: Agile Software-Entwicklung

Markus Hansmair

Von der einfachen internen Zeiterfassung über eine Dating-Seite bis hin zu einer großen Produktbewertungs-Anwendung mit Millionen von Hits pro Tag – die Entwicklung von Web-Anwendungen ist auf dem Vormarsch. Denn sie sind – anders als prorietäre Lösungen – einfach über den Browser von überall aus nutzbar. Die Pflege und Wartung erfolgt zentral und das kostspielige Lizenzmanagement entfällt. Wichtig ist, dass der Entwicklungsaufwand gering bleibt und Änderungen sowie Anpassungen schnell vorgenommen werden können.

Die Einführung der Programmiersprache Ruby on Rails (ein auf der Sprache Ruby basierendes Framework für Web-Anwendungen) hat vor 2 Jahren in diesem Umfeld einen regelrechten Hype ausgelöst: Denn Ruby on Rails setzt einen aktuellen IT-Trend paradigmatisch um: „Convention over Configuration“ (CoC) heißt die Grundidee. Dabei wird der Entwickler durch einen Satz von Namenskonventionen von einem Großteil der Konfigurationsarbeit entlastet, die normalerweise anfällt, um in komplexen IT-Systemen die zahlreichen Systemkomponenten miteinander zu verbinden. Mit einem Nachteil bei Ruby on Rails: Die zahlreichen ausgereiften und bewährten Web-Technologien der Java-Welt bleiben außen vor – und damit auch ein riesiger Bestand an Entwickler-Know-how. Die Lösung des Problems: „aus Ruby mach Groovy“.

Groovy on Rails oder Grails bringt den Nutzen von Convention over Configuration im Bereich Web-Anwendungen in die Java-Welt. Grails basiert auf Groovy, einer eng mit Java verwandten Sprache, die für einen Java-Entwickler einfach zu erlernen ist und völlig problemlos mit in Java geschriebenen Komponenten zusammenspielt. Sie folgt ebenso der Grundidee des Convention-over-Configuration-Ansatzes. Grails bringt Schnelligkeit und Flexibilität in die Entwicklung. Die Vorteile dieser Agilen Software-Entwicklung: motivierte Entwickler, anforderungsgerechte Anwendungen, zufriedene Kunden.

Wie das geht und auf welche Probleme Entwickler stoßen können, zeigt der vorliegende Beitrag und das Entwicklungsbeispiel der Consol Software GmbH: Diese hat sich in einem Pilotprojekt selbst eine neue Zeiterfassung mit Grails erstellt. Fachbegriffe, die in diesem Kontext verwendet werden, sind in einem zusätzlichen Kasten erklärt.

Grails pro Agile Softwareentwicklung

Für welche Web-Anwendungen ist Grails besonders geeignet? Grails eignet sich grundsätzlich für jede Art von Web-Anwendung. Wer die Fallbeispiele auf der Projekt-Webseite grails.org liest, wird feststellen, dass hier alles zu finden ist.

Ein Beispiel aus der Praxis ist das interne Zeiterfassungssystem der Consol Software GmbH. Das Unternehmen hatte das Ziel, die verschiedenen Insellösungen der einzelnen Standorte durch eine firmenweit einheitliche Anwendung zu ersetzen. Die Entwickler von Consol entschieden sich für Grails, da sie sich davon eine hohe Effektivität und damit geringere Entwicklungskosten versprachen. Hauptmotivation war die Vereinheitlichung der erfassten Daten und damit ein erleichtertes und zuverlässigeres Reporting für Verwaltung, Buchhaltung, Controlling und Projekt-Management. Zudem hatte das Projekt auch einen gewissen Pilotcharakter, mit dem die IT-Mitarbeiter die Möglichkeiten von Grails ausloten und entsprechendes Know-how aufbauen wollten.

Technischer Hintergrund

Entscheidet sich ein Team für Grails, wird es schnell erste Ergebnisse vorzeigen können. Denn Grails baut auf mehrere bewährte Technologien aus der Java-Welt auf: Im Unternehmen vorhandene Expertise in diesen Bereichen kann also in einem Grails-Projekt genutzt werden.

Die Implementierung in Grails erfolgt in Groovy. Diese Sprache ist eng mit Java verwandt und stellt praktisch eine Obermenge der Möglichkeiten von Java dar. Die Kompilate bestehen aus normalem JVM-Bytecode, was eine problemlose Koexistenz von Java-Code und Groovy-Code ermöglicht. Groovy bietet eine Vielzahl praktischer Erweiterungen: Listen- und Map-Literale, zusätzliche Operatoren, Operator-Overloading, optional statische oder dynamische Typisierung u.v.m. Drei Konzepte stechen jedoch heraus, mit denen sich das Potenzial von Groovy deutlich über das von Java erhebt:

  • GDK – das Groovy Development Kit: Es ergänzt das JDK um viele sinnvolle Methoden, beispielsweise Methoden auf Collections für die bekannten Mengenoperationen Vereinigung (plus), Schnittmenge (intersect), Differenz (minus). Oder Methoden wie findAll oder collect, die eine elegante Alternative zu vielen Iterationen darstellen (siehe Code-Beispiele).
  • Closures: Closures sind eine Art Methode und gleichzeitig ein Objekt und erlauben auch Zugriff auf den Kontext, in dem die Closure instantiiert wurde.
  • Meta-Klassen: Sie erlauben einen Eingriff in jeden Methoden-Aufruf und jeden Property-Zugriff, egal ob diese Methoden oder Properties tatsächlich existieren oder nicht. Damit lassen sich dynamische Methoden und Properties realisieren. Grails macht davon massiv Gebrauch.

Grails basiert hauptsächlich auf den bewährten Java-Technologien Spring, Hibernate und Sitemesh, wobei es durchaus möglich ist, mit keiner dieser Technologien direkt in Kontakt zu kommen. Keine XML-Datei muss editiert werden, hieße sie application.xml, hbm.xml oder decorators.xml. Alles wird über Namenskonventionen im Sinne des CoC erledigt. Die Konfiguration von Hibernate bezieht ihre Daten außerdem aus zusätzlichen Informationen, die direkt in die Klassen der Domänen-Objekte integriert werden.

Als View-Technologie kommt eine Variante der Java Server Pages namens Groovy Server Pages (GSP) zum Einsatz. Custom Tags dafür lassen sich ganz einfach durch Einhaltung von Namens¬konventionen definieren (s.u.). Damit kann beispielsweise wiederkehrender GSP-Code an eine Stelle ausgelagert werden oder spezielle Logik für die bedingte Einbindung von GSP-Code elegant formuliert werden.

Ein paar Beispiele für ‚Convention over Configuration‘:

  • Alle Klassen im Verzeichnis grails-app/domain beschreiben Objekte des zu behandelnden Geschäftsbereichs. Sie werden automatisch mittels Hibernate in der Datenbank persistiert. Klassennamen in Camel-Case-Schreibweise (z. B. ProjectManager) werden in Tabellennamen mit Unterstrichen (project_manager) übersetzt, Properties der Klassen (z.B. validFrom) werden in entsprechenden Spalten (valid_from) gespeichert.
  • Alle Klassen im Verzeichnis grails-app/controller müssen im Namen auf Controller enden. Der vordere Teil des Klassennamens entspricht typischerweise den Namen einer Domain-Klasse (z.B. ProjectManagerController). Ein Controller enthält sogenannte Actions in Form von Closures, die die Daten eines Requests an eine bestimmte URL verarbeiten. Aus dem Namen des Controllers und dem Namen der Action (z.B. list) ergibt sich automatisch die URL (http://hostname/appcontext/projectManager/list), deren Aufruf zur Ausführung der Action führt.
  • Das von einer Action zurückgelieferte Ergebnis dient als Input für eine GSP-Datei, deren Namen sich wiederum aus dem Namen des Controllers und der Action ergibt (grails app/view/projectManager/list.gsp).
  • Custom Tags werden durch Groovy-Dateien implementiert, die im Verzeichnis grails-app/taglib liegen und auf TagLib.groovy enden. Innerhalb dieser Klassen werden Closures definiert, deren Namen den Namen des Tags festlegen (z.B. def mytag = { . } kann im GSP-Code mittels <g:mytag .> . </g:mytag> aufgerufen werden).

Die mit Grails entwickelten Web-Anwendungen sind JEE-konform, wodurch ein Einsatz in Servlet-Containern wie Tomcat möglich ist. D.h. mit Grails-Anwendungen kann das gleiche Maß an Performance und Skalierbarkeit erreicht werden wie mit traditionelleren Web-Technologien aus dem Java-Umfeld.

Geschrieben von
Markus Hansmair
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.