0
Groovy & Grails for Java                             developers                        Peter Ledbrook, Developer Advocate ...
Demo       2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
10     10
11     11
12     12
13     13
14     14
15     15
16     16
17     17
18     18
19     19
20     20
21     21
22     22
23     23
24     24
25     25
26     26
27     27
28     28
29     29
30     30
31     31
32     32
33     33
34     34
35     35
36     36
37     37
38     38
39     39
40     40
41     41
42     42
43     43
44     44
45     45
46     46
47     47
48     48
49     49
50     50
51     51
52     52
53     53
54     54
55     55
56     56
57     57
58     58
59     59
60     60
• Grails for Swing applications• MVC model                                     http://griffon.codehaus.org/• SwingBuilder ...
Gradle•   Build tool with built-in dependency management•   Conventions through plugins•   Multi-project support•   Full a...
• Parallel processing for Groovy• Actors library making full use of closures@Grab(group=org.codehaus.gpars, module=gpars, ...
Try it out!         http://groovyconsole.appspot.com/                                             64                      ...
What is Grails?• Rapid Web Application Development Framework  – for the JVM  – with first-class Java integration• Inspired...
What is Grails?     Grails                                         Servlet          Web MVC        GSP (Views)            ...
What is Grails?                  Grails                           67                                67
What is Grails?                   Web ControllersThe Domain Model                   i18n bundlesBusiness Logic            ...
Say bye-bye to the plumbing!                               69                                    69
Demo       70
Enterprise requirements                              Web App      Messaging                                    JEE        ...
Build• Remember the Grails project structure?  – add in build events and...           Can’t build natively with other buil...
Dependency DSL grails.project.dependency.resolution = {   inherits "global"   log "warn"   repositories {       grailsHome...
Dependency DSL grails.project.dependency.resolution = {   inherits "global"   log "warn"   ...   dependencies {       runt...
‘Legacy’ Databases• Grails can create a database from your domain model...• ...but what if you don’t own the database?  – ...
Option 1: Custom ORM mapping• No existing domain model• Schema not too far off the beaten track class Book {    ...    sta...
Option 2: JPA annotations• Existing Java/JPA domain model <?xml version=1.0 encoding=UTF-8?> <!DOCTYPE ...> <hibernate-con...
Option 3: Hibernate XML Mappings• You have Java model + Hibernate mapping files• Schema is way off the beaten track <?xml ...
ConstraintsGiven domain class:     org.example.myapp.domain.BookThen:     src/java/org/example/myapp/domain/BookConstraint...
Option 4: GORM JPA Plugin• GORM layer over JPA• Use your own JPA provider• Useful for cloud services that only work with J...
Database Migration Plugin      Pre-production, Hibernate ‘update’ or ‘create-drop’                    dbm-generate-changel...
Reverse Engineering Plugin                        class Person {                            String name                   ...
Grails is Spring• Spring MVC under the hood• Grails provides many useful beans  – e.g. grailsApplication• Define your own ...
Exampleimport ...beans = {  credentialMatcher(Sha1CredentialsMatcher) {     storedCredentialsHexEncoded = true  }    sessi...
Summary• Various options for integrating Grails with:  – Development/build  – Deployment processes• Works with many extern...
More info• w:   http://grails.org/• f:   http://grails.org/Mailing+Lists• e:   pledbrook@vmware.com• t:   pledbrook• b:   ...
Q&A      87
Upcoming SlideShare
Loading in...5
×

Groovy & Grails for Spring/Java developers

1,380

Published on

Presentation given at SpringOne 2GX.

The original presentation is mostly demo, but these slides show some nice features of Groovy and how Grails can support the varying needs to enterprise developers.

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,380
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
41
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Transcript of "Groovy & Grails for Spring/Java developers"

  1. 1. Groovy & Grails for Java developers Peter Ledbrook, Developer Advocate pledbrook@vmware.com / @pledbrook© 2012 SpringOne 2GX. All rights reserved. Do not distribute without permission. 1
  2. 2. Demo 2
  3. 3. 3 3
  4. 4. 4 4
  5. 5. 5 5
  6. 6. 6 6
  7. 7. 7 7
  8. 8. 8 8
  9. 9. 9 9
  10. 10. 10 10
  11. 11. 11 11
  12. 12. 12 12
  13. 13. 13 13
  14. 14. 14 14
  15. 15. 15 15
  16. 16. 16 16
  17. 17. 17 17
  18. 18. 18 18
  19. 19. 19 19
  20. 20. 20 20
  21. 21. 21 21
  22. 22. 22 22
  23. 23. 23 23
  24. 24. 24 24
  25. 25. 25 25
  26. 26. 26 26
  27. 27. 27 27
  28. 28. 28 28
  29. 29. 29 29
  30. 30. 30 30
  31. 31. 31 31
  32. 32. 32 32
  33. 33. 33 33
  34. 34. 34 34
  35. 35. 35 35
  36. 36. 36 36
  37. 37. 37 37
  38. 38. 38 38
  39. 39. 39 39
  40. 40. 40 40
  41. 41. 41 41
  42. 42. 42 42
  43. 43. 43 43
  44. 44. 44 44
  45. 45. 45 45
  46. 46. 46 46
  47. 47. 47 47
  48. 48. 48 48
  49. 49. 49 49
  50. 50. 50 50
  51. 51. 51 51
  52. 52. 52 52
  53. 53. 53 53
  54. 54. 54 54
  55. 55. 55 55
  56. 56. 56 56
  57. 57. 57 57
  58. 58. 58 58
  59. 59. 59 59
  60. 60. 60 60
  61. 61. • Grails for Swing applications• MVC model http://griffon.codehaus.org/• SwingBuilder for viewsapplication(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) } }} 61 61
  62. 62. 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 http://www.gradle.org/ 62 62
  63. 63. • Parallel processing for Groovy• Actors library making full use of closures@Grab(group=org.codehaus.gpars, module=gpars, version=0.11)import groovyx.gpars.GParsPoolGParsPool.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 63
  64. 64. Try it out! http://groovyconsole.appspot.com/ 64 64
  65. 65. 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
  66. 66. What is Grails? Grails Servlet Web MVC GSP (Views) Container GORM Database I18n (Data Access) Build Test Support Doc Engine 66 66
  67. 67. What is Grails? Grails 67 67
  68. 68. What is Grails? Web ControllersThe Domain Model i18n bundlesBusiness Logic Custom View TagsViews & Layouts Libraries (JARs)Build Commands Additional SourcesTests Web Resources 68 68
  69. 69. Say bye-bye to the plumbing! 69 69
  70. 70. Demo 70
  71. 71. Enterprise requirements Web App Messaging JEE Legacy Services Databases Is this a problem for Grails apps? 71 71
  72. 72. Build• Remember the Grails project structure? – add in build events and... Can’t build natively with other build tools! Ant Maven Gradle Grails Build System 72 72
  73. 73. Dependency DSL grails.project.dependency.resolution = { inherits "global" log "warn" repositories { grailsHome() mavenCentral() mavenRepo "http://localhost:8081/..." } ... } 73 73
  74. 74. 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
  75. 75. ‘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
  76. 76. Option 1: Custom ORM mapping• No existing domain model• Schema not too far off the beaten track class Book { ... static mapping = { table "books" title type: "books" author column: "author_ref" } } 76 76
  77. 77. Option 2: JPA annotations• Existing Java/JPA domain model <?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> grails-app/conf/hibernate/hibernate.cfg.xml 77 77
  78. 78. Option 3: Hibernate XML Mappings• You have Java model + Hibernate mapping files• Schema is way off the beaten track <?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> grails-app/conf/hibernate/hibernate.cfg.xml 78 78
  79. 79. ConstraintsGiven domain class: org.example.myapp.domain.BookThen: src/java/org/example/myapp/domain/BookConstraints.groovy constraints = { title blank: false, unique: true ... } 79 79
  80. 80. Option 4: GORM JPA Plugin• GORM layer over JPA• Use your own JPA provider• Useful for cloud services that only work with JPA, not Hibernate 80 80
  81. 81. Database Migration Plugin Pre-production, Hibernate ‘update’ or ‘create-drop’ dbm-generate-changelog dbm-changelog-sync Change domain model dbm-gorm-diff dbm-update 81 81
  82. 82. Reverse Engineering Plugin class Person { String name Integer age ... } 82 82
  83. 83. 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
  84. 84. Exampleimport ...beans = { credentialMatcher(Sha1CredentialsMatcher) { storedCredentialsHexEncoded = true } sessionFactory(ConfigurableLocalSessionFactoryBean) { dataSource = ref("dataSource") hibernateProperties = [ "hibernate.hbm2ddl.auto": "create-drop", "hibernate.show_sql": true ] }} 84 84
  85. 85. 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
  86. 86. More info• w: http://grails.org/• f: http://grails.org/Mailing+Lists• e: pledbrook@vmware.com• t: pledbrook• b: http://blog.springsource.com/author/peter-ledbrook/ 86 86
  87. 87. Q&A 87
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×