Feb 03

Mein favorisiertes Web-Framework Grails hat die Major Version 2 erreicht. Bei der Fülle an neuen Funktionen ist die 2 vor dem Punkt mehr als gerechtfertigt. Einen guten Überblick, über das was sich geändert hat, bietet der Artikel “Das ist neu in Grails 2.0” von Dierk König.

Für mich war schon die neue interaktive Grails Console mit TAB- Vervollständigung, farbiger, einzeiliger Ausgabe und formatierten Fehlerausgaben das Upgrade wert. Sie ist vor allem bei der Befehlsausführung sehr viel schneller, da dafür keine eigene JVM gestartet werden muss.
Als Testkandidat musste meine Beispiel Grails Anwendung grum (sourcecode auf Google Code) herhalten. Doch so einfach wie ein upgrade von einer Minor Version auf eine andere war es nicht.

Als erstes sollte man die upgrade Hinweise verinnerlichen, denn ein einfaches grails upgrade führte bei mir erst einmal zu einem inkonsistentem Projekt in meiner Entwicklungsumgebung (SpringSource Tool Suite).

Schuld ist man meistens selbst. Doch wo liegen nun die Fallstricke?

Dependency Management

Ein Thema, was ich bis jetzt vollständig ignoriert hatte, war das Dependency Management. In den vorherigen Grails Versionen lagen alle benötigten Bibliotheken (wie der JDBC Treiber) im lib Verzeichnis. Sauberer ist es natürlich die Abhängigkeiten zu deklarieren. Bei Grails macht man dies in der BuildConfig Klasse.

conf/BuildConfig.groovy

dependencies {
   // specify dependencies here under either 
   //'build', 'compile', 'runtime', 'test' or 'provided' scopes eg.
 
   runtime 'mysql:mysql-connector-java:5.1.16'
   build "displaytag:displaytag:1.2"
   runtime "displaytag:displaytag-export-poi:1.2"
   runtime "displaytag:itext:1.3"
   runtime "displaytag:poi:3.2"
}

Danach sollte man in der IDE die Abhängigkeiten über Grails Tools -> Refresh Dependencies aktualisieren. Reicht dies nicht aus (wie bei mir) hilft es das Dependency Management zu stoppen und zu starten.

  • Grails Tools -> Disable Dependency Management
  • Grails Tools -> Enable Dependency Management

Alternativ kann man in der Grails Konsole folgende Befehle absetzen:

grails> clean
grails> war

Plugins

Dabei kam es bei mir zu Kompilierungs Problemen im Zusammenhang mit den automatisch installierten Plugins jquery und resources, was ich nur durch eine Neuinstallation der Plugins beheben konnte

grails> uninstall-plugin <plugin-name>
grails> install-plugin <plugin-name>

TagLibs

Und wo man schon mal beim Aufräumen ist. Das Tag createLinkTo ist depracted und sollte durch das Tag resources ersetzt werden. An dieser Stelle sollte man auch auf folgenden upgrade Hinweis achten:

If you install Resources (or it is installed automatically), tags like <g:javascript> won’t write anything to the page until you add the <r:layoutResources/> tags to your layout.

Content Negotiation

Ein Punkt warum ich Grails so mag ist, das sich damit sehr leicht REST APIs umsetzen lassen. Hier hat sich in der Version 2.0 auch etwas geändert. Die Content Negotiation richtet sich jetzt nicht mehr nach dem akzeptierten Format des Responses, sondern nach dem Content-Type des Requests.
Dafür muss man im Code withFormat durch request.withFormat ersetzen. Testen kann man diese Änderung mit curl. Z.B. mit:

curl --header Content-Type:text/xml http://localhost:8080/grum/contactData/list

Fazit:
Das Upgrade lohnt sich, auch wenn es mit etwas mehr Arbeit verbunden ist, als sonst.

Links:
grum – Grails 2.0 Beispiel Applikation

geschrieben von gklinkmann \\ tags: ,

May 25

Die diesjährige Jax (Fachkonferenz für Java) ist seit gut 2 Wochen vorbei. Ein Teil der Vorträge wurde auf Video aufgezeichnet und wird jetzt nach und nach unter JAX TV Channel auf Vimeo bereitgestellt.

Wie immer waren sehr interessante Vorträge aus allen Themenbereichen darunter. Für jeden Java Geschmack sollte also etwas dabei sein.

geschrieben von gklinkmann \\ tags: , , ,

Mar 18

Video – Tutorials sind neben einem Fachbuch ein guter Einstieg in ein Thema. Von Springsource gibt es zum Thema Grails zwei sehenswerte Tutorials auf youtube.
Wenn Ihr Euch für das Webframework Grails interessiert, solltet Ihr Euch eine halbe Stunde für diese zwei gut gemachten Videoanleitungen nehmen.

via:
Neues Video-Tutorial zu Grails – it-republik.de

geschrieben von gklinkmann \\ tags: , , ,

