Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7....

45
Grails Der Gral der Webentwicklung Stefan Roock [email protected] Bernd Schiffer [email protected] 03.07.2008 JFS

Transcript of Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7....

Page 1: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

– Grails –

Der Gral der Webentwicklung

Stefan [email protected]

Bernd [email protected]

03.07.2008JFS

Page 2: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

21

Page 3: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

32

FAIL!

Page 4: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

43

FAIL!

Page 5: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

54 FAIL!

Page 6: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

65

Page 7: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

76

Page 8: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

87

Page 9: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

98

Page 10: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

109

Page 11: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

1110

FAIL!

Page 12: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

1211 FAIL!

Page 13: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

1312

Page 14: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

1413

Page 15: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

1514

Page 16: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

1615

Page 17: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

1716

FAIL!

Page 18: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

1817

Page 19: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

1918

FAIL!

Page 20: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

2019

Page 21: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

2120

Page 22: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

22

Page 23: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

23

Herzlich Willkommen!

Bernd Schiffer

� akquinet AG

� Coach für agile Methoden, Projektleiter, Softwareentwickler

� XP, Scrum, TDD, Groovy, Grails

Stefan Roock

� akquinet AG

� Coach für agile Methoden, Projektleiter, Softwarearchitekt

� XP, Scrum, Akzeptanztests, TDD, Refactoring …

Page 24: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

24

Was wir heute zeigen

� Vorstellung von Grails

� Live-Demo: Wir basteln uns eine Session

Page 25: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

25

Grails – Der Zuckerguss 1/2

Page 26: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

26

Grails – Der Zuckerguss 2/2

Page 27: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

27

Groovy – Grails' Dynamik 1/2

� Literale

� GStrings

def vorname = 'Micky'

def nachname = 'Maus'

assert 'Mein Name ist Maus, Micky Maus.' ==

"Mein Name ist $nachname, $vorname $nachname."

def list = [1, 2, 3, 4]def map = [a:1, b:2]

Page 28: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

28

Groovy – Grails' Dynamik 2/2

� Closures und Listenoperationen

� RegExp

� IO

def list = [5, 2, 1, 3, 4, 4].findAll{ it > 2 }.sort().unique()

assert [3, 4, 5] == list

'23.12.2007, 23.09.2004'.eachMatch(/(\d{2}\.\d{2}\.\d{4})/) { alles, datum ->

println datum

}

new File('file.txt').eachLine{

line -> println line

}

23.12.2007

23.09.2004

Page 29: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

29

Java – Die Basis

� Nahtlose Verschmelzung von Java und Groovy

� Nutzung aller vorhandenen Java-Resourcen

� Objekte, Klassen, Threads, Security – keine Überraschungen

Page 30: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

30

Domain-Objects & GORM 1/2

� Domain-Objects werden automatisch gemappt

class Kunde {static hasMany = [ adressen : Adresse ]

}

class Adresse {static belongsTo = [ kunde : Kunde ]

}

0..n

Page 31: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

31

Domain-Objects & GORM 2/2

� Statische Typisierung zwecks Mapping

class Adresse {String strasseint hausnummerString hausnummernzusatzint postleitzahlString ortDate gueltigVonDate gueltigBis

}

Page 32: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

32

Constraints – Validierung der Domäne

class Adresse {String strasseint hausnummer…Date gueltigVon//…static constraints = {

strasse(blank:false)hausnummer(blank:false, min:1)gueltigBis(validator: {

gueltigBis == null || gueltigVon <= gueltigBis})

}}

Page 33: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

33

Dynamic Finder – jetzt wird's interessant

Adresse.findAllByPostleitzahl(21502)

Adresse.findAllByPostleitzahlBetween(21000, 21999)

Adresse.findAllByPostleitzahlAndGueltigBis(21502, null)

Adresse.findAllByPostleitzahlBetween(21000, 21999,[sort:'postleitzahl', order:'desc'])

Adresse.list(max:10, offset:100, sort:'postleitzahl', order:'asc')

Page 34: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

34

Views – Wir wollen was sehen!

<html><head><title>${kunde.name}</title>

</head><body><ol><g:each in="${kunde.adressen}">

<li>${it.postleitzahl} ${it.ort}</li></g:each>

</ol></body>

</html>

Page 35: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

35

Controller – Model und View verbinden

class KundeController {

def index = { redirect action:show }

def show = { [kunde:Kunde.get(params.id)] }

def list = { [kunden:Kunde.list()] }

def save = {if(!new Kunde(params).save()) {

render view: 'error'return

} redirect action:list

}}

