SlideShare a Scribd company logo
1 of 250
Download to read offline
von und mit Thorsten Kamann




                         Copyright 2006 Thorsten Kamann
Einleitung
Getting Started
Embedding
Die Syntax
Groovy Highlights
     XML-Processing, Markup, GPath, Groovy Beans, RegEX...
Module
     Grails, Gorm, Scriptom...
Testing
IDE-Support
Zusammenfassung/Links

                                             Copyright 2006 Thorsten Kamann
Einle itung

              Copyright 2006 Thorsten Kamann
Was ist Scripting?
Skriptsprachen sind Programmiersprachen, die vor allem für
 kleine, überschaubare Programmieraufgaben gedacht sind




                                              Copyright 2006 Thorsten Kamann
Was ist Scripting?
Skriptsprachen sind Programmiersprachen, die vor allem für
 kleine, überschaubare Programmieraufgaben gedacht sind
Kein Deklarationszwang für Variablen




                                              Copyright 2006 Thorsten Kamann
Was ist Scripting?
Skriptsprachen sind Programmiersprachen, die vor allem für
 kleine, überschaubare Programmieraufgaben gedacht sind
Kein Deklarationszwang für Variablen
automatische Speicherverwaltung




                                              Copyright 2006 Thorsten Kamann
Was ist Scripting?
Skriptsprachen sind Programmiersprachen, die vor allem für
 kleine, überschaubare Programmieraufgaben gedacht sind
Kein Deklarationszwang für Variablen
automatische Speicherverwaltung
werden in der Regel ohne getrennte Übersetzungsphase
 ausgeführt (d. h. sie werden „interpretiert“)




                                              Copyright 2006 Thorsten Kamann
Was ist Groovy?
Eine dynamische Sprache




                           Copyright 2006 Thorsten Kamann
Was ist Groovy?
Eine dynamische Sprache
Inspiriert von Ruby, Python, Smalltalk




                                          Copyright 2006 Thorsten Kamann
Was ist Groovy?
Eine dynamische Sprache
Inspiriert von Ruby, Python, Smalltalk
Entwickelt für die Java-Plattform




                                          Copyright 2006 Thorsten Kamann
Was ist Groovy?
Eine dynamische Sprache
Inspiriert von Ruby, Python, Smalltalk
Entwickelt für die Java-Plattform
   Um sie Java-Entwicklern zugänglich zu machen




                                            Copyright 2006 Thorsten Kamann
Was ist Groovy?
Eine dynamische Sprache
Inspiriert von Ruby, Python, Smalltalk
Entwickelt für die Java-Plattform
   Um sie Java-Entwicklern zugänglich zu machen
   Um möglichst viel der Java-Syntax wieder verwenden zu
    können




                                            Copyright 2006 Thorsten Kamann
Was ist Groovy?
Eine dynamische Sprache
Inspiriert von Ruby, Python, Smalltalk
Entwickelt für die Java-Plattform
   Um sie Java-Entwicklern zugänglich zu machen
   Um möglichst viel der Java-Syntax wieder verwenden zu
    können
   Um eine einfache Anbindung zu Enterprise-Systemen
    anzubieten



                                            Copyright 2006 Thorsten Kamann
Was ist Groovy?
Eine dynamische Sprache
Inspiriert von Ruby, Python, Smalltalk
Entwickelt für die Java-Plattform
   Um sie Java-Entwicklern zugänglich zu machen
   Um möglichst viel der Java-Syntax wieder verwenden zu
    können
   Um eine einfache Anbindung zu Enterprise-Systemen
    anzubieten
Das Ergebnis des JSR 241: The Groovy Programming Language

                                             Copyright 2006 Thorsten Kamann
Ge tting
S ta rte d

             Copyright 2006 Thorsten Kamann
Getting Started
Download des aktuellen Release von
 http://groovy.codehaus.org




                                      Copyright 2006 Thorsten Kamann
Getting Started
Download des aktuellen Release von
 http://groovy.codehaus.org
Entpacken des Archivs




                                      Copyright 2006 Thorsten Kamann
Getting Started
Download des aktuellen Release von
 http://groovy.codehaus.org
Entpacken des Archivs
Setzen der Umgebungsvariable GROOVY_HOME




                                            Copyright 2006 Thorsten Kamann
Getting Started
Download des aktuellen Release von
 http://groovy.codehaus.org
Entpacken des Archivs
Setzen der Umgebungsvariable GROOVY_HOME
Hinzufügen von %GROOVY_HOME%bin zur PATH-Variable




                                         Copyright 2006 Thorsten Kamann
Getting Started
Download des aktuellen Release von
 http://groovy.codehaus.org
Entpacken des Archivs
Setzen der Umgebungsvariable GROOVY_HOME
Hinzufügen von %GROOVY_HOME%bin zur PATH-Variable
Starten von groovyConsole und Eingabe von
                  println „Hallo Welt“
 mit anschliessendem STRG-R



                                             Copyright 2006 Thorsten Kamann
Getting Started




                  Copyright 2006 Thorsten Kamann
Embe dding

         Copyright 2006 Thorsten Kamann
Embedding
Groovy kann auf 4 verschiedene Arten in Java-Anwendungen
 eingebunden werden




                                            Copyright 2006 Thorsten Kamann
Embedding
Groovy kann auf 4 verschiedene Arten in Java-Anwendungen
 eingebunden werden




                                            Copyright 2006 Thorsten Kamann
Embedding
Groovy kann auf 4 verschiedene Arten in Java-Anwendungen
 eingebunden werden




                                            Copyright 2006 Thorsten Kamann
Embedding
Groovy kann auf 4 verschiedene Arten in Java-Anwendungen
 eingebunden werden




                                            Copyright 2006 Thorsten Kamann
Embedding
Groovy kann auf 4 verschiedene Arten in Java-Anwendungen
 eingebunden werden




                                            Copyright 2006 Thorsten Kamann
Embedding mit dem BSF
Ist ein allgemeine Möglichkeit, jede beliebige Scriptsprache
 in Java-Anwendungen einzubinden




                                               Copyright 2006 Thorsten Kamann
Embedding mit dem BSF
Ist ein allgemeine Möglichkeit, jede beliebige Scriptsprache
 in Java-Anwendungen einzubinden
Groovy bietet aber leichtgewichtigere und leistungsfähigere
 Möglichkeiten der Einbindung




                                               Copyright 2006 Thorsten Kamann
Embedding mit GroovyShell
GroovyShell bietet die Möglichkeit des Ein- und Auslesens
 von Variablen mittels des Binding-Objekts




                                               Copyright 2006 Thorsten Kamann
Embedding mit GroovyShell
GroovyShell bietet die Möglichkeit des Ein- und Auslesens
 von Variablen mittels des Binding-Objekts

 Binding binding = new Binding();
 binding.setVariable(quot;fooquot;, new Integer(2));
 GroovyShell shell = new GroovyShell(binding);

 Object value = shell.evaluate(
   quot;println 'Hello World!'; x = 123; return foo * 10quot;);
 assert value.equals(new Integer(20));
 assert binding.getVariable(quot;xquot;).equals(new Integer(123));




                                                 Copyright 2006 Thorsten Kamann
Embedding mit GroovyClassLoader
Der GroovyClassLoader lädt Groovy-Klassen dynamisch und
 ermöglicht den direkten Zugriff auf deren Methoden




                                            Copyright 2006 Thorsten Kamann
Embedding mit GroovyClassLoader
Der GroovyClassLoader lädt Groovy-Klassen dynamisch und
 ermöglicht den direkten Zugriff auf deren Methoden

 ClassLoader parent = getClass().getClassLoader();
 GroovyClassLoader loader = new
        GroovyClassLoader(parent);
 Class groovyClass = loader.parseClass(
     new File(quot;script.groovyquot;));
 GroovyObject groovyObject =
     (GroovyObject) groovyClass.newInstance();
 Object[] args = {};
 groovyObject.invokeMethod(quot;runquot;, args);




                                               Copyright 2006 Thorsten Kamann
Embedding mit GroovyClassLoader
Der GroovyClassLoader lädt Groovy-Klassen dynamisch und
 ermöglicht den direkten Zugriff auf deren Methoden

 GroovyClassLoader gcl = new GroovyClassLoader();
 Class clazz = gcl.parseClass(
     myStringwithGroovyClassSource, quot;SomeName.groovyquot;);
 Object aScript = clazz.newInstance();
 MyInterface myObject = (MyInterface) aScript;
 myObject.interfaceMethod();




                                               Copyright 2006 Thorsten Kamann
Embedding mit GroovyScriptEngine
Dies ist die leistungsfähige Möglichkeit um Groovy-Skripte
 auszuführen. Das Binding-Objekt befüllt dabei die Skripte
 mit Daten




                                               Copyright 2006 Thorsten Kamann
Embedding mit GroovyScriptEngine
Dies ist die leistungsfähige Möglichkeit um Groovy-Skripte
 auszuführen. Das Binding-Objekt befüllt dabei die Skripte
 mit Daten

 String[] roots = new String[] {quot;/my/groovy/script/pathquot;};
 GroovyScriptEngine gse = new GroovyScriptEngine(roots);
 Binding binding = new Binding();
 binding.setVariable(quot;inputquot;, quot;worldquot;);
 gse.run(quot;hello.groovyquot;, binding);
 System.out.println(binding.getVariable(quot;outputquot;));




                                               Copyright 2006 Thorsten Kamann
Embedding mit Ant
ANT-Task, mit dem eine beliebige Anzahl von Groovy-
 Skripten ausgeführt werden können




                                             Copyright 2006 Thorsten Kamann
Embedding mit Ant
ANT-Task, mit dem eine beliebige Anzahl von Groovy-
 Skripten ausgeführt werden können
GroovyC-Task, der Groovy-Skripte (Klassen) zu Java
 Bytecode kompiliert




                                             Copyright 2006 Thorsten Kamann
Embedding mit Ant
ANT-Task, mit dem eine beliebige Anzahl von Groovy-
 Skripten ausgeführt werden können
GroovyC-Task, der Groovy-Skripte (Klassen) zu Java
 Bytecode kompiliert
Erstellen von Ant-Tasks mit Groovy und dem Markup-Builder




                                             Copyright 2006 Thorsten Kamann
Embedding mit Ant
ANT-Task, mit dem eine beliebige Anzahl von Groovy-
 Skripten ausgeführt werden können
GroovyC-Task, der Groovy-Skripte (Klassen) zu Java
 Bytecode kompiliert
Erstellen von Ant-Tasks mit Groovy und dem Markup-Builder
Erzeugen von Ant-Skripten




                                             Copyright 2006 Thorsten Kamann
Embedding mit Maven 2
Maven 2 wird offiziell mittels des Maven2-Ant-Plugins
 unterstützt




                                               Copyright 2006 Thorsten Kamann
Embedding mit Maven 2
Maven 2 wird offiziell mittels des Maven2-Ant-Plugins
 unterstützt
Es existiert aber ein Groovy-Maven-Plugin, mit dem
 beliebige Groovy-Skripte ausgeführt werden können




                                               Copyright 2006 Thorsten Kamann
Embedding mit Maven 2
Maven 2 wird offiziell mittels des Maven2-Ant-Plugins
 unterstützt
Es existiert aber ein Groovy-Maven-Plugin, mit dem
 beliebige Groovy-Skripte ausgeführt werden können
In der Sandbox von http://mojo.codehaus.org/
 existieren bereits Maven-Tools für direkte Unterstützung
 von Groovy




                                               Copyright 2006 Thorsten Kamann
Embedding mit Maven 2
Maven 2 wird offiziell mittels des Maven2-Ant-Plugins
 unterstützt
Es existiert aber ein Groovy-Maven-Plugin, mit dem
 beliebige Groovy-Skripte ausgeführt werden können
In der Sandbox von http://mojo.codehaus.org/
 existieren bereits Maven-Tools für direkte Unterstützung
 von Groovy
   Groovy-Compiler



                                               Copyright 2006 Thorsten Kamann
Embedding mit Maven 2
Maven 2 wird offiziell mittels des Maven2-Ant-Plugins
 unterstützt
Es existiert aber ein Groovy-Maven-Plugin, mit dem
 beliebige Groovy-Skripte ausgeführt werden können
In der Sandbox von http://mojo.codehaus.org/
 existieren bereits Maven-Tools für direkte Unterstützung
 von Groovy
   Groovy-Compiler
   Groovy-Archetype


                                               Copyright 2006 Thorsten Kamann
Embedding mit Maven 2
Maven 2 wird offiziell mittels des Maven2-Ant-Plugins
 unterstützt
Es existiert aber ein Groovy-Maven-Plugin, mit dem
 beliebige Groovy-Skripte ausgeführt werden können
In der Sandbox von http://mojo.codehaus.org/
 existieren bereits Maven-Tools für direkte Unterstützung
 von Groovy
   Groovy-Compiler
   Groovy-Archetype
   Tools, um Maven-Plugins mit Groovy zu entwickeln
                                               Copyright 2006 Thorsten Kamann
Embedding in Windows
Groovy kann direkt von der Eingabeaufforderung oder über
 Start-->Ausführen mittels
     groovy script.groovy [arguments]
 ausgeführt werden




                                             Copyright 2006 Thorsten Kamann
Embedding in Windows
Groovy kann direkt von der Eingabeaufforderung oder über
 Start-->Ausführen mittels
     groovy script.groovy [arguments]
 ausgeführt werden
Alternativ kann über den Dialog
 Ordneroptionen-->Dateitypen die Extension
 *.groovy an groovy.bat gebunden werden.




                                             Copyright 2006 Thorsten Kamann
Embedding in Linux
Groovy kann direkt von der Konsole mittels
     groovy script.groovy [arguments]
 ausgeführt werden




                                          Copyright 2006 Thorsten Kamann
Embedding in Linux
Groovy kann direkt von der Konsole mittels
     groovy script.groovy [arguments]
 ausgeführt werden
Alternativ kann in die 1. Zeile eines Groovy-Skripts
     #!/usr/bin/env groovy
 eingefügt werden. So kann mit
     chmod +x script.groovy
     ./script.groovy
 das Skript ausgeführt werden


                                                Copyright 2006 Thorsten Kamann
Die
S ynta x
           Copyright 2006 Thorsten Kamann
Die Syntax: Closures
Closures
   sind anonyme Codeblöcke




                              Copyright 2006 Thorsten Kamann
Die Syntax: Closures
Closures
   sind anonyme Codeblöcke
   geben einen Wert zurück




                              Copyright 2006 Thorsten Kamann
Die Syntax: Closures
Closures
   sind anonyme Codeblöcke
   geben einen Wert zurück
   referenzieren und verwenden Variablen




                                            Copyright 2006 Thorsten Kamann
Die Syntax: Closures
Closures
   sind anonyme Codeblöcke
   geben einen Wert zurück
   referenzieren und verwenden Variablen
   werden oft wie Anonyme Inner Classes in Java benutzt




                                             Copyright 2006 Thorsten Kamann
Die Syntax: Closures
Closures
   sind anonyme Codeblöcke
   geben einen Wert zurück
   referenzieren und verwenden Variablen
   werden oft wie Anonyme Inner Classes in Java benutzt
   werden erst ausgeführt, wenn call() auf der Closure
    aufgerufen wird




                                             Copyright 2006 Thorsten Kamann
Die Syntax: Closures
Closures
   sind anonyme Codeblöcke
   geben einen Wert zurück
   referenzieren und verwenden Variablen
   werden oft wie Anonyme Inner Classes in Java benutzt
   werden erst ausgeführt, wenn call() auf der Closure
    aufgerufen wird
   können an eine Variable gebunden werden



                                             Copyright 2006 Thorsten Kamann