Mar 14

Ich habe in der letzten Zeit das Thema Grails in diesen Blog etwas vernachlässigt. So ist es nun nach dieser Durststrecke an der Zeit, wieder einen Blog Eintrag zu diesem Thema zu schreiben (weitere könnten folgen).
Einer meiner ersten Artikel zu Grails zeigte, wie man Grails und Eclipse zueinander bringt. Dieser Eintrag war so erfolgreich, dass ich ihn auch als feste Seite im Rahmen eines kleinen Tutorials in den Blog integriert habe.

Dies ist ein paar Monate her und die Unterstützung der Erstellung von Grails Anwendungen durch Eclipse ist stetig besser geworden.
War es zum Anfang so, dass die mit Abstand beste IDE für Grails IDEA war, so holt das freie Eclipse immer mehr auf. Spätestens mit dem Wechsel der Grails Entwickler zu Springsource und der damit verbundenen Einbettung in die Eclipse basierte Springsource Tool Suite (STS) hat sich eine Menge getan.

Mal abgesehen von dem Hauptspeicher – Hunger von STS fühle ich mich als alter Eclipse Nutzer gut aufgehoben. Mit Netbeans und IDEA konnte ich mich nie so richtig anfreunden.

Um den Grails Support zu aktivieren müssen die Grails und Groovy Extensions über den Reiter Extensions des STS Dashboards installiert werden (s. Screenshot). Danach gibt es für Grails Projekte eine eigene Perspektive mit Syntax Highlighting, Code Vervollständigung und einer übersichtlichen Navigation im Project Explorer.
In der Toolbar gibt es in der Grails Perspektive einen Button zur Ausführung von Grails Befehlen (wie z.B. run-app).

Bei der Installation der Grails Extensions wird im Installationsverzeichnis des STS die aktuelle Grails Version abgelegt.

~ > ls springsource/
   grails-1.3.5
   grails-1.3.6				
   grails-1.3.7
   maven-2.2.1.RELEASE				
   roo-1.1.0.RELEASE			
   tc-server-developer-2.0.4.RELEASE
   sts-2.5.0.RELEASE

Gibt es bei den Updates (Help -> check for Updates) eine neue Grails Version wird diese dort hinzugefügt. In den Preferences (Groovy -> Grails) muss man dann die neue Version für den Workspace übernehmen. Im Grails Projekt ist dann noch der upgrade Befehl notwendig.

Fazit:
Die Grails Integration in Eclipse hat einen großen Schritt nach vorn getan. Vom Funktionsumfang dürfte IDEA immer noch führen. Grails Projekte werden dort allerdings nur in der kostenpflichtigen ULTIMATE Variante unterstützt.
Die kostenfreien Entwicklungsumgebungen Netbeans und die Eclipse basierte STS unterscheiden sich kaum in der Grails Unterstützung. Hier entscheidet die persönliche Vorliebe über die IDE.

Links:
Diskussion zu diesem Thema auf stackoverflow.com

geschrieben von gklinkmann \\ tags: , , , ,

Mar 22

Ich habe ein paar Stunden dafür verwendet mein auf Google Code gehostetes Projekt grum auf den Stand der Dinge zu bringen (es wurde ja auch langsam Zeit). Grum ist eine kleine Grails Anwendung zur Benutzerverwaltung, die es mir ermöglicht mit dem Web Framework Grails “zu spielen”.

Ich habe bei der Umsetzung bewusst auf die vielen Grails Plugins verzichtet, um so wenig Seiteneffekte wie möglich zu haben und es auch für diejenigen einfach zu halten, die einen Einstieg in Grails suchen. So sind in Grum Lösungen enthalten, wie man z.B.:

  • den Zugriff auf eine Mysql Datenbank realisiert
  • 1:1, 1:n und n:m GORM Beziehungen modelliert
  • eigene Tag Libs schreibt
  • die JSP Tag Lib displaytag verwendet, um die Daten seitenweise anzuzeigen, zu gruppieren, zu sortieren und in alle möglichen Formate (excel, csv, xml, pdf) zu exportieren
  • den Upload von Dateien ermöglicht
  • funktionale Tests mit dem webtest Plugin verwendet
  • und die Auslieferung von XML aufgrund von besonderen URL’s (kurz Content Negotiation) umsetzt

Die neue Version 0.3 verwendet jetzt grails 1.2.1 und das Plugin webtest in der Version 2.0.3. Die Sourcen, die SQL Dateien zur Erstellung der Mysql Datenbank und ein Webarchiv mit allen notwendigen Bibliotheken stehen auf Google Code zum Download bereit.

Nutztungshinweise:
Der Code kann frei verwendet werden, kann aber Fehler enthalten, für die ich keine Haftung übernehme. Die Lizenzbedingungen der verwendeten Bibliotheken sind einzuhalten.

geschrieben von gklinkmann \\ tags: , , , ,