Groovy & Grails for Spring/Java developers
-
Upload
peter-ledbrook -
Category
Technology
-
view
1.344 -
download
2
description
Transcript of Groovy & Grails for Spring/Java developers
![Page 1: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/1.jpg)
Groovy & Grails for Java developers
Peter Ledbrook, Developer [email protected] / @pledbrook
© 2012 SpringOne 2GX. All rights reserved. Do not distribute without permission.
1
![Page 2: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/2.jpg)
Demo
2
![Page 3: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/3.jpg)
3
3
![Page 4: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/4.jpg)
4
4
![Page 5: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/5.jpg)
5
5
![Page 6: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/6.jpg)
6
6
![Page 7: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/7.jpg)
7
7
![Page 8: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/8.jpg)
8
8
![Page 9: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/9.jpg)
9
9
![Page 10: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/10.jpg)
10
10
![Page 11: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/11.jpg)
11
11
![Page 12: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/12.jpg)
12
12
![Page 13: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/13.jpg)
13
13
![Page 14: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/14.jpg)
14
14
![Page 15: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/15.jpg)
15
15
![Page 16: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/16.jpg)
16
16
![Page 17: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/17.jpg)
17
17
![Page 18: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/18.jpg)
18
18
![Page 19: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/19.jpg)
19
19
![Page 20: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/20.jpg)
20
20
![Page 21: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/21.jpg)
21
21
![Page 22: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/22.jpg)
22
22
![Page 23: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/23.jpg)
23
23
![Page 24: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/24.jpg)
24
24
![Page 25: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/25.jpg)
25
25
![Page 26: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/26.jpg)
26
26
![Page 27: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/27.jpg)
27
27
![Page 28: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/28.jpg)
28
28
![Page 29: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/29.jpg)
29
29
![Page 30: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/30.jpg)
30
30
![Page 31: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/31.jpg)
31
31
![Page 32: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/32.jpg)
32
32
![Page 33: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/33.jpg)
33
33
![Page 34: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/34.jpg)
34
34
![Page 35: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/35.jpg)
35
35
![Page 36: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/36.jpg)
36
36
![Page 37: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/37.jpg)
37
37
![Page 38: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/38.jpg)
38
38
![Page 39: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/39.jpg)
39
39
![Page 40: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/40.jpg)
40
40
![Page 41: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/41.jpg)
41
41
![Page 42: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/42.jpg)
42
42
![Page 43: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/43.jpg)
43
43
![Page 44: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/44.jpg)
44
44
![Page 45: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/45.jpg)
45
45
![Page 46: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/46.jpg)
46
46
![Page 47: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/47.jpg)
47
47
![Page 48: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/48.jpg)
48
48
![Page 49: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/49.jpg)
49
49
![Page 50: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/50.jpg)
50
50
![Page 51: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/51.jpg)
51
51
![Page 52: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/52.jpg)
52
52
![Page 53: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/53.jpg)
53
53
![Page 54: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/54.jpg)
54
54
![Page 55: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/55.jpg)
55
55
![Page 56: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/56.jpg)
56
56
![Page 57: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/57.jpg)
57
57
![Page 58: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/58.jpg)
58
58
![Page 59: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/59.jpg)
59
59
![Page 60: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/60.jpg)
60
60
![Page 61: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/61.jpg)
• Grails for Swing applications• MVC model• SwingBuilder for views
61
application(title: 'DemoConsole', pack: true, locationByPlatform: true) { panel(border: emptyBorder(6)) { borderLayout() scrollPane(constraints: CENTER) { textArea( text: bind(target: model, targetProperty: 'scriptSource'), enabled: bind {model.enabled}, columns: 40, rows: 10) } }}
http://griffon.codehaus.org/
61
![Page 62: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/62.jpg)
Gradle
• Build tool with built-in dependency management• Conventions through plugins• Multi-project support• Full access to tasks and dependency tree• Easy to write your own tasks
– either in the build file– or via Groovy/Java classes
62
http://www.gradle.org/
62
![Page 63: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/63.jpg)
• Parallel processing for Groovy• Actors library making full use of closures
63
@Grab(group='org.codehaus.gpars', module='gpars', version='0.11')import groovyx.gpars.GParsPool
GParsPool.withPool { def animals = ['dog', 'ant', 'cat', 'whale'] println(animals.anyParallel {it ==~ /ant/} ? 'Found an ant' : 'No ants found') println(animals.everyParallel {it.contains('a')} ? 'All animals contain a' : 'Some animals can live without an a')}
http://gpars.codehaus.org/
63
![Page 64: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/64.jpg)
Try it out!
64
http://groovyconsole.appspot.com/
64
![Page 65: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/65.jpg)
What is Grails?
• Rapid Web Application Development Framework– for the JVM– with first-class Java integration
• Inspired by Ruby on Rails, Django and others– Convention over Configuration– Don’t Repeat Yourself (DRY)
65
65
![Page 66: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/66.jpg)
Grails
What is Grails?
66
Build
Web MVC GSP (Views)
GORM(Data Access)
Doc Engine
Servlet Container
Test Support
Database I18n
66
![Page 67: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/67.jpg)
Grails
What is Grails?
67
67
![Page 68: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/68.jpg)
What is Grails?
68
Web ControllersThe Domain Model
Business Logic
Custom View TagsViews & Layouts
Libraries (JARs)
Additional Sources
Web Resources
i18n bundles
Build Commands
Tests
68
![Page 69: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/69.jpg)
Say bye-bye to the plumbing!
69
69
![Page 70: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/70.jpg)
Demo
70
![Page 71: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/71.jpg)
Enterprise requirements
71
Web App
Messaging
Legacy Databases Services
JEE
Is this a problem for Grails apps?
71
![Page 72: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/72.jpg)
Build
72
• Remember the Grails project structure?– add in build events and...
Can’t build natively with other build tools!
Grails Build System
Ant GradleMaven
72
![Page 73: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/73.jpg)
Dependency DSL
grails.project.dependency.resolution = { inherits "global" log "warn" repositories { grailsHome() mavenCentral() mavenRepo "http://localhost:8081/..." } ...}
73
73
![Page 74: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/74.jpg)
Dependency DSL
grails.project.dependency.resolution = { inherits "global" log "warn" ... dependencies { runtime "mysql:mysql-connector-java:5.1.17" test "org.gmock:gmock:0.8.1" ... } plugins { compile ":spring-security-core:1.2.7" ... }}
74
74
![Page 75: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/75.jpg)
‘Legacy’ Databases
• Grails can create a database from your domain model...• ...but what if you don’t own the database?
– DBA determines structure– Company conventions– Existing ‘legacy’ database
75
75
![Page 76: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/76.jpg)
• No existing domain model• Schema not too far off the beaten track
76
Option 1: Custom ORM mapping
class Book { ... static mapping = { table "books" title type: "books" author column: "author_ref" }}
76
![Page 77: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/77.jpg)
• Existing Java/JPA domain model
Option 2: JPA annotations
77
grails-app/conf/hibernate/hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE ...><hibernate-configuration> <session-factory> <mapping class="org.ex.Book"/> <mapping class="org.ex.Author"/> ... </session-factory></hibernate-configuration>
77
![Page 78: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/78.jpg)
• You have Java model + Hibernate mapping files• Schema is way off the beaten track
78
grails-app/conf/hibernate/hibernate.cfg.xml
Option 3: Hibernate XML Mappings
<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE ...><hibernate-configuration> <session-factory> <mapping resource="org.ex.Book.hbm.xml"/> <mapping resource="org.ex.Author.hbm.xml"/> ... </session-factory></hibernate-configuration>
78
![Page 79: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/79.jpg)
constraints = { title blank: false, unique: true ...}
Constraints
Given domain class:
Then:
org.example.myapp.domain.Book
src/java/org/example/myapp/domain/BookConstraints.groovy
79
79
![Page 80: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/80.jpg)
• GORM layer over JPA• Use your own JPA provider• Useful for cloud services that only work with JPA, not
Hibernate
80
Option 4: GORM JPA Plugin
80
![Page 81: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/81.jpg)
Database Migration Plugin
81
Pre-production, Hibernate ‘update’ or ‘create-drop’
dbm-generate-changelogdbm-changelog-sync
Change domain model
dbm-gorm-diffdbm-update
81
![Page 82: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/82.jpg)
Reverse Engineering Plugin
82
class Person { String name Integer age ...}
82
![Page 83: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/83.jpg)
Grails is Spring
• Spring MVC under the hood• Grails provides many useful beans
– e.g. grailsApplication• Define your own beans!
– resources.xml/groovy– In a plugin
83
83
![Page 84: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/84.jpg)
Example
import ...beans = { credentialMatcher(Sha1CredentialsMatcher) { storedCredentialsHexEncoded = true }
sessionFactory(ConfigurableLocalSessionFactoryBean) { dataSource = ref("dataSource") hibernateProperties = [ "hibernate.hbm2ddl.auto": "create-drop", "hibernate.show_sql": true ] }}
84
84
![Page 85: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/85.jpg)
Summary
• Various options for integrating Grails with:– Development/build– Deployment processes
• Works with many external systems– Solid support for non-Grailsy DB schemas– Flexible messaging & web service support
85
85
![Page 86: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/86.jpg)
More info
• w: http://grails.org/• f: http://grails.org/Mailing+Lists
• e: [email protected]• t: pledbrook• b: http://blog.springsource.com/author/peter-ledbrook/
86
86
![Page 87: Groovy & Grails for Spring/Java developers](https://reader034.fdocuments.us/reader034/viewer/2022052522/554f8029b4c9052a518b4ca8/html5/thumbnails/87.jpg)
Q&A
87