Die Syntax: Closures (Beispiele)
Beispiele:

 { item++ }




                                   Copyright 2006 Thorsten Kamann
Die Syntax: Closures (Beispiele)
Beispiele:

 { name -> println name }




                                   Copyright 2006 Thorsten Kamann
Die Syntax: Closures (Beispiele)
Beispiele:

 {String x, int y -> println quot;hey $x the value is $yquot;}




                                               Copyright 2006 Thorsten Kamann
Die Syntax: Closures (Beispiele)
Beispiele:

 { reader ->
     while (true) {
            line = reader.readLine()
     }
 }




                                       Copyright 2006 Thorsten Kamann
Die Syntax – Collections (Listen)
Listen erzeugen immer eine Instanz von java.util.List




                                               Copyright 2006 Thorsten Kamann
Die Syntax – Collections (Listen)
Listen erzeugen immer eine Instanz von java.util.List

 def list = [5, 6, 7, 8]
 assert list.get(2) == 7
 assert list instanceof java.util.List




                                               Copyright 2006 Thorsten Kamann
Die Syntax – Collections (Listen)
Listen erzeugen immer eine Instanz von java.util.List

 def emptyList = []
 assert emptyList.size() == 0
 emptyList.add(5)
 assert emptyList.size() == 1




                                               Copyright 2006 Thorsten Kamann
Die Syntax – Collections (Ranges)
Ranges erzeugen Listen mit sequentiellen Werten




                                             Copyright 2006 Thorsten Kamann
Die Syntax – Collections (Ranges)
Ranges erzeugen Listen mit sequentiellen Werten
Es gibt inklusive und exklusive Ranges




                                             Copyright 2006 Thorsten Kamann
Die Syntax – Collections (Ranges)
Ranges erzeugen Listen mit sequentiellen Werten
Es gibt inklusive und exklusive Ranges


 def range = 5..8
 assert range.contains(6)
 assert range.contains(8)




                                             Copyright 2006 Thorsten Kamann
Die Syntax – Collections (Ranges)
Ranges erzeugen Listen mit sequentiellen Werten
Es gibt inklusive und exklusive Ranges


 def range = 5..<8
 assert range.contains(6)
 assert !range.contains(8)




                                             Copyright 2006 Thorsten Kamann
Die Syntax: Collections (Maps)
Maps basieren auf einer Implementierung von java.util.Map




                                             Copyright 2006 Thorsten Kamann
Die Syntax: Collections (Maps)
Maps basieren auf einer Implementierung von java.util.Map

 def map = [name:quot;Gromitquot;, likes:quot;cheesequot;, id:1234]
 assert map.get(quot;namequot;) == quot;Gromitquot;
 assert map[quot;namequot;] == quot;Gromitquot;




                                               Copyright 2006 Thorsten Kamann
Die Syntax: Collections (Maps)
Maps basieren auf einer Implementierung von java.util.Map

 def emptyMap = [:]
 emptyMap.foo = 5
 assert emptyMap.foo == 5




                                             Copyright 2006 Thorsten Kamann
Die Syntax: Collections (Expando)
Expandos ermöglichen die Erzeugung von dynamischen
 Objekten




                                           Copyright 2006 Thorsten Kamann
Die Syntax: Collections (Expando)
Expandos ermöglichen die Erzeugung von dynamischen
 Objekten

 def player = new Expando()
 player.name = quot;Peterquot;
 player.greeting = { quot;Hello, my name is $player.namequot; }
 assert player.greeting() == quot;Hello, my name is Peterquot;




                                               Copyright 2006 Thorsten Kamann
Die Syntax: Collections (each)
Iterator mittels einer Closure




                                  Copyright 2006 Thorsten Kamann
Die Syntax: Collections (each)
Iterator mittels einer Closure

 [1, 2, 3].each { item -> print quot;${item}-quot; }




                                               Copyright 2006 Thorsten Kamann
Die Syntax: Collections (collect)
Erzeugt eine neue Liste mit dem Ergebnis der Closure




                                              Copyright 2006 Thorsten Kamann
Die Syntax: Collections (collect)
Erzeugt eine neue Liste mit dem Ergebnis der Closure

 def value = [1, 2, 3].collect { it * 2 }
 assert value == [2, 4, 6]




                                              Copyright 2006 Thorsten Kamann
Die Syntax: Collections (find)
Gibt das erste Element einer Collection zurück, welches der
 Expression in der Closure entspricht




                                              Copyright 2006 Thorsten Kamann
Die Syntax: Collections (find)
Gibt das erste Element einer Collection zurück, welches der
 Expression in der Closure entspricht

 def value = [1, 2, 3].find { it > 1 }
 assert value == 2




                                              Copyright 2006 Thorsten Kamann
Die Syntax: Collections (findAll)
Gibt eine Collection mit allen Elementen, die denen der
 Expression in der Closure entsprechen, zurück




                                              Copyright 2006 Thorsten Kamann
Die Syntax: Collections (findAll)
Gibt eine Collection mit allen Elementen, die denen der
 Expression in der Closure entsprechen, zurück

 def value = [1, 2, 3].findAll { it > 1 }
 assert value == [2, 3]




                                              Copyright 2006 Thorsten Kamann
Die Syntax: Collections (inject)
Fügt einen zusätzlichen Wert zu einer Iteration hinzu




                                               Copyright 2006 Thorsten Kamann
