Your SlideShare is downloading. ×
  • Like
Groovy & Grails for Spring/Java developers
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Groovy & Grails for Spring/Java developers

  • 1,265 views
Published

Presentation given at SpringOne 2GX. …

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
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,265
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
39
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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. Demo 2
  • 3. 3 3
  • 4. 4 4
  • 5. 5 5
  • 6. 6 6
  • 7. 7 7
  • 8. 8 8
  • 9. 9 9
  • 10. 10 10
  • 11. 11 11
  • 12. 12 12
  • 13. 13 13
  • 14. 14 14
  • 15. 15 15
  • 16. 16 16
  • 17. 17 17
  • 18. 18 18
  • 19. 19 19
  • 20. 20 20
  • 21. 21 21
  • 22. 22 22
  • 23. 23 23
  • 24. 24 24
  • 25. 25 25
  • 26. 26 26
  • 27. 27 27
  • 28. 28 28
  • 29. 29 29
  • 30. 30 30
  • 31. 31 31
  • 32. 32 32
  • 33. 33 33
  • 34. 34 34
  • 35. 35 35
  • 36. 36 36
  • 37. 37 37
  • 38. 38 38
  • 39. 39 39
  • 40. 40 40
  • 41. 41 41
  • 42. 42 42
  • 43. 43 43
  • 44. 44 44
  • 45. 45 45
  • 46. 46 46
  • 47. 47 47
  • 48. 48 48
  • 49. 49 49
  • 50. 50 50
  • 51. 51 51
  • 52. 52 52
  • 53. 53 53
  • 54. 54 54
  • 55. 55 55
  • 56. 56 56
  • 57. 57 57
  • 58. 58 58
  • 59. 59 59
  • 60. 60 60
  • 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. 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. • 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. Try it out! http://groovyconsole.appspot.com/ 64 64
  • 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. What is Grails? Grails Servlet Web MVC GSP (Views) Container GORM Database I18n (Data Access) Build Test Support Doc Engine 66 66
  • 67. What is Grails? Grails 67 67
  • 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. Say bye-bye to the plumbing! 69 69
  • 70. Demo 70
  • 71. Enterprise requirements Web App Messaging JEE Legacy Services Databases Is this a problem for Grails apps? 71 71
  • 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. Dependency DSL grails.project.dependency.resolution = { inherits "global" log "warn" repositories { grailsHome() mavenCentral() mavenRepo "http://localhost:8081/..." } ... } 73 73
  • 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. ‘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. 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. 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. 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. 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. 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. 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. Reverse Engineering Plugin class Person { String name Integer age ... } 82 82
  • 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. Exampleimport ...beans = { credentialMatcher(Sha1CredentialsMatcher) { storedCredentialsHexEncoded = true } sessionFactory(ConfigurableLocalSessionFactoryBean) { dataSource = ref("dataSource") hibernateProperties = [ "hibernate.hbm2ddl.auto": "create-drop", "hibernate.show_sql": true ] }} 84 84
  • 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. 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. Q&A 87