Page 36: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

36

AJAX – Grails' Web-2.0-Tauglichkeit

� eingebaut (teilweise via Plugins)� Prototype/Script.acoluo.us

� Yahoo! UI (Plugin)

� Dojo (Plugin)

� eingebunden

� benutzt

� JSON, XML-(Un-)Marshalling

<g:javascript library="prototype" />

<div id="message"></div><g:remoteLink action="delete" id="1" update="message">

Lösche Kunde</g:remoteLink>

import grails.converters.*

render kunde as JSON

Page 37: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

37

TagLibs – Vergessen ist JSP!

class MeineTagLib {def liste = { attrs, body ->

out << '<ol>'attrs.von.each{

out << '<li>'out << body(it)out << '</li>'

}out << '</ol>'

}}

<html><head><title>${kunde.name}</title>

</head><body><g:liste von="${kunde.adressen}">

${it.postleitzahl} ${it.ort}</g:liste>

</body></html>

Page 38: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

38

Plugins

� Grails ist selbst aufgebaut aus Plugins

� per Plugin einbindbare Techniken

� Canoo Webtest, GWT, DWR, X-Fire, XML-RPC, Quartz, Spring Security

(Acegi), JCaptcha, Compass + Lucene, LiquiBase, dbmigrate, u.v.v.m.

� http://grails.codehaus.org/plugins

� Modularisierung mit eigenen Plugins

� pro Modul ein Plugin

� technisch oder fachlich geschnitten

� Beeinflussung durch Plugins

� Artefakte, Skripte, MetaObject-Programmierung, EventHandler, Bibliotheken,

uvm.

Page 39: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

39

Testen

� Grails ist agil …

� Unittests, Integrationstests (inhärent)

� Akzeptanztests (Plugins: Canoo Webtest und Selenium)

� … weil es Testen einbindet …

� Test-Skelette pro Domain-Class und Controller generiert

� Ausführung der Tests per Skript (einschl. Reports)

� … aber es ist noch viel zu un-extreme …

� Zu langsam!

� … woran gearbeitet wird!

� Interactive mode

Page 40: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

40

REST (1/2)

� URL-Mapping

class UrlMappings {static mappings = {

"/kunde/$id?"(controller: 'kunde') {action = [

GET: 'show',PUT: 'update',DELETE: 'delete',POST: 'save'

]}

}}

Page 41: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

41

REST (2/2)

� Content-Negotiation

import grails.converters.*…def show = {

def kunden = params.id ? kunde.get(params.id) : kunde.list()withFormat {

html { render template: 'show', model: [kunden: kunden] }xml { render kunden as XML }json { render kunden as JSON }

}}

Page 42: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

42

Grails auf Erfolgskurs

� Grails 1.0 seit Anfang 2008

� Grails 1.0.3 momentan stabil

� großer internationaler Zuspruch:� SAP: Composition on Grails (Netweaver basiert)

� Webhoster Contegix' Management auf Grails-Basis

� showbiz.sky.com: > 180 Mio. Hits/Monat

� erste Webseiten in Deutschland� http://www.jobinsiders.de

� http://www.schnaeppchenfuehrer.com

� http://www.planet-ria.org

� http://team-radar.it-agile.de

� http://werkannwann.de (alpha)

Page 43: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

43

Lust bekommen auf mehr?

� Groovy: http://groovy.codehaus.org

� Grails-Mailinglisten: http://grails.codehaus.org/Mailing+lists

� Grails: http://grails.org/

Page 44: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

44

Foto-Quellen

� Wrong: http://www.doingitwrong.com/

� 2, 10, 16, 18

� Shipment of Fail: http://www.shipmentoffail.com/

� 19, 21

� The FAIL Blog: http://failblog.wordpress.com/

� 1, 3-9, 11-15, 17, 20

21

Page 45: Grails Der Gral der Webentwicklungalt.java-forum-stuttgart.de/jfs/2008/folien/D5.pdf · 2008. 7. 3. · Nahtlose Verschmelzung von Java und Groovy Nutzung aller vorhandenen Java-Resourcen

45

� Schulungen von akquinet it-agile GmbH zu

� Groovy: http://www.akquinet.de/content/java-sap/landing-pages/groovy.html

� Grails: http://www.akquinet.de/content/java-sap/landing-pages/grails.html

� Beratung, Coaching, Inhouse-Schulung

� Entwicklungsunterstützung

Und jetzt die Live-Demo!