von und mit Thorsten Kamann




                         Copyright 2006 Thorsten Kamann
Einleitung
Getting Started
Embedding
Die Syntax
Groovy Highlights
     XML-Processing, Markup, GPath, Groovy Beans, R...
Einle itung

              Copyright 2006 Thorsten Kamann
Was ist Scripting?
Skriptsprachen sind Programmiersprachen, die vor allem für
 kleine, überschaubare Programmieraufgaben ...
Was ist Scripting?
Skriptsprachen sind Programmiersprachen, die vor allem für
 kleine, überschaubare Programmieraufgaben ...
Was ist Scripting?
Skriptsprachen sind Programmiersprachen, die vor allem für
 kleine, überschaubare Programmieraufgaben ...
Was ist Scripting?
Skriptsprachen sind Programmiersprachen, die vor allem für
 kleine, überschaubare Programmieraufgaben ...
Was ist Groovy?
Eine dynamische Sprache




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




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




  ...
Was ist Groovy?
Eine dynamische Sprache
Inspiriert von Ruby, Python, Smalltalk
Entwickelt für die Java-Plattform
   Um...
Was ist Groovy?
Eine dynamische Sprache
Inspiriert von Ruby, Python, Smalltalk
Entwickelt für die Java-Plattform
   Um...
Was ist Groovy?
Eine dynamische Sprache
Inspiriert von Ruby, Python, Smalltalk
Entwickelt für die Java-Plattform
   Um...
Was ist Groovy?
Eine dynamische Sprache
Inspiriert von Ruby, Python, Smalltalk
Entwickelt für die Java-Plattform
   Um...
Ge tting
S ta rte d

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




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




               ...
Getting Started
Download des aktuellen Release von
 http://groovy.codehaus.org
Entpacken des Archivs
Setzen der Umgebun...
Getting Started
Download des aktuellen Release von
 http://groovy.codehaus.org
Entpacken des Archivs
Setzen der Umgebun...
Getting Started
Download des aktuellen Release von
 http://groovy.codehaus.org
Entpacken des Archivs
Setzen der Umgebun...
Getting Started




                  Copyright 2006 Thorsten Kamann
Embe dding

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




                              ...
Embedding
Groovy kann auf 4 verschiedene Arten in Java-Anwendungen
 eingebunden werden




                              ...
Embedding
Groovy kann auf 4 verschiedene Arten in Java-Anwendungen
 eingebunden werden




                              ...
Embedding
Groovy kann auf 4 verschiedene Arten in Java-Anwendungen
 eingebunden werden




                              ...
Embedding
Groovy kann auf 4 verschiedene Arten in Java-Anwendungen
 eingebunden werden




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




 ...
Embedding mit dem BSF
Ist ein allgemeine Möglichkeit, jede beliebige Scriptsprache
 in Java-Anwendungen einzubinden
Groo...
Embedding mit GroovyShell
GroovyShell bietet die Möglichkeit des Ein- und Auslesens
 von Variablen mittels des Binding-Ob...
Embedding mit GroovyShell
GroovyShell bietet die Möglichkeit des Ein- und Auslesens
 von Variablen mittels des Binding-Ob...
Embedding mit GroovyClassLoader
Der GroovyClassLoader lädt Groovy-Klassen dynamisch und
 ermöglicht den direkten Zugriff ...
Embedding mit GroovyClassLoader
Der GroovyClassLoader lädt Groovy-Klassen dynamisch und
 ermöglicht den direkten Zugriff ...
Embedding mit GroovyClassLoader
Der GroovyClassLoader lädt Groovy-Klassen dynamisch und
 ermöglicht den direkten Zugriff ...
Embedding mit GroovyScriptEngine
Dies ist die leistungsfähige Möglichkeit um Groovy-Skripte
 auszuführen. Das Binding-Obj...
Embedding mit GroovyScriptEngine
Dies ist die leistungsfähige Möglichkeit um Groovy-Skripte
 auszuführen. Das Binding-Obj...
Embedding mit Ant
ANT-Task, mit dem eine beliebige Anzahl von Groovy-
 Skripten ausgeführt werden können




            ...
Embedding mit Ant
ANT-Task, mit dem eine beliebige Anzahl von Groovy-
 Skripten ausgeführt werden können
GroovyC-Task, d...
Embedding mit Ant
ANT-Task, mit dem eine beliebige Anzahl von Groovy-
 Skripten ausgeführt werden können
GroovyC-Task, d...
Embedding mit Ant
ANT-Task, mit dem eine beliebige Anzahl von Groovy-
 Skripten ausgeführt werden können
GroovyC-Task, d...
Embedding mit Maven 2
Maven 2 wird offiziell mittels des Maven2-Ant-Plugins
 unterstützt




                            ...
Embedding mit Maven 2
Maven 2 wird offiziell mittels des Maven2-Ant-Plugins
 unterstützt
Es existiert aber ein Groovy-Ma...
Embedding mit Maven 2
Maven 2 wird offiziell mittels des Maven2-Ant-Plugins
 unterstützt