Die Syntax: Collections (inject)
Fügt einen zusätzlichen Wert zu einer Iteration hinzu

 def value = [quot;Javaquot;, quot;C#quot;, quot;C++quot;, quot;VBquot;]
     .inject(quot;Languages: quot;){str, item -> str+quot; quot;+item}
 assert value == „Languages: Java C# C++ VB“




                                               Copyright 2006 Thorsten Kamann
Die Syntax: Collections (every)
Gibt true zurück, wenn alle Werte in der Collection der
 Expression in der Closure entsprechen




                                              Copyright 2006 Thorsten Kamann
Die Syntax: Collections (every)
Gibt true zurück, wenn alle Werte in der Collection der
 Expression in der Closure entsprechen

 def value = [1, 2, 3].every { it < 5 }
 assert value




                                              Copyright 2006 Thorsten Kamann
Die Syntax: Collections (every)
Gibt true zurück, wenn alle Werte in der Collection der
 Expression in der Closure entsprechen

 def value = [1, 2, 3].every { item -> item < 3 }
 assert !value




                                               Copyright 2006 Thorsten Kamann
Die Syntax: Collections (any)
Gibt true zurück, wenn mindestens ein Wert in der
 Collection der Expression in der Closure entspricht




                                              Copyright 2006 Thorsten Kamann
Die Syntax: Collections (any)
Gibt true zurück, wenn mindestens ein Wert in der
 Collection der Expression in der Closure entspricht

 def value = [1, 2, 3].any { item -> item > 3 }
 assert value == false




                                                  Copyright 2006 Thorsten Kamann
Die Syntax: Collections (any)
Gibt true zurück, wenn mindestens ein Wert in der
 Collection der Expression in der Closure entspricht

 def value = [1, 2, 3].any { it > 2 }
 assert value




                                              Copyright 2006 Thorsten Kamann
Die Syntax: Collections (max/min)
Gibt den maximalen Wert einer Collection zurück. Die
 Objekte in dieser Collection müssen Comparable sein




                                             Copyright 2006 Thorsten Kamann
Die Syntax: Collections (max/min)
Gibt den maximalen Wert einer Collection zurück. Die
 Objekte in dieser Collection müssen Comparable sein

 def value = [9, 4, 2, 10, 5].max()
 assert value == 10




                                             Copyright 2006 Thorsten Kamann
Die Syntax: Collections (max/min)
Gibt den maximalen Wert einer Collection zurück. Die
 Objekte in dieser Collection müssen Comparable sein

 def value = [9, 4, 2, 10, 5].min()
 assert value == 2




                                             Copyright 2006 Thorsten Kamann
Die Syntax: Collections (max/min)
Gibt den maximalen Wert einer Collection zurück. Die
 Objekte in dieser Collection müssen Comparable sein

 def value = ['x', 'y', 'a', 'z'].min()
 assert value == 'a'




                                             Copyright 2006 Thorsten Kamann
Die Syntax: Collections (join)
Fügt einen String zu den Werten einer Collection hinzu




                                             Copyright 2006 Thorsten Kamann
Die Syntax: Collections (join)
Fügt einen String zu den Werten einer Collection hinzu

 def value = [1, 2, 3].join('-')
 assert value == '1-2-3'




                                             Copyright 2006 Thorsten Kamann
Die Syntax: Collections (Beispiele)
Ranges verwenden, um Teile von Listen zu extrahieren

 def list = 100..200
 def sub = list[1, 3, 20..25, 33]
 assert sub == [101, 103, 120, 121, 122, 123, 124, 125, 133]




                                               Copyright 2006 Thorsten Kamann
Die Syntax: Collections (Beispiele)
Rückwärts gerichtete Ranges

 def text = quot;nice cheese gromit!quot;
 def name = text[3..1]
 assert name == quot;eciquot;




                                      Copyright 2006 Thorsten Kamann
Die Syntax: Collections (Beispiele)
Negative Ranges – Index beginnt beim letzten Zeichen

 def text = quot;nice cheese gromit!quot;
 def x = text[-1]
 assert x == quot;!quot;




                                              Copyright 2006 Thorsten Kamann
Die Syntax: Collections (Beispiele)
Negative Ranges – Index beginnt beim letzten Zeichen

 def text = quot;nice cheese gromit!quot;

 def name = text[-7..-2]
 assert name == quot;gromitquot;




                                              Copyright 2006 Thorsten Kamann
Die Syntax: Looping (while)
Groovy unterstützt das aus Java bekannte while{..}
 Konstrukt




                                              Copyright 2006 Thorsten Kamann
Die Syntax: Looping (while)
Groovy unterstützt das aus Java bekannte while{..}
 Konstrukt

 def x = 0
 def y = 5
 while ( y-- > 0 ) {
     x++
 }
 assert x == 5




                                              Copyright 2006 Thorsten Kamann
Die Syntax: Looping (for)
Die for-Schleife ist einfacher und arbeitet mit Arrays und
 Collections




                                                Copyright 2006 Thorsten Kamann
Die Syntax: Looping (for)
Die for-Schleife ist einfacher und arbeitet mit Arrays und
 Collections

 def x = 0
 for ( i in 0..9 ) {
     x += i
 }
 assert x == 45




                                                Copyright 2006 Thorsten Kamann
Die Syntax: Looping (for)
Die for-Schleife ist einfacher und arbeitet mit Arrays und
 Collections

 x = 0
 for ( i in [0, 1, 2, 3, 4] ) {
     x += i
 }
 assert x == 10




                                                Copyright 2006 Thorsten Kamann
Die Syntax: Looping (each)
each ist eine Closure. Dadurch ist eine sehr kompakte
 Abarbeitung von Schleifen möglich




                                              Copyright 2006 Thorsten Kamann
Die Syntax: Looping (each)
each ist eine Closure. Dadurch ist eine sehr kompakte
 Abarbeitung von Schleifen möglich

 def stringList = [quot;javaquot;, quot;pythonquot;, quot;rubyquot;, quot;c#quot;, quot;groovyquot;]
 stringList.each() { print quot; ${it}quot; };
 // java python ruby c# groovy




                                               Copyright 2006 Thorsten Kamann
Die Syntax: Looping (each)
each ist eine Closure. Dadurch ist eine sehr kompakte
 Abarbeitung von Schleifen möglich

 def stringMap = [quot;Suquot; : quot;Sundayquot;, quot;Moquot; : quot;Mondayquot;]
 stringMap.each() { key, value ->
     println quot;${key} == ${value}quot; };
 // Su == Sunday
 // Mo == Monday




                                              Copyright 2006 Thorsten Kamann
Die Syntax: Looping (eachWithIndex)
Unterscheidet sich vom Looping mit each dadurch, dass ein
 Index mitgeführt wird




                                             Copyright 2006 Thorsten Kamann
Die Syntax: Looping (eachWithIndex)
Unterscheidet sich vom Looping mit each dadurch, dass ein
 Index mitgeführt wird

 def stringList = [quot;javaquot;, quot;pythonquot;, quot;rubyquot;, quot;c#quot;, quot;groovyquot;]
 stringList.eachWithIndex() {
     obj, i -> println quot; ${i}: ${obj}quot; };
 // 0: java 1: python 2: ruby 3: c# 4: groovy




                                               Copyright 2006 Thorsten Kamann
Die Syntax: Looping (eachWithIndex)
Unterscheidet sich vom Looping mit each dadurch, dass ein
 Index mitgeführt wird

 def stringMap = [quot;Suquot; : quot;Sundayquot;, quot;Moquot; : quot;Mondayquot;]
 stringMap.eachWithIndex() {
     obj, i -> println quot; ${i}: ${obj}quot; };
 // 0: Su=Sunday
 // 1: Mo=Monday




                                              Copyright 2006 Thorsten Kamann
Die Syntax: Conditions (if...else)
Groovy unterstützt die aus Java bekannten if...else
 Konstrukte




                                           Copyright 2006 Thorsten Kamann
Die Syntax: Conditions (if...else)
Groovy unterstützt die aus Java bekannten if...else
 Konstrukte

 def x = (y > 1) ? quot;workedquot; : quot;failedquot;

 if (x){
     ...
 }else{
     ...
 }




                                           Copyright 2006 Thorsten Kamann
Die Syntax: Conditions (switch)
Das switch-Statement unterstützt Klassenvergleiche,
 Inhalte von Collections (Lists, Ranges), reguläre Ausdrücke
 und equals Vergleiche




                                                Copyright 2006 Thorsten Kamann
Die Syntax: Conditions (switch)
Das switch-Statement unterstützt Klassenvergleiche,
 Inhalte von Collections (Lists, Ranges), reguläre Ausdrücke
 und equals Vergleiche

 switch ( x ) {
     case („foo“): ...
     case (20..30): ...
     case (Integer): ...
     default: ...
 }




                                                Copyright 2006 Thorsten Kamann
XML
Proc e s s ing

                 Copyright 2006 Thorsten Kamann
XML-Processing
Groovy bietet reichhaltige Unterstützung für das XML-
 Processing




                                              Copyright 2006 Thorsten Kamann
XML-Processing




                 Copyright 2006 Thorsten Kamann
XML-Processing




                 Copyright 2006 Thorsten Kamann
XML-Processing




                 Copyright 2006 Thorsten Kamann
XML-Processing




                 Copyright 2006 Thorsten Kamann
XML-Processing
Groovy bietet reichhaltige Unterstützung für das XML-
 Processing
Gpath (Xpath) Ausdrücke erlauben schnelle Navigation im
 XML-Dokument




                                             Copyright 2006 Thorsten Kamann
XML-Processing
Groovy bietet reichhaltige Unterstützung für das XML-
 Processing
Gpath (Xpath) Ausdrücke erlauben schnelle Navigation im
 XML-Dokument
DOMCategory stellt mächtige Navigationselemente zur
 Verfügung




                                             Copyright 2006 Thorsten Kamann
XML-Processing
DOM Klasse   Methode       Beschreibung
Element      .'child'      .getElementsByTagName('child')
Element      .child        .getElementsByTagName('child')
Element      .'*'          .getElementsByTagName('*')
Element      .'@attr'      .getAttribute('attr')
Element      .text()       .firstChild.nodeValue
Element      .name()       .nodeName
Element      .parent()     .parentNode
Element      .children()   .childNodes
NodeList     .size()       .length
NodeList     .list()
NodeList     [n]           .item(n)
NodeList     .text()       .collect{ it.text() }
NodeList     .child        .getElementsByTagName('child')


                                           Copyright 2006 Thorsten Kamann
XML-Processing mit XML-Parser
def records = new
 XmlParser().parseText(XmlExamples.CAR_RECORDS)

def allRecords = records.car.size()
assert allRecords == 3

def allNodes = records.depthFirst().size()
assert allNodes == 10




                                                  Copyright 2006 Thorsten Kamann
XML-Processing mit DOMCategory
def reader = new StringReader(XmlExamples.CAR_RECORDS)
def doc     = DOMBuilder.parse(reader)
def records = doc.documentElement

use (DOMCategory) {
    assert 9 == records.'*'.size()
    def cars = records.'car'
    assert cars[0].parent() == records
    assert 3 == cars.size()
 }




                                               Copyright 2006 Thorsten Kamann
Groovy
Ma rkup

          Copyright 2006 Thorsten Kamann
GroovyMarkup
Groovy bietet Unterstützung für die Arbeit mit Markup-
 Languages:
   XML, HTML, SAX, W3C DOM, Ant Tasks, Swing UI's




                                              Copyright 2006 Thorsten Kamann
GroovyMarkup
Groovy bietet Unterstützung für die Arbeit mit Markup-
 Languages:
   XML, HTML, SAX, W3C DOM, Ant Tasks, Swing UI's




                                              Copyright 2006 Thorsten Kamann
GroovyMarkup
Groovy bietet Unterstützung für die Arbeit mit Markup-
 Languages:
   XML, HTML, SAX, W3C DOM, Ant Tasks, Swing UI's
GroovyMarkup bietet eine einheitliche Schnittstelle
   Elemente sind Closures
   Attribute sind Maps




                                              Copyright 2006 Thorsten Kamann
GroovyMarkup
Groovy bietet Unterstützung für die Arbeit mit Markup-
 Languages:
   XML, HTML, SAX, W3C DOM, Ant Tasks, Swing UI's
GroovyMarkup bietet eine einheitliche Schnittstelle
   Elemente sind Closures
   Attribute sind Maps
Vollständige Integration anderer Groovy-Features
   Collections, Arrays, Conditions, ...



                                              Copyright 2006 Thorsten Kamann
GroovyMarkup (Beispiel)
builder = new MarkupBuilder(writer)
builder.person() {
   name(first:quot;Meganquot;, last:quot;Smithquot;) {
       age(quot;33quot;)
   }
}




                                         Copyright 2006 Thorsten Kamann
GroovyMarkup (Beispiel)
builder = new MarkupBuilder(writer)
builder.person() {
   name(first:quot;Meganquot;, last:quot;Smithquot;) {
       age(quot;33quot;)
   }
}

<person>
   <name first=“Megan“ last=“Smith“>
       <age>33</age>
   </name>
</person>



                                         Copyright 2006 Thorsten Kamann
GPath
        Copyright 2006 Thorsten Kamann
GPath
Ist eine Expression-Language für Daten mit Baumstrukturen




                                             Copyright 2006 Thorsten Kamann
GPath
Ist eine Expression-Language für Daten mit Baumstrukturen




                                             Copyright 2006 Thorsten Kamann
GPath
Ist eine Expression-Language für Daten mit Baumstrukturen
Implementierung für XML




                                             Copyright 2006 Thorsten Kamann
GPath
Ist eine Expression-Language für Daten mit Baumstrukturen
Implementierung für XML
Pfade zu einem Element können spezifiziert werden
    a.b.c findet alle <c>-Elemente innerhalb aller <b>
     innerhalb aller <a>




                                             Copyright 2006 Thorsten Kamann
GPath
Ist eine Expression-Language für Daten mit Baumstrukturen
Implementierung für XML
Pfade zu einem Element können spezifiziert werden
    a.b.c findet alle <c>-Elemente innerhalb aller <b>
     innerhalb aller <a>
Auch Attribute können spezifiziert werden
    a[quot;@hrefquot;] -> findet alle href-Attribute in <a>-
     Elementen
    a.@href -> eine Alternativ-Syntax dazu

                                             Copyright 2006 Thorsten Kamann
Groovy
Be a ns
          Copyright 2006 Thorsten Kamann
GroovyBeans
GroovyBeans sind wie JavaBeans, nur einfacher zu
 definieren




                                             Copyright 2006 Thorsten Kamann
GroovyBeans
GroovyBeans sind wie JavaBeans, nur einfacher zu
 definieren
Customer.groovy:
 class Customer {
     int id
     String name
 }




                                             Copyright 2006 Thorsten Kamann
GroovyBeans
GroovyBeans sind wie JavaBeans, nur einfacher zu
 definieren
Customer.groovy:              Customer.java:
 class Customer {              public class Customer {
     int id                      private int id = 0;
     String name                 private String name;
 }
                                   public int getId(){
                                     return id;
                                   }

                                   public void setId(int id){
                                     this.id = id;
                                   }
                                   ...
                               }
                                                Copyright 2006 Thorsten Kamann
GroovyBeans
Regeln für Properties:
   Wenn eine Property als private gekennzeichnet ist,
    wird ein Java Field benutzt, um diese Property zu
    repräsentieren




                                            Copyright 2006 Thorsten Kamann
GroovyBeans
Regeln für Properties:
   Wenn eine Property als public oder protected
    gekennzeichnet wird, werden Getter- und Setter-
    Methoden mit der gleichen Sichtbarkeit und ein Feld mit
    der Sichtbarkeit private auf Bytecode-Ebene erzeugt




                                              Copyright 2006 Thorsten Kamann
GroovyBeans
Regeln für Properties:
   Wenn keine Getter- oder Setter-Methoden für Properties
    mit der Sichtbarkeit public oder protected deklariert
    wurden, werden fehlende Getter- und Setter-Methoden
    mit der gleichen Sichtbarkeit automatisch auf Bytecode-
    Ebene erzeugt




                                             Copyright 2006 Thorsten Kamann
GroovyBeans
Regeln für Properties:
   Mit selbst deklarierten Getter- und Setter-Methoden
    können die von der Groovy-Runtime generierten
    Methoden überschrieben werden




                                              Copyright 2006 Thorsten Kamann
Re gEx

         Copyright 2006 Thorsten Kamann
Reguläre Ausdrücke
Reguläre Ausdrücke werden von Groovy nativ unterstützt




                                             Copyright 2006 Thorsten Kamann
Reguläre Ausdrücke
Reguläre Ausdrücke werden von Groovy nativ unterstützt
Die ~quot;...quot; Expression wird automatisch in ein Java-Pattern
 Objekt kompiliert




                                               Copyright 2006 Thorsten Kamann
Reguläre Ausdrücke
Reguläre Ausdrücke werden von Groovy nativ unterstützt
Die ~quot;...quot; Expression wird automatisch in ein Java-Pattern
 Objekt kompiliert
   =~ Create Matcher




                                               Copyright 2006 Thorsten Kamann
Reguläre Ausdrücke
Reguläre Ausdrücke werden von Groovy nativ unterstützt
Die ~quot;...quot; Expression wird automatisch in ein Java-Pattern
 Objekt kompiliert
   =~ Create Matcher
    assert quot;cheesecheesequot; =~ /cheese/




                                               Copyright 2006 Thorsten Kamann
Reguläre Ausdrücke
Reguläre Ausdrücke werden von Groovy nativ unterstützt
Die ~quot;...quot; Expression wird automatisch in ein Java-Pattern
 Objekt kompiliert
   =~ Create Matcher
    assert quot;cheesecheesequot; =~ /cheese/
   ==~ Matches Regex




                                               Copyright 2006 Thorsten Kamann
Reguläre Ausdrücke
Reguläre Ausdrücke werden von Groovy nativ unterstützt
Die ~quot;...quot; Expression wird automatisch in ein Java-Pattern
 Objekt kompiliert
   =~ Create Matcher
    assert quot;cheesecheesequot; =~ /cheese/
   ==~ Matches Regex
    assert quot;cheesecheesequot;   ==~ /.*ees.*/




                                               Copyright 2006 Thorsten Kamann
Gra ils

          Copyright 2006 Thorsten Kamann
Grails
Grails ist ein Webapplication-Framework




                                           Copyright 2006 Thorsten Kamann
Grails
Grails ist ein Webapplication-Framework
Es vereinfacht die Entwicklung von Webanwendungen durch
   das Coding By Convention-Paradigma




                                            Copyright 2006 Thorsten Kamann
Grails
Grails ist ein Webapplication-Framework
Es vereinfacht die Entwicklung von Webanwendungen durch
   das Coding By Convention-Paradigma
   die Verwendung von Spring/Hibernate




                                            Copyright 2006 Thorsten Kamann
Grails
Grails ist ein Webapplication-Framework
Es vereinfacht die Entwicklung von Webanwendungen durch
   das Coding By Convention-Paradigma
   die Verwendung von Spring/Hibernate
   eigene GSP (Groovy Server Pages) mit dynamischen
     TagLibraries




                                            Copyright 2006 Thorsten Kamann
Grails (Screenshots)




                       Copyright 2006 Thorsten Kamann
Grails (Screenshots)




                       Copyright 2006 Thorsten Kamann
Grails (Screenshots)




                       Copyright 2006 Thorsten Kamann
Grails (Screenshots)




                       Copyright 2006 Thorsten Kamann
Grails
Die zentrale Komponente ist die Domänenklasse (Entity)




                                             Copyright 2006 Thorsten Kamann
Grails
Die zentrale Komponente ist die Domänenklasse (Entity)
Daraus können der Controller und die Views für eine CRUD-
 Anwendung generiert werden




                                              Copyright 2006 Thorsten Kamann
Grails
Die zentrale Komponente ist die Domänenklasse (Entity)
Daraus können der Controller und die Views für eine CRUD-
 Anwendung generiert werden
Anbindung an Enterprise-Systeme kann über SpringBeans
 erfolgen




                                              Copyright 2006 Thorsten Kamann
Grails
Die zentrale Komponente ist die Domänenklasse (Entity)
Daraus können der Controller und die Views für eine CRUD-
 Anwendung generiert werden
Anbindung an Enterprise-Systeme kann über SpringBeans
 erfolgen
Als View-Technologie ist zur Zeit JSP und GSP vorgesehen




                                              Copyright 2006 Thorsten Kamann
Grails
Die zentrale Komponente ist die Domänenklasse (Entity)
Daraus können der Controller und die Views für eine CRUD-
 Anwendung generiert werden
Anbindung an Enterprise-Systeme kann über SpringBeans
 erfolgen
Als View-Technologie ist zur Zeit JSP und GSP vorgesehen
Eclipse Integration ist in Arbeit




                                              Copyright 2006 Thorsten Kamann
Grails
Die zentrale Komponente ist die Domänenklasse (Entity)
Daraus können der Controller und die Views für eine CRUD-
 Anwendung generiert werden
Anbindung an Enterprise-Systeme kann über SpringBeans
 erfolgen
Als View-Technologie ist zur Zeit JSP und GSP vorgesehen
Eclipse Integration ist in Arbeit
Sehr leichte Integration in eine MDSD-Umgebung



                                              Copyright 2006 Thorsten Kamann
Gorm

       Copyright 2006 Thorsten Kamann
GORM
Ist der OR-Mapper für Grails




                                Copyright 2006 Thorsten Kamann
GORM
Ist der OR-Mapper für Grails
Unter der Haube wird Hibernate 3 verwendet




                                              Copyright 2006 Thorsten Kamann
GORM
Ist der OR-Mapper für Grails
Unter der Haube wird Hibernate 3 verwendet
Die Konfiguration wird komplett in den Groovy-Files
 vorgenommen




                                              Copyright 2006 Thorsten Kamann
GORM
Ist der OR-Mapper für Grails
Unter der Haube wird Hibernate 3 verwendet
Die Konfiguration wird komplett in den Groovy-Files
 vorgenommen
Alle Features von Hibernate werden unterstützt




                                              Copyright 2006 Thorsten Kamann
GORM
Ist der OR-Mapper für Grails
Unter der Haube wird Hibernate 3 verwendet
Die Konfiguration wird komplett in den Groovy-Files
 vorgenommen
Alle Features von Hibernate werden unterstützt
In Verbindung mit Spring ist es möglich, Transaktionen in
 Grails-Anwendungen flexibel zu verwalten




                                               Copyright 2006 Thorsten Kamann
Groovle ts


             Copyright 2006 Thorsten Kamann
Groovlets
Groovlets sind Java-Servlets in Groovy geschrieben




                                               Copyright 2006 Thorsten Kamann
Groovlets
Groovlets sind Java-Servlets in Groovy geschrieben
Es gibt ein GroovyServlet, welches Groovy-Skripte
 automatisch kompiliert, ausführt und cached




                                               Copyright 2006 Thorsten Kamann
Groovlets
Groovlets sind Java-Servlets in Groovy geschrieben
Es gibt ein GroovyServlet, welches Groovy-Skripte
 automatisch kompiliert, ausführt und cached




                                               Copyright 2006 Thorsten Kamann
Groovlets
Implizite Variablen:
 Variable      Gebunden an                  Bemerkung
 Request       ServletRequest
 Response      ServletResponse
 Context       ServletContext
 Application   ServletContext
 Session       getSession(false)
 Out           response.getWriter()         Können nicht re-assigned werden
 Cout          response.getOutputStream()   Können nicht re-assigned werden
 Html          new MarkupBuilder(out)       Können nicht re-assigned werden




                                                               Copyright 2006 Thorsten Kamann
GS QL

        Copyright 2006 Thorsten Kamann
GSQL
Vereinfacht das Arbeiten mit SQL




                                    Copyright 2006 Thorsten Kamann
GSQL
Vereinfacht das Arbeiten mit SQL
Unterstützung von SQL-Queries und -Statements




                                            Copyright 2006 Thorsten Kamann
GSQL
Vereinfacht das Arbeiten mit SQL
Unterstützung von SQL-Queries und -Statements
Closures bieten komfortables Arbeiten mit den ResultSets




                                              Copyright 2006 Thorsten Kamann
GSQL
Vereinfacht das Arbeiten mit SQL
Unterstützung von SQL-Queries und -Statements
Closures bieten komfortables Arbeiten mit den ResultSets

 def sql = Sql.newInstance(quot;urlquot;, quot;userquot;,quot;pwdquot;, quot;driverquot;)
 sql.eachRow(quot;select * from FOOD where type=${foo}quot;) {
     println quot;Gromit likes ${it.name}quot;
 }




                                               Copyright 2006 Thorsten Kamann
GSQL
Vereinfacht das Arbeiten mit SQL
Unterstützung von SQL-Queries und -Statements
Closures bieten komfortables Arbeiten mit den ResultSets

 def sql = Sql.newInstance(quot;urlquot;, quot;userquot;,quot;pwdquot;, quot;driverquot;)
 def food = sql.dataSet('FOOD')
 def cheese = food.findAll { it.type == 'cheese' }
 cheese.each { println quot;Eat ${it.name}quot; }




                                               Copyright 2006 Thorsten Kamann
Ant-
S c ripting
              Copyright 2006 Thorsten Kamann
Ant-Scripting
Bietet eine Schnittstelle, um Ant-Tasks per Groovy-Script zu
 erstellen und zu benutzen




                                               Copyright 2006 Thorsten Kamann
Ant-Scripting
Bietet eine Schnittstelle, um Ant-Tasks per Groovy-Script zu
 erstellen und zu benutzen

 ant = new AntBuilder()
 ant.echo(message:quot;mapping it via attribute!quot;)
 ant.echo(quot;Hello World!quot;)




                                                 Copyright 2006 Thorsten Kamann
Ant-Scripting
Bietet eine Schnittstelle, um Ant-Tasks per Groovy-Script zu
 erstellen und zu benutzen

 ant = new AntBuilder()
 try{
      ant.javac(srcdir:quot;/srcquot;, destdir:quot;/dest/quot; )
 }catch(Throwable thr){
      ant.mail(mailhost:quot;hostquot;, subject:quot;build failurequot;){
             from(address:quot;buildmaster@anywhere.comquot;),
             to(address:quot;dev-team@anywhere.comquot;)
             message(quot;Unable to compile sources.quot;)
      }
 }



                                                Copyright 2006 Thorsten Kamann
Groovy
Te mpla te s

               Copyright 2006 Thorsten Kamann
Groovy Templates
Bietet ein Framework, um eine eigene Template-Engine zu
 entwickeln




                                            Copyright 2006 Thorsten Kamann
Groovy Templates
Bietet ein Framework, um eine eigene Template-Engine zu
 entwickeln
Enthalten ist die SimpleTemplateEngine, die JSP-like
 mittels Scripts, Scriptlets und EL parameterisierte Texte
 generieren kann




                                              Copyright 2006 Thorsten Kamann
Groovy Templates (Beispiel)
def text = 'Dear quot;${firstname} ${lastname}quot;,nSo nice to
 meet you in <% print city %>.'

def binding = [quot;firstnamequot;:quot;Peterquot;, quot;lastnamequot;:quot;Schulzequot;,
 quot;cityquot;:quot;Dortmundquot;]

def engine = new SimpleTemplateEngine()
template = engine.createTemplate(text).make(binding)

def result = 'Dear quot;Peter Schulzequot;,nSo nice to meet you in
 Dortmund.'
assert result == template.toString()



                                               Copyright 2006 Thorsten Kamann
S ic he rhe it

                 Copyright 2006 Thorsten Kamann
Sicherheit
Groovy-Skripte können innerhalb des Java Security-
 Managers ausgeführt werden




                                              Copyright 2006 Thorsten Kamann
Sicherheit
Groovy-Skripte können innerhalb des Java Security-
 Managers ausgeführt werden




                                              Copyright 2006 Thorsten Kamann
Sicherheit
Groovy-Skripte können innerhalb des Java Security-
 Managers ausgeführt werden

 security.policy:
 grant codeBase quot;file:/serverCodeBase/restrictedClientquot; {
     permission java.security.AllPermission;
 };




                                               Copyright 2006 Thorsten Kamann
Sicherheit
Groovy-Skripte können innerhalb des Java Security-
 Managers ausgeführt werden

 security.policy:
 grant codeBase quot;file:/serverCodeBase/restrictedClientquot; {
     permission java.security.AllPermission;
 };

 Java-Code:
 new GroovyShell().evaluate(
     new GroovyCodeSource(
            clientscriptStr,
            quot;RestrictedScriptquot;,
            quot;/serverCodeBase/restrictedClientquot;)


                                                  Copyright 2006 Thorsten Kamann
S c riptom

             Copyright 2006 Thorsten Kamann
Scriptom
Scriptom ist ein optionales Modul für die Verwendung mit
 dem Windows Scripting Host oder OLE COM Automation




                                              Copyright 2006 Thorsten Kamann
Scriptom
Scriptom ist ein optionales Modul für die Verwendung mit
 dem Windows Scripting Host oder OLE COM Automation

 import org.codehaus.groovy.scriptom.ActiveXProxy

 def explorer = new
     ActiveXProxy(quot;InternetExplorer.Applicationquot;)
 explorer.Visible = true
 explorer.AddressBar = true
 explorer.Navigate(quot;http://www.itemis.de/quot;)




                                               Copyright 2006 Thorsten Kamann
Scriptom
Scriptom ist ein optionales Modul für die Verwendung mit
 dem Windows Scripting Host oder OLE COM Automation

 import org.codehaus.groovy.scriptom.ActiveXProxy
 import java.io.File

 def word = new ActiveXProxy(quot;Word.Applicationquot;)
 word.Documents.Open(new File(args[0]).canonicalPath)
 word.ActiveDocument.SaveAs(new File(args[0] - quot;.docquot; +
    quot;.htmlquot;).canonicalPath, 8)
 word.Quit()




                                               Copyright 2006 Thorsten Kamann
We ite re
Module
            Copyright 2006 Thorsten Kamann
Weitere Module
Gant

 Gant ist ein Build-Tool auf Basis von Ant. Anstatt XML zu
 verwenden, wird ein Groovy-Dialekt benutzt, um die Ant-
 Targets und -Tasks zu konfigurieren.




                                               Copyright 2006 Thorsten Kamann
Weitere Module
Google Data Support

 Google bietet den Zugriff auf seine Services. Mit Google
 Data Support wird der Zugriff darauf wesentlich
 vereinfacht.




                                               Copyright 2006 Thorsten Kamann
Weitere Module
Gram

Gram unterstützt bei der Verwendung von Xdoclet-Tags und
Annotations in Groovy-Scripts.




                                           Copyright 2006 Thorsten Kamann
Weitere Module
Groovy Jabber-RPC

 Damit können XML-RPC Aufrufe über das Jabber-Protokol
 abgesetzt werden. Bietet die Möglichkeit sowohl einen
 Server als auch einen Client zu erstellen.




                                            Copyright 2006 Thorsten Kamann
Weitere Module
Groovy Monkey

 Groovy Monkey ist ein Port des Eclipse-Monkey Projekts.
 Damit kann Eclipse über Groovy-Scripts automatisiert
 werden.




                                              Copyright 2006 Thorsten Kamann
Weitere Module
Groovy SOAP

 Damit können sowohl ein Soap-Server als auch ein Soap-
 Client erstellt werden.




                                             Copyright 2006 Thorsten Kamann
Weitere Module
GroovySWT

 Auch SWT-UI's können mittels Groovy erstellt werden.




                                              Copyright 2006 Thorsten Kamann
Weitere Module
Process

 Wird auch GrooSH – Groovy Shell – genannt. Hiermit ist es
 möglich Funktionen einer (Unix-)Shell nachzubilden.




                                               Copyright 2006 Thorsten Kamann
Weitere Module
XMLRPC

Ermöglicht XML-RPC Calls an lokale oder enfernte RPC-
Server abzusetzen.




                                             Copyright 2006 Thorsten Kamann
Te s ting

            Copyright 2006 Thorsten Kamann
Testing




          Copyright 2006 Thorsten Kamann
Testing




          Copyright 2006 Thorsten Kamann
Testing




          Copyright 2006 Thorsten Kamann
Testing




          Copyright 2006 Thorsten Kamann
Testing




          Copyright 2006 Thorsten Kamann
Testing




          Copyright 2006 Thorsten Kamann
Testing




          Copyright 2006 Thorsten Kamann
Testing




          Copyright 2006 Thorsten Kamann
Testing




          Copyright 2006 Thorsten Kamann
Testing




          Copyright 2006 Thorsten Kamann
Testing




          Copyright 2006 Thorsten Kamann
Testing




          Copyright 2006 Thorsten Kamann
Testing




          Copyright 2006 Thorsten Kamann
Testing




          Copyright 2006 Thorsten Kamann
Testing - jUnit-Testing
Basiert auf jUnit und erweitert die Asserts




                                               Copyright 2006 Thorsten Kamann
Testing - jUnit-Testing
Basiert auf jUnit und erweitert die Asserts
    assertArrayEquals(Object[] expected, Object[] value)
    assertLength(int length, char[] array)
    assertLength(int length, int[] array)
    assertLength(int length, Object[] array)
    assertContains(char expected, char[] array)
    assertContains(int expected, int[] array)
    assertToString(Object value, String expected)
    assertInspect(Object value, String expected)
    assertScript(final String script)
    shouldFail(Closure code)
    shouldFail(Class clazz, Closure code)


                                                Copyright 2006 Thorsten Kamann
IDE
S upport
           Copyright 2006 Thorsten Kamann
IDE-Support




              Copyright 2006 Thorsten Kamann
IDE-Support




              Copyright 2006 Thorsten Kamann
IDE-Support




              Copyright 2006 Thorsten Kamann
IDE-Support




              Copyright 2006 Thorsten Kamann
IDE-Support




              Copyright 2006 Thorsten Kamann
IDE-Support




              Copyright 2006 Thorsten Kamann
IDE-Support (Groovy Monkey)
Groovy Monkey ist ein Aufsatz auf Eclipse Monkey




                                              Copyright 2006 Thorsten Kamann
IDE-Support (Groovy Monkey)
Groovy Monkey ist ein Aufsatz auf Eclipse Monkey
Damit kann Eclipse geskriptet werden




                                              Copyright 2006 Thorsten Kamann
IDE-Support (Groovy Monkey)
Groovy Monkey ist ein Aufsatz auf Eclipse Monkey
Damit kann Eclipse geskriptet werden
Nützlich für
   Automatisierungs-Task (Quelltext-Suche, Erstellen von
    Tasks)




                                              Copyright 2006 Thorsten Kamann
IDE-Support (Groovy Monkey)
Groovy Monkey ist ein Aufsatz auf Eclipse Monkey
Damit kann Eclipse geskriptet werden
Nützlich für
   Automatisierungs-Task (Quelltext-Suche, Erstellen von
    Tasks)
   Erstellen von LaunchManagern




                                              Copyright 2006 Thorsten Kamann
IDE-Support (Groovy Monkey)
Groovy Monkey ist ein Aufsatz auf Eclipse Monkey
Damit kann Eclipse geskriptet werden
Nützlich für
   Automatisierungs-Task (Quelltext-Suche, Erstellen von
    Tasks)
   Erstellen von LaunchManagern
   Prototyping von Plugins




                                              Copyright 2006 Thorsten Kamann
IDE-Support (Groovy Monkey)
Groovy Monkey ist ein Aufsatz auf Eclipse Monkey
Damit kann Eclipse geskriptet werden
Nützlich für
   Automatisierungs-Task (Quelltext-Suche, Erstellen von
    Tasks)
   Erstellen von LaunchManagern
   Prototyping von PlugIns
Basiert auf dem Eclipse-Job API



                                              Copyright 2006 Thorsten Kamann
Zus a mme n-
 Fa s s ung

           Copyright 2006 Thorsten Kamann
Zusammenfassung
Groovy ist schon sehr weit fortgeschritten




                                              Copyright 2006 Thorsten Kamann
Zusammenfassung
Groovy ist schon sehr weit fortgeschritten
Es gibt eine grosse Anzahl an zusätzlichen Modulen, die die
 meisten Anwendungsfälle abdecken




                                               Copyright 2006 Thorsten Kamann
Zusammenfassung
Groovy ist schon sehr weit fortgeschritten
Es gibt eine grosse Anzahl an zusätzlichen Modulen, die die
 meisten Anwendungsfälle abdecken
Durch die Standardisierung (JSR 241) ist auch eine gewisse
 Zukunftssicherheit gewährleistet




                                               Copyright 2006 Thorsten Kamann
Zusammenfassung
Groovy ist schon sehr weit fortgeschritten
Es gibt eine grosse Anzahl an zusätzlichen Modulen, die die
 meisten Anwendungsfälle abdecken
Durch die Standardisierung (JSR 241) ist auch eine gewisse
 Zukunftssicherheit gewährleistet
Groovy ist leicht erlernbar, da sehr viele Ähnlichkeiten mit
 der Java-Syntax bestehen




                                                Copyright 2006 Thorsten Kamann
Zusammenfassung
Groovy ist schon sehr weit fortgeschritten
Es gibt eine grosse Anzahl an zusätzlichen Modulen, die die
 meisten Anwendungsfälle abdecken
Durch die Standardisierung (JSR 241) ist auch eine gewisse
 Zukunftssicherheit gewährleistet
Groovy ist leicht erlernbar, da sehr viele Ähnlichkeiten mit
 der Java-Syntax bestehen
Neben dem leistungsfähigen API von Groovy steht die
 gesamte API von Java zur Verfügung


                                                Copyright 2006 Thorsten Kamann
Links

        Copyright 2006 Thorsten Kamann
Links
Groovy Homepage
 http://groovy.codehaus.org/
JSR 241
 http://www.jcp.org/en/jsr/detail?id=241
Grails
 http://grails.codehaus.org/
Artikel über Groovy
 http://groovy.codehaus.org/Articles
Webseite des Autors
 http://www.planetes.de/thorsten-kamann

                                   Copyright 2006 Thorsten Kamann

More Related Content

Viewers also liked

La evaluacion al servicio del que aprende
La evaluacion al servicio del que aprendeLa evaluacion al servicio del que aprende
La evaluacion al servicio del que aprendeemerk
 
Angie paola vidal santana
Angie paola vidal santanaAngie paola vidal santana
Angie paola vidal santanaangieesantaana
 
9 reloj con movimiento
9 reloj con movimiento9 reloj con movimiento
9 reloj con movimientoCindy Gonzalez
 
Los 5 *Exquisitos* Beneficios de Ganar Dinero Como Afiliado
Los 5 *Exquisitos* Beneficios de Ganar Dinero Como AfiliadoLos 5 *Exquisitos* Beneficios de Ganar Dinero Como Afiliado
Los 5 *Exquisitos* Beneficios de Ganar Dinero Como AfiliadoRecursosDeAfiliados.net
 
Catalogo Nicanatural 2013
Catalogo Nicanatural 2013Catalogo Nicanatural 2013
Catalogo Nicanatural 2013nicanatural
 
Escuela de Comercio y Administración Facultad de Filosofía Grecia Herrera
Escuela de Comercio y Administración Facultad de Filosofía Grecia HerreraEscuela de Comercio y Administración Facultad de Filosofía Grecia Herrera
Escuela de Comercio y Administración Facultad de Filosofía Grecia Herreragremari
 
Actitud emprendedora
Actitud emprendedoraActitud emprendedora
Actitud emprendedoracamiloeg16
 
Escuela de Idiomas Cristian Salazar Quiroz El Tabaquismo
Escuela de Idiomas Cristian Salazar Quiroz El TabaquismoEscuela de Idiomas Cristian Salazar Quiroz El Tabaquismo
Escuela de Idiomas Cristian Salazar Quiroz El TabaquismoCristianSalazarIdiomas
 
Schulungsunterlage Vertreter: Idealer Ablauf mit Buchhändlern
Schulungsunterlage Vertreter: Idealer Ablauf mit BuchhändlernSchulungsunterlage Vertreter: Idealer Ablauf mit Buchhändlern
Schulungsunterlage Vertreter: Idealer Ablauf mit Buchhändlernedelweiss_Deutschland
 
Caracteristicas quimica 7
Caracteristicas quimica 7Caracteristicas quimica 7
Caracteristicas quimica 7Abraham Rayon
 

Viewers also liked (19)

La evaluacion al servicio del que aprende
La evaluacion al servicio del que aprendeLa evaluacion al servicio del que aprende
La evaluacion al servicio del que aprende
 
Angie paola vidal santana
Angie paola vidal santanaAngie paola vidal santana
Angie paola vidal santana
 
Instalacion de sql server 2008
Instalacion de sql server 2008Instalacion de sql server 2008
Instalacion de sql server 2008
 
Luciernagas
LuciernagasLuciernagas
Luciernagas
 
Twitter mariana
Twitter marianaTwitter mariana
Twitter mariana
 
9 reloj con movimiento
9 reloj con movimiento9 reloj con movimiento
9 reloj con movimiento
 
Los 5 *Exquisitos* Beneficios de Ganar Dinero Como Afiliado
Los 5 *Exquisitos* Beneficios de Ganar Dinero Como AfiliadoLos 5 *Exquisitos* Beneficios de Ganar Dinero Como Afiliado
Los 5 *Exquisitos* Beneficios de Ganar Dinero Como Afiliado
 
Nuevos productos financieros!
Nuevos productos financieros!Nuevos productos financieros!
Nuevos productos financieros!
 
Catalogo Nicanatural 2013
Catalogo Nicanatural 2013Catalogo Nicanatural 2013
Catalogo Nicanatural 2013
 
Escuela de Comercio y Administración Facultad de Filosofía Grecia Herrera
Escuela de Comercio y Administración Facultad de Filosofía Grecia HerreraEscuela de Comercio y Administración Facultad de Filosofía Grecia Herrera
Escuela de Comercio y Administración Facultad de Filosofía Grecia Herrera
 
Ecuaciones quimicas
Ecuaciones quimicasEcuaciones quimicas
Ecuaciones quimicas
 
Actitud emprendedora
Actitud emprendedoraActitud emprendedora
Actitud emprendedora
 
Libelulas jenny
Libelulas jennyLibelulas jenny
Libelulas jenny
 
Escuela de Idiomas Cristian Salazar Quiroz El Tabaquismo
Escuela de Idiomas Cristian Salazar Quiroz El TabaquismoEscuela de Idiomas Cristian Salazar Quiroz El Tabaquismo
Escuela de Idiomas Cristian Salazar Quiroz El Tabaquismo
 
Planeta TERRA MMM
Planeta TERRA MMMPlaneta TERRA MMM
Planeta TERRA MMM
 
Schulungsunterlage Vertreter: Idealer Ablauf mit Buchhändlern
Schulungsunterlage Vertreter: Idealer Ablauf mit BuchhändlernSchulungsunterlage Vertreter: Idealer Ablauf mit Buchhändlern
Schulungsunterlage Vertreter: Idealer Ablauf mit Buchhändlern
 
Normas apa
Normas apaNormas apa
Normas apa
 
Tipos de planos
Tipos de planosTipos de planos
Tipos de planos
 
Caracteristicas quimica 7
Caracteristicas quimica 7Caracteristicas quimica 7
Caracteristicas quimica 7
 

Similar to Groovy - Rocks or Not?

Microservices mit Java und Go im Vergleich
Microservices mit Java und Go im VergleichMicroservices mit Java und Go im Vergleich
Microservices mit Java und Go im VergleichQAware GmbH
 
Let’s groove with Groovy
Let’s groove with GroovyLet’s groove with Groovy
Let’s groove with GroovyThorsten Kamann
 
May the forge be with you
May the forge be with youMay the forge be with you
May the forge be with youSandro Sonntag
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 
Tech Talk: Groovy
Tech Talk: GroovyTech Talk: Groovy
Tech Talk: Groovymwie
 
Der WordPress Wolpertinger
Der WordPress WolpertingerDer WordPress Wolpertinger
Der WordPress Wolpertingerfrankstaude
 
Jalimo Slides Linuxtag2007
Jalimo Slides Linuxtag2007Jalimo Slides Linuxtag2007
Jalimo Slides Linuxtag2007smancke
 

Similar to Groovy - Rocks or Not? (8)

Microservices mit Java und Go im Vergleich
Microservices mit Java und Go im VergleichMicroservices mit Java und Go im Vergleich
Microservices mit Java und Go im Vergleich
 
Let’s groove with Groovy
Let’s groove with GroovyLet’s groove with Groovy
Let’s groove with Groovy
 
May the forge be with you
May the forge be with youMay the forge be with you
May the forge be with you
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
Tech Talk: Groovy
Tech Talk: GroovyTech Talk: Groovy
Tech Talk: Groovy
 
Der WordPress Wolpertinger
Der WordPress WolpertingerDer WordPress Wolpertinger
Der WordPress Wolpertinger
 
Jalimo Slides Linuxtag2007
Jalimo Slides Linuxtag2007Jalimo Slides Linuxtag2007
Jalimo Slides Linuxtag2007
 
JRuby
JRubyJRuby
JRuby
 

More from Thorsten Kamann

Scrum and distributed teams
Scrum and distributed teamsScrum and distributed teams
Scrum and distributed teamsThorsten Kamann
 
Effizente Entwicklung für verteilte Projekte
Effizente Entwicklung für verteilte ProjekteEffizente Entwicklung für verteilte Projekte
Effizente Entwicklung für verteilte ProjekteThorsten Kamann
 
Spring 3 - Der dritte Frühling
Spring 3 - Der dritte FrühlingSpring 3 - Der dritte Frühling
Spring 3 - Der dritte FrühlingThorsten Kamann
 
Spring 3 - An Introduction
Spring 3 - An IntroductionSpring 3 - An Introduction
Spring 3 - An IntroductionThorsten Kamann
 
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and MavenWebtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and MavenThorsten Kamann
 
My Daily Spring - Best Practices with the Springframework
My Daily Spring - Best Practices with the SpringframeworkMy Daily Spring - Best Practices with the Springframework
My Daily Spring - Best Practices with the SpringframeworkThorsten Kamann
 
Vortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development EnvironmentsVortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development EnvironmentsThorsten Kamann
 
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und GroovyLeichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und GroovyThorsten Kamann
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Thorsten Kamann
 
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und GroovyLeichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und GroovyThorsten Kamann
 

More from Thorsten Kamann (13)

Scrum on rails
Scrum on railsScrum on rails
Scrum on rails
 
Scrum and distributed teams
Scrum and distributed teamsScrum and distributed teams
Scrum and distributed teams
 
Effizente Entwicklung für verteilte Projekte
Effizente Entwicklung für verteilte ProjekteEffizente Entwicklung für verteilte Projekte
Effizente Entwicklung für verteilte Projekte
 
Spring 3 - Der dritte Frühling
Spring 3 - Der dritte FrühlingSpring 3 - Der dritte Frühling
Spring 3 - Der dritte Frühling
 
Spring 3 - An Introduction
Spring 3 - An IntroductionSpring 3 - An Introduction
Spring 3 - An Introduction
 
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and MavenWebtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
Webtests Reloaded - Webtest with Selenium, TestNG, Groovy and Maven
 
My Daily Spring - Best Practices with the Springframework
My Daily Spring - Best Practices with the SpringframeworkMy Daily Spring - Best Practices with the Springframework
My Daily Spring - Best Practices with the Springframework
 
Vortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development EnvironmentsVortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development Environments
 
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und GroovyLeichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?
 
Spring 2.0
Spring 2.0Spring 2.0
Spring 2.0
 
Spring 2.0
Spring 2.0Spring 2.0
Spring 2.0
 
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und GroovyLeichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
Leichtgewichtige Architekturen mit Spring, JPA, Maven und Groovy
 

Groovy - Rocks or Not?

  • 1. von und mit Thorsten Kamann Copyright 2006 Thorsten Kamann
  • 2. Einleitung Getting Started Embedding Die Syntax Groovy Highlights XML-Processing, Markup, GPath, Groovy Beans, RegEX... Module Grails, Gorm, Scriptom... Testing IDE-Support Zusammenfassung/Links Copyright 2006 Thorsten Kamann
  • 3. Einle itung Copyright 2006 Thorsten Kamann
  • 4. Was ist Scripting? Skriptsprachen sind Programmiersprachen, die vor allem für kleine, überschaubare Programmieraufgaben gedacht sind Copyright 2006 Thorsten Kamann
  • 5. Was ist Scripting? Skriptsprachen sind Programmiersprachen, die vor allem für kleine, überschaubare Programmieraufgaben gedacht sind Kein Deklarationszwang für Variablen Copyright 2006 Thorsten Kamann
  • 6. Was ist Scripting? Skriptsprachen sind Programmiersprachen, die vor allem für kleine, überschaubare Programmieraufgaben gedacht sind Kein Deklarationszwang für Variablen automatische Speicherverwaltung Copyright 2006 Thorsten Kamann
  • 7. Was ist Scripting? Skriptsprachen sind Programmiersprachen, die vor allem für kleine, überschaubare Programmieraufgaben gedacht sind Kein Deklarationszwang für Variablen automatische Speicherverwaltung werden in der Regel ohne getrennte Übersetzungsphase ausgeführt (d. h. sie werden „interpretiert“) Copyright 2006 Thorsten Kamann
  • 8. Was ist Groovy? Eine dynamische Sprache Copyright 2006 Thorsten Kamann
  • 9. Was ist Groovy? Eine dynamische Sprache Inspiriert von Ruby, Python, Smalltalk Copyright 2006 Thorsten Kamann
  • 10. Was ist Groovy? Eine dynamische Sprache Inspiriert von Ruby, Python, Smalltalk Entwickelt für die Java-Plattform Copyright 2006 Thorsten Kamann
  • 11. Was ist Groovy? Eine dynamische Sprache Inspiriert von Ruby, Python, Smalltalk Entwickelt für die Java-Plattform Um sie Java-Entwicklern zugänglich zu machen Copyright 2006 Thorsten Kamann
  • 12. Was ist Groovy? Eine dynamische Sprache Inspiriert von Ruby, Python, Smalltalk Entwickelt für die Java-Plattform Um sie Java-Entwicklern zugänglich zu machen Um möglichst viel der Java-Syntax wieder verwenden zu können Copyright 2006 Thorsten Kamann
  • 13. Was ist Groovy? Eine dynamische Sprache Inspiriert von Ruby, Python, Smalltalk Entwickelt für die Java-Plattform Um sie Java-Entwicklern zugänglich zu machen Um möglichst viel der Java-Syntax wieder verwenden zu können Um eine einfache Anbindung zu Enterprise-Systemen anzubieten Copyright 2006 Thorsten Kamann
  • 14. Was ist Groovy? Eine dynamische Sprache Inspiriert von Ruby, Python, Smalltalk Entwickelt für die Java-Plattform Um sie Java-Entwicklern zugänglich zu machen Um möglichst viel der Java-Syntax wieder verwenden zu können Um eine einfache Anbindung zu Enterprise-Systemen anzubieten Das Ergebnis des JSR 241: The Groovy Programming Language Copyright 2006 Thorsten Kamann
  • 15. Ge tting S ta rte d Copyright 2006 Thorsten Kamann
  • 16. Getting Started Download des aktuellen Release von http://groovy.codehaus.org Copyright 2006 Thorsten Kamann
  • 17. Getting Started Download des aktuellen Release von http://groovy.codehaus.org Entpacken des Archivs Copyright 2006 Thorsten Kamann
  • 18. Getting Started Download des aktuellen Release von http://groovy.codehaus.org Entpacken des Archivs Setzen der Umgebungsvariable GROOVY_HOME Copyright 2006 Thorsten Kamann
  • 19. Getting Started Download des aktuellen Release von http://groovy.codehaus.org Entpacken des Archivs Setzen der Umgebungsvariable GROOVY_HOME Hinzufügen von %GROOVY_HOME%bin zur PATH-Variable Copyright 2006 Thorsten Kamann
  • 20. Getting Started Download des aktuellen Release von http://groovy.codehaus.org Entpacken des Archivs Setzen der Umgebungsvariable GROOVY_HOME Hinzufügen von %GROOVY_HOME%bin zur PATH-Variable Starten von groovyConsole und Eingabe von println „Hallo Welt“ mit anschliessendem STRG-R Copyright 2006 Thorsten Kamann
  • 21. Getting Started Copyright 2006 Thorsten Kamann
  • 22. Embe dding Copyright 2006 Thorsten Kamann
  • 23. Embedding Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werden Copyright 2006 Thorsten Kamann
  • 24. Embedding Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werden Copyright 2006 Thorsten Kamann
  • 25. Embedding Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werden Copyright 2006 Thorsten Kamann
  • 26. Embedding Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werden Copyright 2006 Thorsten Kamann
  • 27. Embedding Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werden Copyright 2006 Thorsten Kamann
  • 28. Embedding mit dem BSF Ist ein allgemeine Möglichkeit, jede beliebige Scriptsprache in Java-Anwendungen einzubinden Copyright 2006 Thorsten Kamann
  • 29. Embedding mit dem BSF Ist ein allgemeine Möglichkeit, jede beliebige Scriptsprache in Java-Anwendungen einzubinden Groovy bietet aber leichtgewichtigere und leistungsfähigere Möglichkeiten der Einbindung Copyright 2006 Thorsten Kamann
  • 30. Embedding mit GroovyShell GroovyShell bietet die Möglichkeit des Ein- und Auslesens von Variablen mittels des Binding-Objekts Copyright 2006 Thorsten Kamann
  • 31. Embedding mit GroovyShell GroovyShell bietet die Möglichkeit des Ein- und Auslesens von Variablen mittels des Binding-Objekts Binding binding = new Binding(); binding.setVariable(quot;fooquot;, new Integer(2)); GroovyShell shell = new GroovyShell(binding); Object value = shell.evaluate( quot;println 'Hello World!'; x = 123; return foo * 10quot;); assert value.equals(new Integer(20)); assert binding.getVariable(quot;xquot;).equals(new Integer(123)); Copyright 2006 Thorsten Kamann
  • 32. Embedding mit GroovyClassLoader Der GroovyClassLoader lädt Groovy-Klassen dynamisch und ermöglicht den direkten Zugriff auf deren Methoden Copyright 2006 Thorsten Kamann
  • 33. Embedding mit GroovyClassLoader Der GroovyClassLoader lädt Groovy-Klassen dynamisch und ermöglicht den direkten Zugriff auf deren Methoden ClassLoader parent = getClass().getClassLoader(); GroovyClassLoader loader = new GroovyClassLoader(parent); Class groovyClass = loader.parseClass( new File(quot;script.groovyquot;)); GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance(); Object[] args = {}; groovyObject.invokeMethod(quot;runquot;, args); Copyright 2006 Thorsten Kamann
  • 34. Embedding mit GroovyClassLoader Der GroovyClassLoader lädt Groovy-Klassen dynamisch und ermöglicht den direkten Zugriff auf deren Methoden GroovyClassLoader gcl = new GroovyClassLoader(); Class clazz = gcl.parseClass( myStringwithGroovyClassSource, quot;SomeName.groovyquot;); Object aScript = clazz.newInstance(); MyInterface myObject = (MyInterface) aScript; myObject.interfaceMethod(); Copyright 2006 Thorsten Kamann
  • 35. Embedding mit GroovyScriptEngine Dies ist die leistungsfähige Möglichkeit um Groovy-Skripte auszuführen. Das Binding-Objekt befüllt dabei die Skripte mit Daten Copyright 2006 Thorsten Kamann
  • 36. Embedding mit GroovyScriptEngine Dies ist die leistungsfähige Möglichkeit um Groovy-Skripte auszuführen. Das Binding-Objekt befüllt dabei die Skripte mit Daten String[] roots = new String[] {quot;/my/groovy/script/pathquot;}; GroovyScriptEngine gse = new GroovyScriptEngine(roots); Binding binding = new Binding(); binding.setVariable(quot;inputquot;, quot;worldquot;); gse.run(quot;hello.groovyquot;, binding); System.out.println(binding.getVariable(quot;outputquot;)); Copyright 2006 Thorsten Kamann
  • 37. Embedding mit Ant ANT-Task, mit dem eine beliebige Anzahl von Groovy- Skripten ausgeführt werden können Copyright 2006 Thorsten Kamann
  • 38. Embedding mit Ant ANT-Task, mit dem eine beliebige Anzahl von Groovy- Skripten ausgeführt werden können GroovyC-Task, der Groovy-Skripte (Klassen) zu Java Bytecode kompiliert Copyright 2006 Thorsten Kamann
  • 39. Embedding mit Ant ANT-Task, mit dem eine beliebige Anzahl von Groovy- Skripten ausgeführt werden können GroovyC-Task, der Groovy-Skripte (Klassen) zu Java Bytecode kompiliert Erstellen von Ant-Tasks mit Groovy und dem Markup-Builder Copyright 2006 Thorsten Kamann
  • 40. Embedding mit Ant ANT-Task, mit dem eine beliebige Anzahl von Groovy- Skripten ausgeführt werden können GroovyC-Task, der Groovy-Skripte (Klassen) zu Java Bytecode kompiliert Erstellen von Ant-Tasks mit Groovy und dem Markup-Builder Erzeugen von Ant-Skripten Copyright 2006 Thorsten Kamann
  • 41. Embedding mit Maven 2 Maven 2 wird offiziell mittels des Maven2-Ant-Plugins unterstützt Copyright 2006 Thorsten Kamann
  • 42. Embedding mit Maven 2 Maven 2 wird offiziell mittels des Maven2-Ant-Plugins unterstützt Es existiert aber ein Groovy-Maven-Plugin, mit dem beliebige Groovy-Skripte ausgeführt werden können Copyright 2006 Thorsten Kamann
  • 43. Embedding mit Maven 2 Maven 2 wird offiziell mittels des Maven2-Ant-Plugins unterstützt Es existiert aber ein Groovy-Maven-Plugin, mit dem beliebige Groovy-Skripte ausgeführt werden können In der Sandbox von http://mojo.codehaus.org/ existieren bereits Maven-Tools für direkte Unterstützung von Groovy Copyright 2006 Thorsten Kamann
  • 44. Embedding mit Maven 2 Maven 2 wird offiziell mittels des Maven2-Ant-Plugins unterstützt Es existiert aber ein Groovy-Maven-Plugin, mit dem beliebige Groovy-Skripte ausgeführt werden können In der Sandbox von http://mojo.codehaus.org/ existieren bereits Maven-Tools für direkte Unterstützung von Groovy Groovy-Compiler Copyright 2006 Thorsten Kamann
  • 45. Embedding mit Maven 2 Maven 2 wird offiziell mittels des Maven2-Ant-Plugins unterstützt Es existiert aber ein Groovy-Maven-Plugin, mit dem beliebige Groovy-Skripte ausgeführt werden können In der Sandbox von http://mojo.codehaus.org/ existieren bereits Maven-Tools für direkte Unterstützung von Groovy Groovy-Compiler Groovy-Archetype Copyright 2006 Thorsten Kamann
  • 46. Embedding mit Maven 2 Maven 2 wird offiziell mittels des Maven2-Ant-Plugins unterstützt Es existiert aber ein Groovy-Maven-Plugin, mit dem beliebige Groovy-Skripte ausgeführt werden können In der Sandbox von http://mojo.codehaus.org/ existieren bereits Maven-Tools für direkte Unterstützung von Groovy Groovy-Compiler Groovy-Archetype Tools, um Maven-Plugins mit Groovy zu entwickeln Copyright 2006 Thorsten Kamann
  • 47. Embedding in Windows Groovy kann direkt von der Eingabeaufforderung oder über Start-->Ausführen mittels groovy script.groovy [arguments] ausgeführt werden Copyright 2006 Thorsten Kamann
  • 48. Embedding in Windows Groovy kann direkt von der Eingabeaufforderung oder über Start-->Ausführen mittels groovy script.groovy [arguments] ausgeführt werden Alternativ kann über den Dialog Ordneroptionen-->Dateitypen die Extension *.groovy an groovy.bat gebunden werden. Copyright 2006 Thorsten Kamann
  • 49. Embedding in Linux Groovy kann direkt von der Konsole mittels groovy script.groovy [arguments] ausgeführt werden Copyright 2006 Thorsten Kamann
  • 50. Embedding in Linux Groovy kann direkt von der Konsole mittels groovy script.groovy [arguments] ausgeführt werden Alternativ kann in die 1. Zeile eines Groovy-Skripts #!/usr/bin/env groovy eingefügt werden. So kann mit chmod +x script.groovy ./script.groovy das Skript ausgeführt werden Copyright 2006 Thorsten Kamann
  • 51. Die S ynta x Copyright 2006 Thorsten Kamann
  • 52. Die Syntax: Closures Closures sind anonyme Codeblöcke Copyright 2006 Thorsten Kamann
  • 53. Die Syntax: Closures Closures sind anonyme Codeblöcke geben einen Wert zurück Copyright 2006 Thorsten Kamann
  • 54. Die Syntax: Closures Closures sind anonyme Codeblöcke geben einen Wert zurück referenzieren und verwenden Variablen Copyright 2006 Thorsten Kamann
  • 55. Die Syntax: Closures Closures sind anonyme Codeblöcke geben einen Wert zurück referenzieren und verwenden Variablen werden oft wie Anonyme Inner Classes in Java benutzt Copyright 2006 Thorsten Kamann
  • 56. Die Syntax: Closures Closures sind anonyme Codeblöcke geben einen Wert zurück referenzieren und verwenden Variablen werden oft wie Anonyme Inner Classes in Java benutzt werden erst ausgeführt, wenn call() auf der Closure aufgerufen wird Copyright 2006 Thorsten Kamann
  • 57. Die Syntax: Closures Closures sind anonyme Codeblöcke geben einen Wert zurück referenzieren und verwenden Variablen werden oft wie Anonyme Inner Classes in Java benutzt werden erst ausgeführt, wenn call() auf der Closure aufgerufen wird können an eine Variable gebunden werden Copyright 2006 Thorsten Kamann
  • 58. Die Syntax: Closures (Beispiele) Beispiele: { item++ } Copyright 2006 Thorsten Kamann
  • 59. Die Syntax: Closures (Beispiele) Beispiele: { name -> println name } Copyright 2006 Thorsten Kamann
  • 60. Die Syntax: Closures (Beispiele) Beispiele: {String x, int y -> println quot;hey $x the value is $yquot;} Copyright 2006 Thorsten Kamann
  • 61. Die Syntax: Closures (Beispiele) Beispiele: { reader -> while (true) { line = reader.readLine() } } Copyright 2006 Thorsten Kamann
  • 62. Die Syntax – Collections (Listen) Listen erzeugen immer eine Instanz von java.util.List Copyright 2006 Thorsten Kamann
  • 63. Die Syntax – Collections (Listen) Listen erzeugen immer eine Instanz von java.util.List def list = [5, 6, 7, 8] assert list.get(2) == 7 assert list instanceof java.util.List Copyright 2006 Thorsten Kamann
  • 64. Die Syntax – Collections (Listen) Listen erzeugen immer eine Instanz von java.util.List def emptyList = [] assert emptyList.size() == 0 emptyList.add(5) assert emptyList.size() == 1 Copyright 2006 Thorsten Kamann
  • 65. Die Syntax – Collections (Ranges) Ranges erzeugen Listen mit sequentiellen Werten Copyright 2006 Thorsten Kamann
  • 66. Die Syntax – Collections (Ranges) Ranges erzeugen Listen mit sequentiellen Werten Es gibt inklusive und exklusive Ranges Copyright 2006 Thorsten Kamann
  • 67. Die Syntax – Collections (Ranges) Ranges erzeugen Listen mit sequentiellen Werten Es gibt inklusive und exklusive Ranges def range = 5..8 assert range.contains(6) assert range.contains(8) Copyright 2006 Thorsten Kamann
  • 68. Die Syntax – Collections (Ranges) Ranges erzeugen Listen mit sequentiellen Werten Es gibt inklusive und exklusive Ranges def range = 5..<8 assert range.contains(6) assert !range.contains(8) Copyright 2006 Thorsten Kamann
  • 69. Die Syntax: Collections (Maps) Maps basieren auf einer Implementierung von java.util.Map Copyright 2006 Thorsten Kamann
  • 70. Die Syntax: Collections (Maps) Maps basieren auf einer Implementierung von java.util.Map def map = [name:quot;Gromitquot;, likes:quot;cheesequot;, id:1234] assert map.get(quot;namequot;) == quot;Gromitquot; assert map[quot;namequot;] == quot;Gromitquot; Copyright 2006 Thorsten Kamann
  • 71. Die Syntax: Collections (Maps) Maps basieren auf einer Implementierung von java.util.Map def emptyMap = [:] emptyMap.foo = 5 assert emptyMap.foo == 5 Copyright 2006 Thorsten Kamann
  • 72. Die Syntax: Collections (Expando) Expandos ermöglichen die Erzeugung von dynamischen Objekten Copyright 2006 Thorsten Kamann
  • 73. Die Syntax: Collections (Expando) Expandos ermöglichen die Erzeugung von dynamischen Objekten def player = new Expando() player.name = quot;Peterquot; player.greeting = { quot;Hello, my name is $player.namequot; } assert player.greeting() == quot;Hello, my name is Peterquot; Copyright 2006 Thorsten Kamann
  • 74. Die Syntax: Collections (each) Iterator mittels einer Closure Copyright 2006 Thorsten Kamann
  • 75. Die Syntax: Collections (each) Iterator mittels einer Closure [1, 2, 3].each { item -> print quot;${item}-quot; } Copyright 2006 Thorsten Kamann
  • 76. Die Syntax: Collections (collect) Erzeugt eine neue Liste mit dem Ergebnis der Closure Copyright 2006 Thorsten Kamann
  • 77. Die Syntax: Collections (collect) Erzeugt eine neue Liste mit dem Ergebnis der Closure def value = [1, 2, 3].collect { it * 2 } assert value == [2, 4, 6] Copyright 2006 Thorsten Kamann
  • 78. Die Syntax: Collections (find) Gibt das erste Element einer Collection zurück, welches der Expression in der Closure entspricht Copyright 2006 Thorsten Kamann
  • 79. Die Syntax: Collections (find) Gibt das erste Element einer Collection zurück, welches der Expression in der Closure entspricht def value = [1, 2, 3].find { it > 1 } assert value == 2 Copyright 2006 Thorsten Kamann
  • 80. Die Syntax: Collections (findAll) Gibt eine Collection mit allen Elementen, die denen der Expression in der Closure entsprechen, zurück Copyright 2006 Thorsten Kamann
  • 81. Die Syntax: Collections (findAll) Gibt eine Collection mit allen Elementen, die denen der Expression in der Closure entsprechen, zurück def value = [1, 2, 3].findAll { it > 1 } assert value == [2, 3] Copyright 2006 Thorsten Kamann
  • 82. Die Syntax: Collections (inject) Fügt einen zusätzlichen Wert zu einer Iteration hinzu Copyright 2006 Thorsten Kamann
  • 83. Die Syntax: Collections (inject) Fügt einen zusätzlichen Wert zu einer Iteration hinzu def value = [quot;Javaquot;, quot;C#quot;, quot;C++quot;, quot;VBquot;] .inject(quot;Languages: quot;){str, item -> str+quot; quot;+item} assert value == „Languages: Java C# C++ VB“ Copyright 2006 Thorsten Kamann
  • 84. Die Syntax: Collections (every) Gibt true zurück, wenn alle Werte in der Collection der Expression in der Closure entsprechen Copyright 2006 Thorsten Kamann
  • 85. Die Syntax: Collections (every) Gibt true zurück, wenn alle Werte in der Collection der Expression in der Closure entsprechen def value = [1, 2, 3].every { it < 5 } assert value Copyright 2006 Thorsten Kamann
  • 86. Die Syntax: Collections (every) Gibt true zurück, wenn alle Werte in der Collection der Expression in der Closure entsprechen def value = [1, 2, 3].every { item -> item < 3 } assert !value Copyright 2006 Thorsten Kamann
  • 87. Die Syntax: Collections (any) Gibt true zurück, wenn mindestens ein Wert in der Collection der Expression in der Closure entspricht Copyright 2006 Thorsten Kamann
  • 88. Die Syntax: Collections (any) Gibt true zurück, wenn mindestens ein Wert in der Collection der Expression in der Closure entspricht def value = [1, 2, 3].any { item -> item > 3 } assert value == false Copyright 2006 Thorsten Kamann
  • 89. Die Syntax: Collections (any) Gibt true zurück, wenn mindestens ein Wert in der Collection der Expression in der Closure entspricht def value = [1, 2, 3].any { it > 2 } assert value Copyright 2006 Thorsten Kamann
  • 90. Die Syntax: Collections (max/min) Gibt den maximalen Wert einer Collection zurück. Die Objekte in dieser Collection müssen Comparable sein Copyright 2006 Thorsten Kamann
  • 91. Die Syntax: Collections (max/min) Gibt den maximalen Wert einer Collection zurück. Die Objekte in dieser Collection müssen Comparable sein def value = [9, 4, 2, 10, 5].max() assert value == 10 Copyright 2006 Thorsten Kamann
  • 92. Die Syntax: Collections (max/min) Gibt den maximalen Wert einer Collection zurück. Die Objekte in dieser Collection müssen Comparable sein def value = [9, 4, 2, 10, 5].min() assert value == 2 Copyright 2006 Thorsten Kamann
  • 93. Die Syntax: Collections (max/min) Gibt den maximalen Wert einer Collection zurück. Die Objekte in dieser Collection müssen Comparable sein def value = ['x', 'y', 'a', 'z'].min() assert value == 'a' Copyright 2006 Thorsten Kamann
  • 94. Die Syntax: Collections (join) Fügt einen String zu den Werten einer Collection hinzu Copyright 2006 Thorsten Kamann
  • 95. Die Syntax: Collections (join) Fügt einen String zu den Werten einer Collection hinzu def value = [1, 2, 3].join('-') assert value == '1-2-3' Copyright 2006 Thorsten Kamann
  • 96. Die Syntax: Collections (Beispiele) Ranges verwenden, um Teile von Listen zu extrahieren def list = 100..200 def sub = list[1, 3, 20..25, 33] assert sub == [101, 103, 120, 121, 122, 123, 124, 125, 133] Copyright 2006 Thorsten Kamann
  • 97. Die Syntax: Collections (Beispiele) Rückwärts gerichtete Ranges def text = quot;nice cheese gromit!quot; def name = text[3..1] assert name == quot;eciquot; Copyright 2006 Thorsten Kamann
  • 98. Die Syntax: Collections (Beispiele) Negative Ranges – Index beginnt beim letzten Zeichen def text = quot;nice cheese gromit!quot; def x = text[-1] assert x == quot;!quot; Copyright 2006 Thorsten Kamann
  • 99. Die Syntax: Collections (Beispiele) Negative Ranges – Index beginnt beim letzten Zeichen def text = quot;nice cheese gromit!quot; def name = text[-7..-2] assert name == quot;gromitquot; Copyright 2006 Thorsten Kamann
  • 100. Die Syntax: Looping (while) Groovy unterstützt das aus Java bekannte while{..} Konstrukt Copyright 2006 Thorsten Kamann
  • 101. Die Syntax: Looping (while) Groovy unterstützt das aus Java bekannte while{..} Konstrukt def x = 0 def y = 5 while ( y-- > 0 ) { x++ } assert x == 5 Copyright 2006 Thorsten Kamann
  • 102. Die Syntax: Looping (for) Die for-Schleife ist einfacher und arbeitet mit Arrays und Collections Copyright 2006 Thorsten Kamann
  • 103. Die Syntax: Looping (for) Die for-Schleife ist einfacher und arbeitet mit Arrays und Collections def x = 0 for ( i in 0..9 ) { x += i } assert x == 45 Copyright 2006 Thorsten Kamann
  • 104. Die Syntax: Looping (for) Die for-Schleife ist einfacher und arbeitet mit Arrays und Collections x = 0 for ( i in [0, 1, 2, 3, 4] ) { x += i } assert x == 10 Copyright 2006 Thorsten Kamann
  • 105. Die Syntax: Looping (each) each ist eine Closure. Dadurch ist eine sehr kompakte Abarbeitung von Schleifen möglich Copyright 2006 Thorsten Kamann
  • 106. Die Syntax: Looping (each) each ist eine Closure. Dadurch ist eine sehr kompakte Abarbeitung von Schleifen möglich def stringList = [quot;javaquot;, quot;pythonquot;, quot;rubyquot;, quot;c#quot;, quot;groovyquot;] stringList.each() { print quot; ${it}quot; }; // java python ruby c# groovy Copyright 2006 Thorsten Kamann
  • 107. Die Syntax: Looping (each) each ist eine Closure. Dadurch ist eine sehr kompakte Abarbeitung von Schleifen möglich def stringMap = [quot;Suquot; : quot;Sundayquot;, quot;Moquot; : quot;Mondayquot;] stringMap.each() { key, value -> println quot;${key} == ${value}quot; }; // Su == Sunday // Mo == Monday Copyright 2006 Thorsten Kamann
  • 108. Die Syntax: Looping (eachWithIndex) Unterscheidet sich vom Looping mit each dadurch, dass ein Index mitgeführt wird Copyright 2006 Thorsten Kamann
  • 109. Die Syntax: Looping (eachWithIndex) Unterscheidet sich vom Looping mit each dadurch, dass ein Index mitgeführt wird def stringList = [quot;javaquot;, quot;pythonquot;, quot;rubyquot;, quot;c#quot;, quot;groovyquot;] stringList.eachWithIndex() { obj, i -> println quot; ${i}: ${obj}quot; }; // 0: java 1: python 2: ruby 3: c# 4: groovy Copyright 2006 Thorsten Kamann
  • 110. Die Syntax: Looping (eachWithIndex) Unterscheidet sich vom Looping mit each dadurch, dass ein Index mitgeführt wird def stringMap = [quot;Suquot; : quot;Sundayquot;, quot;Moquot; : quot;Mondayquot;] stringMap.eachWithIndex() { obj, i -> println quot; ${i}: ${obj}quot; }; // 0: Su=Sunday // 1: Mo=Monday Copyright 2006 Thorsten Kamann
  • 111. Die Syntax: Conditions (if...else) Groovy unterstützt die aus Java bekannten if...else Konstrukte Copyright 2006 Thorsten Kamann
  • 112. Die Syntax: Conditions (if...else) Groovy unterstützt die aus Java bekannten if...else Konstrukte def x = (y > 1) ? quot;workedquot; : quot;failedquot; if (x){ ... }else{ ... } Copyright 2006 Thorsten Kamann
  • 113. Die Syntax: Conditions (switch) Das switch-Statement unterstützt Klassenvergleiche, Inhalte von Collections (Lists, Ranges), reguläre Ausdrücke und equals Vergleiche Copyright 2006 Thorsten Kamann
  • 114. Die Syntax: Conditions (switch) Das switch-Statement unterstützt Klassenvergleiche, Inhalte von Collections (Lists, Ranges), reguläre Ausdrücke und equals Vergleiche switch ( x ) { case („foo“): ... case (20..30): ... case (Integer): ... default: ... } Copyright 2006 Thorsten Kamann
  • 115. XML Proc e s s ing Copyright 2006 Thorsten Kamann
  • 116. XML-Processing Groovy bietet reichhaltige Unterstützung für das XML- Processing Copyright 2006 Thorsten Kamann
  • 117. XML-Processing Copyright 2006 Thorsten Kamann
  • 118. XML-Processing Copyright 2006 Thorsten Kamann
  • 119. XML-Processing Copyright 2006 Thorsten Kamann
  • 120. XML-Processing Copyright 2006 Thorsten Kamann
  • 121. XML-Processing Groovy bietet reichhaltige Unterstützung für das XML- Processing Gpath (Xpath) Ausdrücke erlauben schnelle Navigation im XML-Dokument Copyright 2006 Thorsten Kamann
  • 122. XML-Processing Groovy bietet reichhaltige Unterstützung für das XML- Processing Gpath (Xpath) Ausdrücke erlauben schnelle Navigation im XML-Dokument DOMCategory stellt mächtige Navigationselemente zur Verfügung Copyright 2006 Thorsten Kamann
  • 123. XML-Processing DOM Klasse Methode Beschreibung Element .'child' .getElementsByTagName('child') Element .child .getElementsByTagName('child') Element .'*' .getElementsByTagName('*') Element .'@attr' .getAttribute('attr') Element .text() .firstChild.nodeValue Element .name() .nodeName Element .parent() .parentNode Element .children() .childNodes NodeList .size() .length NodeList .list() NodeList [n] .item(n) NodeList .text() .collect{ it.text() } NodeList .child .getElementsByTagName('child') Copyright 2006 Thorsten Kamann
  • 124. XML-Processing mit XML-Parser def records = new XmlParser().parseText(XmlExamples.CAR_RECORDS) def allRecords = records.car.size() assert allRecords == 3 def allNodes = records.depthFirst().size() assert allNodes == 10 Copyright 2006 Thorsten Kamann
  • 125. XML-Processing mit DOMCategory def reader = new StringReader(XmlExamples.CAR_RECORDS) def doc = DOMBuilder.parse(reader) def records = doc.documentElement use (DOMCategory) { assert 9 == records.'*'.size() def cars = records.'car' assert cars[0].parent() == records assert 3 == cars.size() } Copyright 2006 Thorsten Kamann
  • 126. Groovy Ma rkup Copyright 2006 Thorsten Kamann
  • 127. GroovyMarkup Groovy bietet Unterstützung für die Arbeit mit Markup- Languages: XML, HTML, SAX, W3C DOM, Ant Tasks, Swing UI's Copyright 2006 Thorsten Kamann
  • 128. GroovyMarkup Groovy bietet Unterstützung für die Arbeit mit Markup- Languages: XML, HTML, SAX, W3C DOM, Ant Tasks, Swing UI's Copyright 2006 Thorsten Kamann
  • 129. GroovyMarkup Groovy bietet Unterstützung für die Arbeit mit Markup- Languages: XML, HTML, SAX, W3C DOM, Ant Tasks, Swing UI's GroovyMarkup bietet eine einheitliche Schnittstelle Elemente sind Closures Attribute sind Maps Copyright 2006 Thorsten Kamann
  • 130. GroovyMarkup Groovy bietet Unterstützung für die Arbeit mit Markup- Languages: XML, HTML, SAX, W3C DOM, Ant Tasks, Swing UI's GroovyMarkup bietet eine einheitliche Schnittstelle Elemente sind Closures Attribute sind Maps Vollständige Integration anderer Groovy-Features Collections, Arrays, Conditions, ... Copyright 2006 Thorsten Kamann
  • 131. GroovyMarkup (Beispiel) builder = new MarkupBuilder(writer) builder.person() { name(first:quot;Meganquot;, last:quot;Smithquot;) { age(quot;33quot;) } } Copyright 2006 Thorsten Kamann
  • 132. GroovyMarkup (Beispiel) builder = new MarkupBuilder(writer) builder.person() { name(first:quot;Meganquot;, last:quot;Smithquot;) { age(quot;33quot;) } } <person> <name first=“Megan“ last=“Smith“> <age>33</age> </name> </person> Copyright 2006 Thorsten Kamann
  • 133. GPath Copyright 2006 Thorsten Kamann
  • 134. GPath Ist eine Expression-Language für Daten mit Baumstrukturen Copyright 2006 Thorsten Kamann
  • 135. GPath Ist eine Expression-Language für Daten mit Baumstrukturen Copyright 2006 Thorsten Kamann
  • 136. GPath Ist eine Expression-Language für Daten mit Baumstrukturen Implementierung für XML Copyright 2006 Thorsten Kamann
  • 137. GPath Ist eine Expression-Language für Daten mit Baumstrukturen Implementierung für XML Pfade zu einem Element können spezifiziert werden a.b.c findet alle <c>-Elemente innerhalb aller <b> innerhalb aller <a> Copyright 2006 Thorsten Kamann
  • 138. GPath Ist eine Expression-Language für Daten mit Baumstrukturen Implementierung für XML Pfade zu einem Element können spezifiziert werden a.b.c findet alle <c>-Elemente innerhalb aller <b> innerhalb aller <a> Auch Attribute können spezifiziert werden a[quot;@hrefquot;] -> findet alle href-Attribute in <a>- Elementen a.@href -> eine Alternativ-Syntax dazu Copyright 2006 Thorsten Kamann
  • 139. Groovy Be a ns Copyright 2006 Thorsten Kamann
  • 140. GroovyBeans GroovyBeans sind wie JavaBeans, nur einfacher zu definieren Copyright 2006 Thorsten Kamann
  • 141. GroovyBeans GroovyBeans sind wie JavaBeans, nur einfacher zu definieren Customer.groovy: class Customer { int id String name } Copyright 2006 Thorsten Kamann
  • 142. GroovyBeans GroovyBeans sind wie JavaBeans, nur einfacher zu definieren Customer.groovy: Customer.java: class Customer { public class Customer { int id private int id = 0; String name private String name; } public int getId(){ return id; } public void setId(int id){ this.id = id; } ... } Copyright 2006 Thorsten Kamann
  • 143. GroovyBeans Regeln für Properties: Wenn eine Property als private gekennzeichnet ist, wird ein Java Field benutzt, um diese Property zu repräsentieren Copyright 2006 Thorsten Kamann
  • 144. GroovyBeans Regeln für Properties: Wenn eine Property als public oder protected gekennzeichnet wird, werden Getter- und Setter- Methoden mit der gleichen Sichtbarkeit und ein Feld mit der Sichtbarkeit private auf Bytecode-Ebene erzeugt Copyright 2006 Thorsten Kamann
  • 145. GroovyBeans Regeln für Properties: Wenn keine Getter- oder Setter-Methoden für Properties mit der Sichtbarkeit public oder protected deklariert wurden, werden fehlende Getter- und Setter-Methoden mit der gleichen Sichtbarkeit automatisch auf Bytecode- Ebene erzeugt Copyright 2006 Thorsten Kamann
  • 146. GroovyBeans Regeln für Properties: Mit selbst deklarierten Getter- und Setter-Methoden können die von der Groovy-Runtime generierten Methoden überschrieben werden Copyright 2006 Thorsten Kamann
  • 147. Re gEx Copyright 2006 Thorsten Kamann
  • 148. Reguläre Ausdrücke Reguläre Ausdrücke werden von Groovy nativ unterstützt Copyright 2006 Thorsten Kamann
  • 149. Reguläre Ausdrücke Reguläre Ausdrücke werden von Groovy nativ unterstützt Die ~quot;...quot; Expression wird automatisch in ein Java-Pattern Objekt kompiliert Copyright 2006 Thorsten Kamann
  • 150. Reguläre Ausdrücke Reguläre Ausdrücke werden von Groovy nativ unterstützt Die ~quot;...quot; Expression wird automatisch in ein Java-Pattern Objekt kompiliert =~ Create Matcher Copyright 2006 Thorsten Kamann
  • 151. Reguläre Ausdrücke Reguläre Ausdrücke werden von Groovy nativ unterstützt Die ~quot;...quot; Expression wird automatisch in ein Java-Pattern Objekt kompiliert =~ Create Matcher assert quot;cheesecheesequot; =~ /cheese/ Copyright 2006 Thorsten Kamann
  • 152. Reguläre Ausdrücke Reguläre Ausdrücke werden von Groovy nativ unterstützt Die ~quot;...quot; Expression wird automatisch in ein Java-Pattern Objekt kompiliert =~ Create Matcher assert quot;cheesecheesequot; =~ /cheese/ ==~ Matches Regex Copyright 2006 Thorsten Kamann
  • 153. Reguläre Ausdrücke Reguläre Ausdrücke werden von Groovy nativ unterstützt Die ~quot;...quot; Expression wird automatisch in ein Java-Pattern Objekt kompiliert =~ Create Matcher assert quot;cheesecheesequot; =~ /cheese/ ==~ Matches Regex assert quot;cheesecheesequot; ==~ /.*ees.*/ Copyright 2006 Thorsten Kamann
  • 154. Gra ils Copyright 2006 Thorsten Kamann
  • 155. Grails Grails ist ein Webapplication-Framework Copyright 2006 Thorsten Kamann
  • 156. Grails Grails ist ein Webapplication-Framework Es vereinfacht die Entwicklung von Webanwendungen durch das Coding By Convention-Paradigma Copyright 2006 Thorsten Kamann
  • 157. Grails Grails ist ein Webapplication-Framework Es vereinfacht die Entwicklung von Webanwendungen durch das Coding By Convention-Paradigma die Verwendung von Spring/Hibernate Copyright 2006 Thorsten Kamann
  • 158. Grails Grails ist ein Webapplication-Framework Es vereinfacht die Entwicklung von Webanwendungen durch das Coding By Convention-Paradigma die Verwendung von Spring/Hibernate eigene GSP (Groovy Server Pages) mit dynamischen TagLibraries Copyright 2006 Thorsten Kamann
  • 159. Grails (Screenshots) Copyright 2006 Thorsten Kamann
  • 160. Grails (Screenshots) Copyright 2006 Thorsten Kamann
  • 161. Grails (Screenshots) Copyright 2006 Thorsten Kamann
  • 162. Grails (Screenshots) Copyright 2006 Thorsten Kamann
  • 163. Grails Die zentrale Komponente ist die Domänenklasse (Entity) Copyright 2006 Thorsten Kamann
  • 164. Grails Die zentrale Komponente ist die Domänenklasse (Entity) Daraus können der Controller und die Views für eine CRUD- Anwendung generiert werden Copyright 2006 Thorsten Kamann
  • 165. Grails Die zentrale Komponente ist die Domänenklasse (Entity) Daraus können der Controller und die Views für eine CRUD- Anwendung generiert werden Anbindung an Enterprise-Systeme kann über SpringBeans erfolgen Copyright 2006 Thorsten Kamann
  • 166. Grails Die zentrale Komponente ist die Domänenklasse (Entity) Daraus können der Controller und die Views für eine CRUD- Anwendung generiert werden Anbindung an Enterprise-Systeme kann über SpringBeans erfolgen Als View-Technologie ist zur Zeit JSP und GSP vorgesehen Copyright 2006 Thorsten Kamann
  • 167. Grails Die zentrale Komponente ist die Domänenklasse (Entity) Daraus können der Controller und die Views für eine CRUD- Anwendung generiert werden Anbindung an Enterprise-Systeme kann über SpringBeans erfolgen Als View-Technologie ist zur Zeit JSP und GSP vorgesehen Eclipse Integration ist in Arbeit Copyright 2006 Thorsten Kamann
  • 168. Grails Die zentrale Komponente ist die Domänenklasse (Entity) Daraus können der Controller und die Views für eine CRUD- Anwendung generiert werden Anbindung an Enterprise-Systeme kann über SpringBeans erfolgen Als View-Technologie ist zur Zeit JSP und GSP vorgesehen Eclipse Integration ist in Arbeit Sehr leichte Integration in eine MDSD-Umgebung Copyright 2006 Thorsten Kamann
  • 169. Gorm Copyright 2006 Thorsten Kamann
  • 170. GORM Ist der OR-Mapper für Grails Copyright 2006 Thorsten Kamann
  • 171. GORM Ist der OR-Mapper für Grails Unter der Haube wird Hibernate 3 verwendet Copyright 2006 Thorsten Kamann
  • 172. GORM Ist der OR-Mapper für Grails Unter der Haube wird Hibernate 3 verwendet Die Konfiguration wird komplett in den Groovy-Files vorgenommen Copyright 2006 Thorsten Kamann
  • 173. GORM Ist der OR-Mapper für Grails Unter der Haube wird Hibernate 3 verwendet Die Konfiguration wird komplett in den Groovy-Files vorgenommen Alle Features von Hibernate werden unterstützt Copyright 2006 Thorsten Kamann
  • 174. GORM Ist der OR-Mapper für Grails Unter der Haube wird Hibernate 3 verwendet Die Konfiguration wird komplett in den Groovy-Files vorgenommen Alle Features von Hibernate werden unterstützt In Verbindung mit Spring ist es möglich, Transaktionen in Grails-Anwendungen flexibel zu verwalten Copyright 2006 Thorsten Kamann
  • 175. Groovle ts Copyright 2006 Thorsten Kamann
  • 176. Groovlets Groovlets sind Java-Servlets in Groovy geschrieben Copyright 2006 Thorsten Kamann
  • 177. Groovlets Groovlets sind Java-Servlets in Groovy geschrieben Es gibt ein GroovyServlet, welches Groovy-Skripte automatisch kompiliert, ausführt und cached Copyright 2006 Thorsten Kamann
  • 178. Groovlets Groovlets sind Java-Servlets in Groovy geschrieben Es gibt ein GroovyServlet, welches Groovy-Skripte automatisch kompiliert, ausführt und cached Copyright 2006 Thorsten Kamann
  • 179. Groovlets Implizite Variablen: Variable Gebunden an Bemerkung Request ServletRequest Response ServletResponse Context ServletContext Application ServletContext Session getSession(false) Out response.getWriter() Können nicht re-assigned werden Cout response.getOutputStream() Können nicht re-assigned werden Html new MarkupBuilder(out) Können nicht re-assigned werden Copyright 2006 Thorsten Kamann
  • 180. GS QL Copyright 2006 Thorsten Kamann
  • 181. GSQL Vereinfacht das Arbeiten mit SQL Copyright 2006 Thorsten Kamann
  • 182. GSQL Vereinfacht das Arbeiten mit SQL Unterstützung von SQL-Queries und -Statements Copyright 2006 Thorsten Kamann
  • 183. GSQL Vereinfacht das Arbeiten mit SQL Unterstützung von SQL-Queries und -Statements Closures bieten komfortables Arbeiten mit den ResultSets Copyright 2006 Thorsten Kamann
  • 184. GSQL Vereinfacht das Arbeiten mit SQL Unterstützung von SQL-Queries und -Statements Closures bieten komfortables Arbeiten mit den ResultSets def sql = Sql.newInstance(quot;urlquot;, quot;userquot;,quot;pwdquot;, quot;driverquot;) sql.eachRow(quot;select * from FOOD where type=${foo}quot;) { println quot;Gromit likes ${it.name}quot; } Copyright 2006 Thorsten Kamann
  • 185. GSQL Vereinfacht das Arbeiten mit SQL Unterstützung von SQL-Queries und -Statements Closures bieten komfortables Arbeiten mit den ResultSets def sql = Sql.newInstance(quot;urlquot;, quot;userquot;,quot;pwdquot;, quot;driverquot;) def food = sql.dataSet('FOOD') def cheese = food.findAll { it.type == 'cheese' } cheese.each { println quot;Eat ${it.name}quot; } Copyright 2006 Thorsten Kamann
  • 186. Ant- S c ripting Copyright 2006 Thorsten Kamann
  • 187. Ant-Scripting Bietet eine Schnittstelle, um Ant-Tasks per Groovy-Script zu erstellen und zu benutzen Copyright 2006 Thorsten Kamann
  • 188. Ant-Scripting Bietet eine Schnittstelle, um Ant-Tasks per Groovy-Script zu erstellen und zu benutzen ant = new AntBuilder() ant.echo(message:quot;mapping it via attribute!quot;) ant.echo(quot;Hello World!quot;) Copyright 2006 Thorsten Kamann
  • 189. Ant-Scripting Bietet eine Schnittstelle, um Ant-Tasks per Groovy-Script zu erstellen und zu benutzen ant = new AntBuilder() try{ ant.javac(srcdir:quot;/srcquot;, destdir:quot;/dest/quot; ) }catch(Throwable thr){ ant.mail(mailhost:quot;hostquot;, subject:quot;build failurequot;){ from(address:quot;buildmaster@anywhere.comquot;), to(address:quot;dev-team@anywhere.comquot;) message(quot;Unable to compile sources.quot;) } } Copyright 2006 Thorsten Kamann
  • 190. Groovy Te mpla te s Copyright 2006 Thorsten Kamann
  • 191. Groovy Templates Bietet ein Framework, um eine eigene Template-Engine zu entwickeln Copyright 2006 Thorsten Kamann
  • 192. Groovy Templates Bietet ein Framework, um eine eigene Template-Engine zu entwickeln Enthalten ist die SimpleTemplateEngine, die JSP-like mittels Scripts, Scriptlets und EL parameterisierte Texte generieren kann Copyright 2006 Thorsten Kamann
  • 193. Groovy Templates (Beispiel) def text = 'Dear quot;${firstname} ${lastname}quot;,nSo nice to meet you in <% print city %>.' def binding = [quot;firstnamequot;:quot;Peterquot;, quot;lastnamequot;:quot;Schulzequot;, quot;cityquot;:quot;Dortmundquot;] def engine = new SimpleTemplateEngine() template = engine.createTemplate(text).make(binding) def result = 'Dear quot;Peter Schulzequot;,nSo nice to meet you in Dortmund.' assert result == template.toString() Copyright 2006 Thorsten Kamann
  • 194. S ic he rhe it Copyright 2006 Thorsten Kamann
  • 195. Sicherheit Groovy-Skripte können innerhalb des Java Security- Managers ausgeführt werden Copyright 2006 Thorsten Kamann
  • 196. Sicherheit Groovy-Skripte können innerhalb des Java Security- Managers ausgeführt werden Copyright 2006 Thorsten Kamann
  • 197. Sicherheit Groovy-Skripte können innerhalb des Java Security- Managers ausgeführt werden security.policy: grant codeBase quot;file:/serverCodeBase/restrictedClientquot; { permission java.security.AllPermission; }; Copyright 2006 Thorsten Kamann
  • 198. Sicherheit Groovy-Skripte können innerhalb des Java Security- Managers ausgeführt werden security.policy: grant codeBase quot;file:/serverCodeBase/restrictedClientquot; { permission java.security.AllPermission; }; Java-Code: new GroovyShell().evaluate( new GroovyCodeSource( clientscriptStr, quot;RestrictedScriptquot;, quot;/serverCodeBase/restrictedClientquot;) Copyright 2006 Thorsten Kamann
  • 199. S c riptom Copyright 2006 Thorsten Kamann
  • 200. Scriptom Scriptom ist ein optionales Modul für die Verwendung mit dem Windows Scripting Host oder OLE COM Automation Copyright 2006 Thorsten Kamann
  • 201. Scriptom Scriptom ist ein optionales Modul für die Verwendung mit dem Windows Scripting Host oder OLE COM Automation import org.codehaus.groovy.scriptom.ActiveXProxy def explorer = new ActiveXProxy(quot;InternetExplorer.Applicationquot;) explorer.Visible = true explorer.AddressBar = true explorer.Navigate(quot;http://www.itemis.de/quot;) Copyright 2006 Thorsten Kamann
  • 202. Scriptom Scriptom ist ein optionales Modul für die Verwendung mit dem Windows Scripting Host oder OLE COM Automation import org.codehaus.groovy.scriptom.ActiveXProxy import java.io.File def word = new ActiveXProxy(quot;Word.Applicationquot;) word.Documents.Open(new File(args[0]).canonicalPath) word.ActiveDocument.SaveAs(new File(args[0] - quot;.docquot; + quot;.htmlquot;).canonicalPath, 8) word.Quit() Copyright 2006 Thorsten Kamann
  • 203. We ite re Module Copyright 2006 Thorsten Kamann
  • 204. Weitere Module Gant Gant ist ein Build-Tool auf Basis von Ant. Anstatt XML zu verwenden, wird ein Groovy-Dialekt benutzt, um die Ant- Targets und -Tasks zu konfigurieren. Copyright 2006 Thorsten Kamann
  • 205. Weitere Module Google Data Support Google bietet den Zugriff auf seine Services. Mit Google Data Support wird der Zugriff darauf wesentlich vereinfacht. Copyright 2006 Thorsten Kamann
  • 206. Weitere Module Gram Gram unterstützt bei der Verwendung von Xdoclet-Tags und Annotations in Groovy-Scripts. Copyright 2006 Thorsten Kamann
  • 207. Weitere Module Groovy Jabber-RPC Damit können XML-RPC Aufrufe über das Jabber-Protokol abgesetzt werden. Bietet die Möglichkeit sowohl einen Server als auch einen Client zu erstellen. Copyright 2006 Thorsten Kamann
  • 208. Weitere Module Groovy Monkey Groovy Monkey ist ein Port des Eclipse-Monkey Projekts. Damit kann Eclipse über Groovy-Scripts automatisiert werden. Copyright 2006 Thorsten Kamann
  • 209. Weitere Module Groovy SOAP Damit können sowohl ein Soap-Server als auch ein Soap- Client erstellt werden. Copyright 2006 Thorsten Kamann
  • 210. Weitere Module GroovySWT Auch SWT-UI's können mittels Groovy erstellt werden. Copyright 2006 Thorsten Kamann
  • 211. Weitere Module Process Wird auch GrooSH – Groovy Shell – genannt. Hiermit ist es möglich Funktionen einer (Unix-)Shell nachzubilden. Copyright 2006 Thorsten Kamann
  • 212. Weitere Module XMLRPC Ermöglicht XML-RPC Calls an lokale oder enfernte RPC- Server abzusetzen. Copyright 2006 Thorsten Kamann
  • 213. Te s ting Copyright 2006 Thorsten Kamann
  • 214. Testing Copyright 2006 Thorsten Kamann
  • 215. Testing Copyright 2006 Thorsten Kamann
  • 216. Testing Copyright 2006 Thorsten Kamann
  • 217. Testing Copyright 2006 Thorsten Kamann
  • 218. Testing Copyright 2006 Thorsten Kamann
  • 219. Testing Copyright 2006 Thorsten Kamann
  • 220. Testing Copyright 2006 Thorsten Kamann
  • 221. Testing Copyright 2006 Thorsten Kamann
  • 222. Testing Copyright 2006 Thorsten Kamann
  • 223. Testing Copyright 2006 Thorsten Kamann
  • 224. Testing Copyright 2006 Thorsten Kamann
  • 225. Testing Copyright 2006 Thorsten Kamann
  • 226. Testing Copyright 2006 Thorsten Kamann
  • 227. Testing Copyright 2006 Thorsten Kamann
  • 228. Testing - jUnit-Testing Basiert auf jUnit und erweitert die Asserts Copyright 2006 Thorsten Kamann
  • 229. Testing - jUnit-Testing Basiert auf jUnit und erweitert die Asserts  assertArrayEquals(Object[] expected, Object[] value)  assertLength(int length, char[] array)  assertLength(int length, int[] array)  assertLength(int length, Object[] array)  assertContains(char expected, char[] array)  assertContains(int expected, int[] array)  assertToString(Object value, String expected)  assertInspect(Object value, String expected)  assertScript(final String script)  shouldFail(Closure code)  shouldFail(Class clazz, Closure code) Copyright 2006 Thorsten Kamann
  • 230. IDE S upport Copyright 2006 Thorsten Kamann
  • 231. IDE-Support Copyright 2006 Thorsten Kamann
  • 232. IDE-Support Copyright 2006 Thorsten Kamann
  • 233. IDE-Support Copyright 2006 Thorsten Kamann
  • 234. IDE-Support Copyright 2006 Thorsten Kamann
  • 235. IDE-Support Copyright 2006 Thorsten Kamann
  • 236. IDE-Support Copyright 2006 Thorsten Kamann
  • 237. IDE-Support (Groovy Monkey) Groovy Monkey ist ein Aufsatz auf Eclipse Monkey Copyright 2006 Thorsten Kamann
  • 238. IDE-Support (Groovy Monkey) Groovy Monkey ist ein Aufsatz auf Eclipse Monkey Damit kann Eclipse geskriptet werden Copyright 2006 Thorsten Kamann
  • 239. IDE-Support (Groovy Monkey) Groovy Monkey ist ein Aufsatz auf Eclipse Monkey Damit kann Eclipse geskriptet werden Nützlich für Automatisierungs-Task (Quelltext-Suche, Erstellen von Tasks) Copyright 2006 Thorsten Kamann
  • 240. IDE-Support (Groovy Monkey) Groovy Monkey ist ein Aufsatz auf Eclipse Monkey Damit kann Eclipse geskriptet werden Nützlich für Automatisierungs-Task (Quelltext-Suche, Erstellen von Tasks) Erstellen von LaunchManagern Copyright 2006 Thorsten Kamann
  • 241. IDE-Support (Groovy Monkey) Groovy Monkey ist ein Aufsatz auf Eclipse Monkey Damit kann Eclipse geskriptet werden Nützlich für Automatisierungs-Task (Quelltext-Suche, Erstellen von Tasks) Erstellen von LaunchManagern Prototyping von Plugins Copyright 2006 Thorsten Kamann
  • 242. IDE-Support (Groovy Monkey) Groovy Monkey ist ein Aufsatz auf Eclipse Monkey Damit kann Eclipse geskriptet werden Nützlich für Automatisierungs-Task (Quelltext-Suche, Erstellen von Tasks) Erstellen von LaunchManagern Prototyping von PlugIns Basiert auf dem Eclipse-Job API Copyright 2006 Thorsten Kamann
  • 243. Zus a mme n- Fa s s ung Copyright 2006 Thorsten Kamann
  • 244. Zusammenfassung Groovy ist schon sehr weit fortgeschritten Copyright 2006 Thorsten Kamann
  • 245. Zusammenfassung Groovy ist schon sehr weit fortgeschritten Es gibt eine grosse Anzahl an zusätzlichen Modulen, die die meisten Anwendungsfälle abdecken Copyright 2006 Thorsten Kamann
  • 246. Zusammenfassung Groovy ist schon sehr weit fortgeschritten Es gibt eine grosse Anzahl an zusätzlichen Modulen, die die meisten Anwendungsfälle abdecken Durch die Standardisierung (JSR 241) ist auch eine gewisse Zukunftssicherheit gewährleistet Copyright 2006 Thorsten Kamann
  • 247. Zusammenfassung Groovy ist schon sehr weit fortgeschritten Es gibt eine grosse Anzahl an zusätzlichen Modulen, die die meisten Anwendungsfälle abdecken Durch die Standardisierung (JSR 241) ist auch eine gewisse Zukunftssicherheit gewährleistet Groovy ist leicht erlernbar, da sehr viele Ähnlichkeiten mit der Java-Syntax bestehen Copyright 2006 Thorsten Kamann
  • 248. Zusammenfassung Groovy ist schon sehr weit fortgeschritten Es gibt eine grosse Anzahl an zusätzlichen Modulen, die die meisten Anwendungsfälle abdecken Durch die Standardisierung (JSR 241) ist auch eine gewisse Zukunftssicherheit gewährleistet Groovy ist leicht erlernbar, da sehr viele Ähnlichkeiten mit der Java-Syntax bestehen Neben dem leistungsfähigen API von Groovy steht die gesamte API von Java zur Verfügung Copyright 2006 Thorsten Kamann
  • 249. Links Copyright 2006 Thorsten Kamann
  • 250. Links Groovy Homepage http://groovy.codehaus.org/ JSR 241 http://www.jcp.org/en/jsr/detail?id=241 Grails http://grails.codehaus.org/ Artikel über Groovy http://groovy.codehaus.org/Articles Webseite des Autors http://www.planetes.de/thorsten-kamann Copyright 2006 Thorsten Kamann