Artikel

 
Januar 2010 | Artikel

Groovy 1.7 Fortsetzung, Teil 2

Teil 1   Teil 2   

Groovy Truth

Mit der Implementierung der Methode : "boolean asBoolean() { }" hat der Entwickler nun selbst Einfluss darauf, wie der berühmte groovy truth interpretiert wird. Bis zu Version 1.7 wurden einfach Annahmen über diesen Umstand getroffen. Ein if(string) evaluierte z.B. zu false, wenn string=null war.

SQL Batch Updates

Es gibt eine neue withBatch()-Methode, die das Ausführen von SQL Statements als Batch erlaubt:

  1. sql.withBatch { stmt ->
  2. ["1.5", "1.6", "1.7"].each { version ->
  3. stmt.addBatch "insert into JAVA (version) values ($version)"
  4. }
  5. }
Transactions

Ebenso neu ist die Unterstützung für Transaktionen mit der Methode withTransactions:

  1. def javaVersions = sql.dataSet("JAVA")
  2. sql.withTransaction {
  3. javaVersions.add version: "1.5"
  4. javaVersions.add version: "1.6"
  5. javaVersions.add version: "1.7"
  6. }
Power Asserts

Der Output von Groovys assert war bis zur Version 1.7 nicht sehr aussagekräftig. In der neuen Version erhält man nicht nur Informationen über die verwendeten Variablen, sondern auch darüber, wie Sub-Expressions evaluiert worden sind, das Ganze auch visuell aufbereitet. Dies vereinfacht die Fehlersuche ungemein.

  1. Caught: Assertion failed:
  2. assert new File('foo.bar') == new File('example.txt')
  3. | | |
  4. foo.bar | example.txt
  5. false
Annotationen

In Java ist es bislang nicht möglich, Annotationen z.B. für Imports oder Packages anzugeben. Groovy 1.7 erlaubt diese Art von Annotationen, z.B. für die Angabe von Abhängigkeiten, siehe folgende Absätze.

Grape

Mithilfe von Grape kann man sich die Arbeit mit Abhängigkeiten zu externen Jar-Bibliotheken vereinfachen. Hierzu reicht eine Annotation @Grape, welches sich die spezifizierte Abhängigkeit aus einer Repository (z.B. Maven) selbständig herunterlädt und dem Classpath hinzufügt. Bis zu Groovy 1.7 war es nicht möglich, diese Annotation an der dafür logischen Stelle, nämlich bei den Importanweisungen, zu platzieren. Nun kann man z.B. schreiben:

  1. @Grab(group='net.sf.json-lib', module='json-lib', version='2.3', classifier='jdk15')
  2. import net.sf.json.groovy.*

Die @Grab-Annotation kann auch vor einer Variablendeklaration mit etwas vereinfachter Syntax benutzt werden:

  1. @Grab('net.sf.json-lib:json-lib:2.3:jdk15')
  2. def builder = new net.sf.json.groovy.JsonGroovyBuilder()

Um das Repository für Grape anzugeben, kann man die GrabResolver-Annotation benutzen:

  1. @GrabResolver(name='restlet.org', root='http://maven.restlet.org')
  2. @Grab(group='org.restlet', module='org.restlet', version='1.1.6')
  3. import org.restlet.Restlet
Was vergessen?

Die neue GroovyScriptEngine wurde komplett überarbeitet und neu geschrieben. Als Resultat ist sie wesentlich schneller geworden und kann besser mit Abhängigkeiten umgehen. Diese werden nun wesentlich effizienter berechnet, sodass StackOverflowExceptions der Vergangenheit angehören dürften.

Der Output der Groovy Console kann nun in einem separaten Fenster angezeigt werden anstatt im selben Fenster. Dafür startet man seine Skripte mit CTRL-R oder CMD-R.

Einige Abhängigkeiten wurden auf neuere Versionen "gehoben", z.B. ASM und Ivy.

Fazit

Groovy bietet enorme Erleichterung bei der Arbeit mit Java. Diskussionen über Vor- und Nachteile des Static Typing vs. Dynamic Typing mal außer Acht gelassen, kann der selektive Einsatz von dynamischen Skriptsprachen sehr sinnvoll sein und die Produktivität erhöhen. Mit der Version 1.7 und dem kompletten Rewrite der Script Engine wurde eine weitere Schwachstelle beseitigt. Bei Groovy 1.8 wird die Modularisierung und Reorganisation der Sourcen im Vordergrund stehen.

Diplom-Informatiker Masiar Ighani ist freiberuflicher J2EE Software Engineer/Architect und Autor. Er hat 15 Jahre Projekterfahrung in diesen Bereichen und ist spezialisiert auf ECM und SOA. Seit einem Jahr beschäftigt er sich auch leidenschaftlich mit agilen Projekten wie Groovy&Grails.
  1. http://groovy.codehaus.org
  2. Grails 1.2 ist final

Teil 1   Teil 2   

Anzeige

Kommentare


Anzeige

zurück zum Seitenanfang