Es existiert aber ein Groovy-Ma...
Embedding mit Maven 2
Maven 2 wird offiziell mittels des Maven2-Ant-Plugins
 unterstützt
Es existiert aber ein Groovy-Ma...
Embedding mit Maven 2
Maven 2 wird offiziell mittels des Maven2-Ant-Plugins
 unterstützt
Es existiert aber ein Groovy-Ma...
Embedding mit Maven 2
Maven 2 wird offiziell mittels des Maven2-Ant-Plugins
 unterstützt
Es existiert aber ein Groovy-Ma...
Embedding in Windows
Groovy kann direkt von der Eingabeaufforderung oder über
 Start-->Ausführen mittels
     groovy scri...
Embedding in Windows
Groovy kann direkt von der Eingabeaufforderung oder über
 Start-->Ausführen mittels
     groovy scri...
Embedding in Linux
Groovy kann direkt von der Konsole mittels
     groovy script.groovy [arguments]
 ausgeführt werden


...
Embedding in Linux
Groovy kann direkt von der Konsole mittels
     groovy script.groovy [arguments]
 ausgeführt werden
A...
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




                              C...
Die Syntax: Closures
Closures
   sind anonyme Codeblöcke
   geben einen Wert zurück
   referenzieren und verwenden Var...
Die Syntax: Closures
Closures
   sind anonyme Codeblöcke
   geben einen Wert zurück
   referenzieren und verwenden Var...
Die Syntax: Closures
Closures
   sind anonyme Codeblöcke
   geben einen Wert zurück
   referenzieren und verwenden Var...
Die Syntax: Closures
Closures
   sind anonyme Codeblöcke
   geben einen Wert zurück
   referenzieren und verwenden Var...
Die Syntax: Closures (Beispiele)
Beispiele:

 { item++ }




                                   Copyright 2006 Thorsten K...
Die Syntax: Closures (Beispiele)
Beispiele:

 { name -> println name }




                                   Copyright 2...
Die Syntax: Closures (Beispiele)
Beispiele:

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




         ...
