Groovy & Grails for Spring/Java developers
Upcoming SlideShare
Loading in...5
×
 

Groovy & Grails for Spring/Java developers

on

  • 1,603 views

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.

Statistics

Views

Total Views
1,603
Views on SlideShare
1,603
Embed Views
0

Actions

Likes
2
Downloads
34
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Groovy & Grails for Spring/Java developers Groovy & Grails for Spring/Java developers Presentation Transcript

  • 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
  • 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 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
  • 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
  • • 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
  • Try it out! http://groovyconsole.appspot.com/ 64 64
  • 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
  • What is Grails? Grails Servlet Web MVC GSP (Views) Container GORM Database I18n (Data Access) Build Test Support Doc Engine 66 66
  • What is Grails? Grails 67 67
  • What is Grails? Web ControllersThe Domain Model i18n bundlesBusiness Logic Custom View TagsViews & Layouts Libraries (JARs)Build Commands Additional SourcesTests Web Resources 68 68
  • Say bye-bye to the plumbing! 69 69
  • Demo 70
  • Enterprise requirements Web App Messaging JEE Legacy Services Databases Is this a problem for Grails apps? 71 71
  • 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
  • Dependency DSL grails.project.dependency.resolution = { inherits "global" log "warn" repositories { grailsHome() mavenCentral() mavenRepo "http://localhost:8081/..." } ... } 73 73
  • 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
  • ‘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
  • 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
  • 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
  • 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
  • ConstraintsGiven domain class: org.example.myapp.domain.BookThen: src/java/org/example/myapp/domain/BookConstraints.groovy constraints = { title blank: false, unique: true ... } 79 79
  • 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
  • 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
  • Reverse Engineering Plugin class Person { String name Integer age ... } 82 82
  • 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
  • Exampleimport ...beans = { credentialMatcher(Sha1CredentialsMatcher) { storedCredentialsHexEncoded = true } sessionFactory(ConfigurableLocalSessionFactoryBean) { dataSource = ref("dataSource") hibernateProperties = [ "hibernate.hbm2ddl.auto": "create-drop", "hibernate.show_sql": true ] }} 84 84
  • 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
  • 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
  • Q&A 87