Die Syntax: Closures (Beispiele)
Beispiele:

 { reader ->
     while (true) {
            line = reader.readLine()
     }...
Die Syntax – Collections (Listen)
Listen erzeugen immer eine Instanz von java.util.List




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

 def list = [5, 6, 7, 8]
 assert...
Die Syntax – Collections (Listen)
Listen erzeugen immer eine Instanz von java.util.List

 def emptyList = []
 assert empt...
Die Syntax – Collections (Ranges)
Ranges erzeugen Listen mit sequentiellen Werten




                                   ...
Die Syntax – Collections (Ranges)
Ranges erzeugen Listen mit sequentiellen Werten
Es gibt inklusive und exklusive Ranges...
Die Syntax – Collections (Ranges)
Ranges erzeugen Listen mit sequentiellen Werten
Es gibt inklusive und exklusive Ranges...
Die Syntax – Collections (Ranges)
Ranges erzeugen Listen mit sequentiellen Werten
Es gibt inklusive und exklusive Ranges...
Die Syntax: Collections (Maps)
Maps basieren auf einer Implementierung von java.util.Map




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

 def map = [name:quot;Gromitquo...
Die Syntax: Collections (Maps)
Maps basieren auf einer Implementierung von java.util.Map

 def emptyMap = [:]
 emptyMap.f...
Die Syntax: Collections (Expando)
Expandos ermöglichen die Erzeugung von dynamischen
 Objekten




                      ...
Die Syntax: Collections (Expando)
Expandos ermöglichen die Erzeugung von dynamischen
 Objekten

 def player = new Expando...
Die Syntax: Collections (each)
Iterator mittels einer Closure




                                  Copyright 2006 Thorst...
Die Syntax: Collections (each)
Iterator mittels einer Closure

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




 ...
Die Syntax: Collections (collect)
Erzeugt eine neue Liste mit dem Ergebnis der Closure




                              ...
Die Syntax: Collections (collect)
Erzeugt eine neue Liste mit dem Ergebnis der Closure

 def value = [1, 2, 3].collect { ...
Die Syntax: Collections (find)
Gibt das erste Element einer Collection zurück, welches der
 Expression in der Closure ent...
Die Syntax: Collections (find)
Gibt das erste Element einer Collection zurück, welches der
 Expression in der Closure ent...
Die Syntax: Collections (findAll)
Gibt eine Collection mit allen Elementen, die denen der
 Expression in der Closure ents...
Die Syntax: Collections (findAll)
Gibt eine Collection mit allen Elementen, die denen der
 Expression in der Closure ents...
Die Syntax: Collections (inject)
Fügt einen zusätzlichen Wert zu einer Iteration hinzu




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

 def value = [quot;Javaquot;, quo...
Die Syntax: Collections (every)
Gibt true zurück, wenn alle Werte in der Collection der
 Expression in der Closure entspr...
Die Syntax: Collections (every)
Gibt true zurück, wenn alle Werte in der Collection der
 Expression in der Closure entspr...
Die Syntax: Collections (every)
Gibt true zurück, wenn alle Werte in der Collection der
 Expression in der Closure entspr...
Die Syntax: Collections (any)
Gibt true zurück, wenn mindestens ein Wert in der
 Collection der Expression in der Closure...
Die Syntax: Collections (any)
Gibt true zurück, wenn mindestens ein Wert in der
 Collection der Expression in der Closure...
Die Syntax: Collections (any)
Gibt true zurück, wenn mindestens ein Wert in der
 Collection der Expression in der Closure...
Die Syntax: Collections (max/min)
Gibt den maximalen Wert einer Collection zurück. Die
 Objekte in dieser Collection müss...
Die Syntax: Collections (max/min)
Gibt den maximalen Wert einer Collection zurück. Die
 Objekte in dieser Collection müss...
Die Syntax: Collections (max/min)
Gibt den maximalen Wert einer Collection zurück. Die
 Objekte in dieser Collection müss...
Die Syntax: Collections (max/min)
Gibt den maximalen Wert einer Collection zurück. Die
 Objekte in dieser Collection müss...
Die Syntax: Collections (join)
Fügt einen String zu den Werten einer Collection hinzu




                               ...
Die Syntax: Collections (join)
Fügt einen String zu den Werten einer Collection hinzu

 def value = [1, 2, 3].join('-')
 ...
Die Syntax: Collections (Beispiele)
Ranges verwenden, um Teile von Listen zu extrahieren

 def list = 100..200
 def sub =...
Die Syntax: Collections (Beispiele)
Rückwärts gerichtete Ranges

 def text = quot;nice cheese gromit!quot;
 def name = te...
Die Syntax: Collections (Beispiele)
Negative Ranges – Index beginnt beim letzten Zeichen

 def text = quot;nice cheese gr...
Die Syntax: Collections (Beispiele)
Negative Ranges – Index beginnt beim letzten Zeichen

 def text = quot;nice cheese gr...
Die Syntax: Looping (while)
Groovy unterstützt das aus Java bekannte while{..}
 Konstrukt




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

 def x = 0
 def y = 5
 while (...
Die Syntax: Looping (for)
Die for-Schleife ist einfacher und arbeitet mit Arrays und
 Collections




                   ...
Die Syntax: Looping (for)
Die for-Schleife ist einfacher und arbeitet mit Arrays und
 Collections

 def x = 0
 for ( i in...
Die Syntax: Looping (for)
Die for-Schleife ist einfacher und arbeitet mit Arrays und
 Collections

 x = 0
 for ( i in [0,...
Die Syntax: Looping (each)
each ist eine Closure. Dadurch ist eine sehr kompakte
 Abarbeitung von Schleifen möglich




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

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

 def...
Die Syntax: Looping (eachWithIndex)
Unterscheidet sich vom Looping mit each dadurch, dass ein
 Index mitgeführt wird




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

 de...
Die Syntax: Looping (eachWithIndex)
Unterscheidet sich vom Looping mit each dadurch, dass ein
 Index mitgeführt wird

 de...
Die Syntax: Conditions (if...else)
Groovy unterstützt die aus Java bekannten if...else
 Konstrukte




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

 def x = (y > 1) ? qu...
Die Syntax: Conditions (switch)
Das switch-Statement unterstützt Klassenvergleiche,
 Inhalte von Collections (Lists, Rang...
Die Syntax: Conditions (switch)
Das switch-Statement unterstützt Klassenvergleiche,
 Inhalte von Collections (Lists, Rang...
XML
Proc e s s ing

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




                                    ...
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 schnel...
XML-Processing
Groovy bietet reichhaltige Unterstützung für das XML-
 Processing
Gpath (Xpath) Ausdrücke erlauben schnel...
XML-Processing
DOM Klasse   Methode       Beschreibung
Element      .'child'      .getElementsByTagName('child')
Element  ...
XML-Processing mit XML-Parser
def records = new
 XmlParser().parseText(XmlExamples.CAR_RECORDS)

def allRecords = records....
XML-Processing mit DOMCategory
def reader = new StringReader(XmlExamples.CAR_RECORDS)
def doc     = DOMBuilder.parse(reade...
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, S...
GroovyMarkup
Groovy bietet Unterstützung für die Arbeit mit Markup-
 Languages:
   XML, HTML, SAX, W3C DOM, Ant Tasks, S...
GroovyMarkup
Groovy bietet Unterstützung für die Arbeit mit Markup-
 Languages:
   XML, HTML, SAX, W3C DOM, Ant Tasks, S...
GroovyMarkup
Groovy bietet Unterstützung für die Arbeit mit Markup-
 Languages:
   XML, HTML, SAX, W3C DOM, Ant Tasks, S...
GroovyMarkup (Beispiel)
builder = new MarkupBuilder(writer)
builder.person() {
   name(first:quot;Meganquot;, last:quot;Sm...
GroovyMarkup (Beispiel)
builder = new MarkupBuilder(writer)
builder.person() {
   name(first:quot;Meganquot;, last:quot;Sm...
GPath
        Copyright 2006 Thorsten Kamann
GPath
Ist eine Expression-Language für Daten mit Baumstrukturen




                                             Copyrigh...
GPath
Ist eine Expression-Language für Daten mit Baumstrukturen




                                             Copyrigh...
GPath
Ist eine Expression-Language für Daten mit Baumstrukturen
Implementierung für XML




                            ...
GPath
Ist eine Expression-Language für Daten mit Baumstrukturen
Implementierung für XML
Pfade zu einem Element können s...
GPath
Ist eine Expression-Language für Daten mit Baumstrukturen
Implementierung für XML
Pfade zu einem Element können s...
Groovy
Be a ns
          Copyright 2006 Thorsten Kamann
GroovyBeans
GroovyBeans sind wie JavaBeans, nur einfacher zu
 definieren




                                            ...
GroovyBeans
GroovyBeans sind wie JavaBeans, nur einfacher zu
 definieren
Customer.groovy:
 class Customer {
     int id
 ...
GroovyBeans
GroovyBeans sind wie JavaBeans, nur einfacher zu
 definieren
Customer.groovy:              Customer.java:
 cl...
GroovyBeans
Regeln für Properties:
   Wenn eine Property als private gekennzeichnet ist,
    wird ein Java Field benutzt...
GroovyBeans
Regeln für Properties:
   Wenn eine Property als public oder protected
    gekennzeichnet wird, werden Gette...
GroovyBeans
Regeln für Properties:
   Wenn keine Getter- oder Setter-Methoden für Properties
    mit der Sichtbarkeit pu...
GroovyBeans
Regeln für Properties:
   Mit selbst deklarierten Getter- und Setter-Methoden
    können die von der Groovy-...
Re gEx

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




                                           ...
Reguläre Ausdrücke
Reguläre Ausdrücke werden von Groovy nativ unterstützt
Die ~quot;...quot; Expression wird automatisch...
Reguläre Ausdrücke
Reguläre Ausdrücke werden von Groovy nativ unterstützt
Die ~quot;...quot; Expression wird automatisch...
Reguläre Ausdrücke
Reguläre Ausdrücke werden von Groovy nativ unterstützt
Die ~quot;...quot; Expression wird automatisch...
Reguläre Ausdrücke
Reguläre Ausdrücke werden von Groovy nativ unterstützt
Die ~quot;...quot; Expression wird automatisch...
Reguläre Ausdrücke
Reguläre Ausdrücke werden von Groovy nativ unterstützt
Die ~quot;...quot; Expression wird automatisch...
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...
Grails
Grails ist ein Webapplication-Framework
Es vereinfacht die Entwicklung von Webanwendungen durch
   das Coding By...
Grails
Grails ist ein Webapplication-Framework
Es vereinfacht die Entwicklung von Webanwendungen durch
   das Coding By...
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 ...
Grails
Die zentrale Komponente ist die Domänenklasse (Entity)
Daraus können der Controller und die Views für eine CRUD-
...
Grails
Die zentrale Komponente ist die Domänenklasse (Entity)
Daraus können der Controller und die Views für eine CRUD-
...
Grails
Die zentrale Komponente ist die Domänenklasse (Entity)
Daraus können der Controller und die Views für eine CRUD-
...
Grails
Die zentrale Komponente ist die Domänenklasse (Entity)
Daraus können der Controller und die Views für eine CRUD-
...
Grails
Die zentrale Komponente ist die Domänenklasse (Entity)
Daraus können der Controller und die Views für eine CRUD-
...
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




                                       ...
GORM
Ist der OR-Mapper für Grails
Unter der Haube wird Hibernate 3 verwendet
Die Konfiguration wird komplett in den Gro...
GORM
Ist der OR-Mapper für Grails
Unter der Haube wird Hibernate 3 verwendet
Die Konfiguration wird komplett in den Gro...
GORM
Ist der OR-Mapper für Grails
Unter der Haube wird Hibernate 3 verwendet
Die Konfiguration wird komplett in den Gro...
Groovle ts


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




                                               Copyright...
Groovlets
Groovlets sind Java-Servlets in Groovy geschrieben
Es gibt ein GroovyServlet, welches Groovy-Skripte
 automati...
Groovlets
Groovlets sind Java-Servlets in Groovy geschrieben
Es gibt ein GroovyServlet, welches Groovy-Skripte
 automati...
Groovlets
Implizite Variablen:
 Variable      Gebunden an                  Bemerkung
 Request       ServletRequest
 Respo...
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




                                ...
GSQL
Vereinfacht das Arbeiten mit SQL
Unterstützung von SQL-Queries und -Statements
Closures bieten komfortables Arbeit...
GSQL
Vereinfacht das Arbeiten mit SQL
Unterstützung von SQL-Queries und -Statements
Closures bieten komfortables Arbeit...
GSQL
Vereinfacht das Arbeiten mit SQL
Unterstützung von SQL-Queries und -Statements
Closures bieten komfortables Arbeit...
Ant-
S c ripting
              Copyright 2006 Thorsten Kamann
Ant-Scripting
Bietet eine Schnittstelle, um Ant-Tasks per Groovy-Script zu
 erstellen und zu benutzen




               ...
Ant-Scripting
Bietet eine Schnittstelle, um Ant-Tasks per Groovy-Script zu
 erstellen und zu benutzen

 ant = new AntBuil...
Ant-Scripting
Bietet eine Schnittstelle, um Ant-Tasks per Groovy-Script zu
 erstellen und zu benutzen

 ant = new AntBuil...
Groovy
Te mpla te s

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




                                ...
Groovy Templates
Bietet ein Framework, um eine eigene Template-Engine zu
 entwickeln
Enthalten ist die SimpleTemplateEng...
Groovy Templates (Beispiel)
def text = 'Dear quot;${firstname} ${lastname}quot;,nSo nice to
 meet you in <% print city %>....
S ic he rhe it

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




                           ...
Sicherheit
Groovy-Skripte können innerhalb des Java Security-
 Managers ausgeführt werden




                           ...
Sicherheit
Groovy-Skripte können innerhalb des Java Security-
 Managers ausgeführt werden

 security.policy:
 grant codeB...
Sicherheit
Groovy-Skripte können innerhalb des Java Security-
 Managers ausgeführt werden

 security.policy:
 grant codeB...
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



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

 i...
Scriptom
Scriptom ist ein optionales Modul für die Verwendung mit
 dem Windows Scripting Host oder OLE COM Automation

 i...
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 benut...
Weitere Module
Google Data Support

 Google bietet den Zugriff auf seine Services. Mit Google
 Data Support wird der Zugr...
Weitere Module
Gram

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




        ...
Weitere Module
Groovy Jabber-RPC

 Damit können XML-RPC Aufrufe über das Jabber-Protokol
 abgesetzt werden. Bietet die Mö...
Weitere Module
Groovy Monkey

 Groovy Monkey ist ein Port des Eclipse-Monkey Projekts.
 Damit kann Eclipse über Groovy-Sc...
Weitere Module
Groovy SOAP

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




        ...
Weitere Module
GroovySWT

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




                                     ...
Weitere Module
Process

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

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




                     ...
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




                                               Co...
Testing - jUnit-Testing
Basiert auf jUnit und erweitert die Asserts
    assertArrayEquals(Object[] expected, Object[] va...
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




                                        ...
IDE-Support (Groovy Monkey)
Groovy Monkey ist ein Aufsatz auf Eclipse Monkey
Damit kann Eclipse geskriptet werden




  ...
IDE-Support (Groovy Monkey)
Groovy Monkey ist ein Aufsatz auf Eclipse Monkey
Damit kann Eclipse geskriptet werden
Nützl...
IDE-Support (Groovy Monkey)
Groovy Monkey ist ein Aufsatz auf Eclipse Monkey
Damit kann Eclipse geskriptet werden
Nützl...
IDE-Support (Groovy Monkey)
Groovy Monkey ist ein Aufsatz auf Eclipse Monkey
Damit kann Eclipse geskriptet werden
Nützl...
IDE-Support (Groovy Monkey)
Groovy Monkey ist ein Aufsatz auf Eclipse Monkey
Damit kann Eclipse geskriptet werden
Nützl...
Zus a mme n-
 Fa s s ung

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




                                              Copyright 20...
Zusammenfassung
Groovy ist schon sehr weit fortgeschritten
Es gibt eine grosse Anzahl an zusätzlichen Modulen, die die
 ...
Zusammenfassung
Groovy ist schon sehr weit fortgeschritten
Es gibt eine grosse Anzahl an zusätzlichen Modulen, die die
 ...
Zusammenfassung
Groovy ist schon sehr weit fortgeschritten
Es gibt eine grosse Anzahl an zusätzlichen Modulen, die die
 ...
Zusammenfassung
Groovy ist schon sehr weit fortgeschritten
Es gibt eine grosse Anzahl an zusätzlichen Modulen, die die
 ...
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://grai...
Nächste SlideShare
Wird geladen in …5
×

Groovy - Rocks or Not?

1.790 Aufrufe

Veröffentlicht am

In dem in Kürze zu erwartenden Java 6 ist der Support für dynamische Scriptsprachen enthalten. Mit Groovy ist eine Scriptsprache entwickelt worden, die die Vorteile einer Scriptsprache und einer mächtigen Sprache wie Java verbindet.
In diesem Vortrag stelle ich Grovvy und die verschiedenen Subprojekte vor und diskutiere die möglichen Anwendungsfälle.
Dieser Vortrag findet im Rahmen des Dortmunder Kreises statt.

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.790
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
38
Aktionen
Geteilt
0
Downloads
14
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Groovy - Rocks or Not?

  1. 1. von und mit Thorsten Kamann Copyright 2006 Thorsten Kamann
  2. 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. 3. Einle itung Copyright 2006 Thorsten Kamann
  4. 4. Was ist Scripting? Skriptsprachen sind Programmiersprachen, die vor allem für kleine, überschaubare Programmieraufgaben gedacht sind Copyright 2006 Thorsten Kamann
  5. 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. 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. 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. 8. Was ist Groovy? Eine dynamische Sprache Copyright 2006 Thorsten Kamann
  9. 9. Was ist Groovy? Eine dynamische Sprache Inspiriert von Ruby, Python, Smalltalk Copyright 2006 Thorsten Kamann
  10. 10. Was ist Groovy? Eine dynamische Sprache Inspiriert von Ruby, Python, Smalltalk Entwickelt für die Java-Plattform Copyright 2006 Thorsten Kamann
  11. 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. 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. 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. 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. 15. Ge tting S ta rte d Copyright 2006 Thorsten Kamann
  16. 16. Getting Started Download des aktuellen Release von http://groovy.codehaus.org Copyright 2006 Thorsten Kamann
  17. 17. Getting Started Download des aktuellen Release von http://groovy.codehaus.org Entpacken des Archivs Copyright 2006 Thorsten Kamann
  18. 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. 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. 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. 21. Getting Started Copyright 2006 Thorsten Kamann
  22. 22. Embe dding Copyright 2006 Thorsten Kamann
  23. 23. Embedding Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werden Copyright 2006 Thorsten Kamann
  24. 24. Embedding Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werden Copyright 2006 Thorsten Kamann
  25. 25. Embedding Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werden Copyright 2006 Thorsten Kamann
  26. 26. Embedding Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werden Copyright 2006 Thorsten Kamann
  27. 27. Embedding Groovy kann auf 4 verschiedene Arten in Java-Anwendungen eingebunden werden Copyright 2006 Thorsten Kamann
  28. 28. Embedding mit dem BSF Ist ein allgemeine Möglichkeit, jede beliebige Scriptsprache in Java-Anwendungen einzubinden Copyright 2006 Thorsten Kamann
  29. 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. 30. Embedding mit GroovyShell GroovyShell bietet die Möglichkeit des Ein- und Auslesens von Variablen mittels des Binding-Objekts Copyright 2006 Thorsten Kamann
  31. 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. 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. 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. 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. 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. 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. 37. Embedding mit Ant ANT-Task, mit dem eine beliebige Anzahl von Groovy- Skripten ausgeführt werden können Copyright 2006 Thorsten Kamann
  38. 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. 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. 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. 41. Embedding mit Maven 2 Maven 2 wird offiziell mittels des Maven2-Ant-Plugins unterstützt Copyright 2006 Thorsten Kamann
  42. 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. 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. 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. 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. 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. 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. 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. 49. Embedding in Linux Groovy kann direkt von der Konsole mittels groovy script.groovy [arguments] ausgeführt werden Copyright 2006 Thorsten Kamann
  50. 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. 51. Die S ynta x Copyright 2006 Thorsten Kamann
  52. 52. Die Syntax: Closures Closures sind anonyme Codeblöcke Copyright 2006 Thorsten Kamann
  53. 53. Die Syntax: Closures Closures sind anonyme Codeblöcke geben einen Wert zurück Copyright 2006 Thorsten Kamann
  54. 54. Die Syntax: Closures Closures sind anonyme Codeblöcke geben einen Wert zurück referenzieren und verwenden Variablen Copyright 2006 Thorsten Kamann
  55. 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. 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. 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. 58. Die Syntax: Closures (Beispiele) Beispiele: { item++ } Copyright 2006 Thorsten Kamann
  59. 59. Die Syntax: Closures (Beispiele) Beispiele: { name -> println name } Copyright 2006 Thorsten Kamann
  60. 60. Die Syntax: Closures (Beispiele) Beispiele: {String x, int y -> println quot;hey $x the value is $yquot;} Copyright 2006 Thorsten Kamann
  61. 61. Die Syntax: Closures (Beispiele) Beispiele: { reader -> while (true) { line = reader.readLine() } } Copyright 2006 Thorsten Kamann
  62. 62. Die Syntax – Collections (Listen) Listen erzeugen immer eine Instanz von java.util.List Copyright 2006 Thorsten Kamann
  63. 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. 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. 65. Die Syntax – Collections (Ranges) Ranges erzeugen Listen mit sequentiellen Werten Copyright 2006 Thorsten Kamann
  66. 66. Die Syntax – Collections (Ranges) Ranges erzeugen Listen mit sequentiellen Werten Es gibt inklusive und exklusive Ranges Copyright 2006 Thorsten Kamann
  67. 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. 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. 69. Die Syntax: Collections (Maps) Maps basieren auf einer Implementierung von java.util.Map Copyright 2006 Thorsten Kamann
  70. 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. 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. 72. Die Syntax: Collections (Expando) Expandos ermöglichen die Erzeugung von dynamischen Objekten Copyright 2006 Thorsten Kamann
  73. 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. 74. Die Syntax: Collections (each) Iterator mittels einer Closure Copyright 2006 Thorsten Kamann
  75. 75. Die Syntax: Collections (each) Iterator mittels einer Closure [1, 2, 3].each { item -> print quot;${item}-quot; } Copyright 2006 Thorsten Kamann
  76. 76. Die Syntax: Collections (collect) Erzeugt eine neue Liste mit dem Ergebnis der Closure Copyright 2006 Thorsten Kamann
  77. 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. 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. 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. 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. 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. 82. Die Syntax: Collections (inject) Fügt einen zusätzlichen Wert zu einer Iteration hinzu Copyright 2006 Thorsten Kamann
  83. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 94. Die Syntax: Collections (join) Fügt einen String zu den Werten einer Collection hinzu Copyright 2006 Thorsten Kamann
  95. 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. 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. 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. 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. 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. 100. Die Syntax: Looping (while) Groovy unterstützt das aus Java bekannte while{..} Konstrukt Copyright 2006 Thorsten Kamann
  101. 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. 102. Die Syntax: Looping (for) Die for-Schleife ist einfacher und arbeitet mit Arrays und Collections Copyright 2006 Thorsten Kamann
  103. 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. 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. 105. Die Syntax: Looping (each) each ist eine Closure. Dadurch ist eine sehr kompakte Abarbeitung von Schleifen möglich Copyright 2006 Thorsten Kamann
  106. 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. 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. 108. Die Syntax: Looping (eachWithIndex) Unterscheidet sich vom Looping mit each dadurch, dass ein Index mitgeführt wird Copyright 2006 Thorsten Kamann
  109. 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. 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. 111. Die Syntax: Conditions (if...else) Groovy unterstützt die aus Java bekannten if...else Konstrukte Copyright 2006 Thorsten Kamann
  112. 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. 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. 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. 115. XML Proc e s s ing Copyright 2006 Thorsten Kamann
  116. 116. XML-Processing Groovy bietet reichhaltige Unterstützung für das XML- Processing Copyright 2006 Thorsten Kamann
  117. 117. XML-Processing Copyright 2006 Thorsten Kamann
  118. 118. XML-Processing Copyright 2006 Thorsten Kamann
  119. 119. XML-Processing Copyright 2006 Thorsten Kamann
  120. 120. XML-Processing Copyright 2006 Thorsten Kamann
  121. 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. 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. 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. 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. 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. 126. Groovy Ma rkup Copyright 2006 Thorsten Kamann
  127. 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. 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. 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. 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. 131. GroovyMarkup (Beispiel) builder = new MarkupBuilder(writer) builder.person() { name(first:quot;Meganquot;, last:quot;Smithquot;) { age(quot;33quot;) } } Copyright 2006 Thorsten Kamann
  132. 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. 133. GPath Copyright 2006 Thorsten Kamann
  134. 134. GPath Ist eine Expression-Language für Daten mit Baumstrukturen Copyright 2006 Thorsten Kamann
  135. 135. GPath Ist eine Expression-Language für Daten mit Baumstrukturen Copyright 2006 Thorsten Kamann
  136. 136. GPath Ist eine Expression-Language für Daten mit Baumstrukturen Implementierung für XML Copyright 2006 Thorsten Kamann
  137. 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. 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. 139. Groovy Be a ns Copyright 2006 Thorsten Kamann
  140. 140. GroovyBeans GroovyBeans sind wie JavaBeans, nur einfacher zu definieren Copyright 2006 Thorsten Kamann
  141. 141. GroovyBeans GroovyBeans sind wie JavaBeans, nur einfacher zu definieren Customer.groovy: class Customer { int id String name } Copyright 2006 Thorsten Kamann
  142. 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. 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. 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. 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. 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. 147. Re gEx Copyright 2006 Thorsten Kamann
  148. 148. Reguläre Ausdrücke Reguläre Ausdrücke werden von Groovy nativ unterstützt Copyright 2006 Thorsten Kamann
  149. 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. 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. 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. 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. 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. 154. Gra ils Copyright 2006 Thorsten Kamann
  155. 155. Grails Grails ist ein Webapplication-Framework Copyright 2006 Thorsten Kamann
  156. 156. Grails Grails ist ein Webapplication-Framework Es vereinfacht die Entwicklung von Webanwendungen durch das Coding By Convention-Paradigma Copyright 2006 Thorsten Kamann
  157. 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. 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. 159. Grails (Screenshots) Copyright 2006 Thorsten Kamann
  160. 160. Grails (Screenshots) Copyright 2006 Thorsten Kamann
  161. 161. Grails (Screenshots) Copyright 2006 Thorsten Kamann
  162. 162. Grails (Screenshots) Copyright 2006 Thorsten Kamann
  163. 163. Grails Die zentrale Komponente ist die Domänenklasse (Entity) Copyright 2006 Thorsten Kamann
  164. 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. 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. 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. 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. 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. 169. Gorm Copyright 2006 Thorsten Kamann
  170. 170. GORM Ist der OR-Mapper für Grails Copyright 2006 Thorsten Kamann
  171. 171. GORM Ist der OR-Mapper für Grails Unter der Haube wird Hibernate 3 verwendet Copyright 2006 Thorsten Kamann
  172. 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. 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. 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. 175. Groovle ts Copyright 2006 Thorsten Kamann
  176. 176. Groovlets Groovlets sind Java-Servlets in Groovy geschrieben Copyright 2006 Thorsten Kamann
  177. 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. 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. 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. 180. GS QL Copyright 2006 Thorsten Kamann
  181. 181. GSQL Vereinfacht das Arbeiten mit SQL Copyright 2006 Thorsten Kamann
  182. 182. GSQL Vereinfacht das Arbeiten mit SQL Unterstützung von SQL-Queries und -Statements Copyright 2006 Thorsten Kamann
  183. 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. 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. 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. 186. Ant- S c ripting Copyright 2006 Thorsten Kamann
  187. 187. Ant-Scripting Bietet eine Schnittstelle, um Ant-Tasks per Groovy-Script zu erstellen und zu benutzen Copyright 2006 Thorsten Kamann
  188. 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. 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. 190. Groovy Te mpla te s Copyright 2006 Thorsten Kamann
  191. 191. Groovy Templates Bietet ein Framework, um eine eigene Template-Engine zu entwickeln Copyright 2006 Thorsten Kamann
  192. 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. 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. 194. S ic he rhe it Copyright 2006 Thorsten Kamann
  195. 195. Sicherheit Groovy-Skripte können innerhalb des Java Security- Managers ausgeführt werden Copyright 2006 Thorsten Kamann
  196. 196. Sicherheit Groovy-Skripte können innerhalb des Java Security- Managers ausgeführt werden Copyright 2006 Thorsten Kamann
  197. 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. 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. 199. S c riptom Copyright 2006 Thorsten Kamann
  200. 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. 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. 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. 203. We ite re Module Copyright 2006 Thorsten Kamann
  204. 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. 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. 206. Weitere Module Gram Gram unterstützt bei der Verwendung von Xdoclet-Tags und Annotations in Groovy-Scripts. Copyright 2006 Thorsten Kamann
  207. 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. 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. 209. Weitere Module Groovy SOAP Damit können sowohl ein Soap-Server als auch ein Soap- Client erstellt werden. Copyright 2006 Thorsten Kamann
  210. 210. Weitere Module GroovySWT Auch SWT-UI's können mittels Groovy erstellt werden. Copyright 2006 Thorsten Kamann
  211. 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. 212. Weitere Module XMLRPC Ermöglicht XML-RPC Calls an lokale oder enfernte RPC- Server abzusetzen. Copyright 2006 Thorsten Kamann
  213. 213. Te s ting Copyright 2006 Thorsten Kamann
  214. 214. Testing Copyright 2006 Thorsten Kamann
  215. 215. Testing Copyright 2006 Thorsten Kamann
  216. 216. Testing Copyright 2006 Thorsten Kamann
  217. 217. Testing Copyright 2006 Thorsten Kamann
  218. 218. Testing Copyright 2006 Thorsten Kamann
  219. 219. Testing Copyright 2006 Thorsten Kamann
  220. 220. Testing Copyright 2006 Thorsten Kamann
  221. 221. Testing Copyright 2006 Thorsten Kamann
  222. 222. Testing Copyright 2006 Thorsten Kamann
  223. 223. Testing Copyright 2006 Thorsten Kamann
  224. 224. Testing Copyright 2006 Thorsten Kamann
  225. 225. Testing Copyright 2006 Thorsten Kamann
  226. 226. Testing Copyright 2006 Thorsten Kamann
  227. 227. Testing Copyright 2006 Thorsten Kamann
  228. 228. Testing - jUnit-Testing Basiert auf jUnit und erweitert die Asserts Copyright 2006 Thorsten Kamann
  229. 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. 230. IDE S upport Copyright 2006 Thorsten Kamann
  231. 231. IDE-Support Copyright 2006 Thorsten Kamann
  232. 232. IDE-Support Copyright 2006 Thorsten Kamann
  233. 233. IDE-Support Copyright 2006 Thorsten Kamann
  234. 234. IDE-Support Copyright 2006 Thorsten Kamann
  235. 235. IDE-Support Copyright 2006 Thorsten Kamann
  236. 236. IDE-Support Copyright 2006 Thorsten Kamann
  237. 237. IDE-Support (Groovy Monkey) Groovy Monkey ist ein Aufsatz auf Eclipse Monkey Copyright 2006 Thorsten Kamann
  238. 238. IDE-Support (Groovy Monkey) Groovy Monkey ist ein Aufsatz auf Eclipse Monkey Damit kann Eclipse geskriptet werden Copyright 2006 Thorsten Kamann
  239. 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. 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. 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. 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. 243. Zus a mme n- Fa s s ung Copyright 2006 Thorsten Kamann
  244. 244. Zusammenfassung Groovy ist schon sehr weit fortgeschritten Copyright 2006 Thorsten Kamann
  245. 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. 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. 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. 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. 249. Links Copyright 2006 Thorsten Kamann
  250. 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

×