SlideShare una empresa de Scribd logo
1 de 87
Descargar para leer sin conexión
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 views

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)
     }
  }
}



                                                                            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.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

                                                                              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 Controllers
The Domain Model
                   i18n bundles
Business Logic
                   Custom View Tags
Views & Layouts
                   Libraries (JARs)
Build Commands
                   Additional Sources
Tests
                   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
Constraints


Given domain class:

     org.example.myapp.domain.Book

Then:

     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
Example

import ...
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

Más contenido relacionado

La actualidad más candente

Node.js Development with Apache NetBeans
Node.js Development with Apache NetBeansNode.js Development with Apache NetBeans
Node.js Development with Apache NetBeansRyan Cuprak
 
Preparing for java 9 modules upload
Preparing for java 9 modules uploadPreparing for java 9 modules upload
Preparing for java 9 modules uploadRyan Cuprak
 
The JVM is your friend
The JVM is your friendThe JVM is your friend
The JVM is your friendKai Koenig
 
CQCON CQ Maven Methods
CQCON CQ Maven MethodsCQCON CQ Maven Methods
CQCON CQ Maven MethodsAndrew Savory
 
Introduction to glideinWMS
Introduction to glideinWMSIntroduction to glideinWMS
Introduction to glideinWMSIgor Sfiligoi
 
Gradle build tool that rocks with DSL JavaOne India 4th May 2012
Gradle build tool that rocks with DSL JavaOne India 4th May 2012Gradle build tool that rocks with DSL JavaOne India 4th May 2012
Gradle build tool that rocks with DSL JavaOne India 4th May 2012Rajmahendra Hegde
 

La actualidad más candente (6)

Node.js Development with Apache NetBeans
Node.js Development with Apache NetBeansNode.js Development with Apache NetBeans
Node.js Development with Apache NetBeans
 
Preparing for java 9 modules upload
Preparing for java 9 modules uploadPreparing for java 9 modules upload
Preparing for java 9 modules upload
 
The JVM is your friend
The JVM is your friendThe JVM is your friend
The JVM is your friend
 
CQCON CQ Maven Methods
CQCON CQ Maven MethodsCQCON CQ Maven Methods
CQCON CQ Maven Methods
 
Introduction to glideinWMS
Introduction to glideinWMSIntroduction to glideinWMS
Introduction to glideinWMS
 
Gradle build tool that rocks with DSL JavaOne India 4th May 2012
Gradle build tool that rocks with DSL JavaOne India 4th May 2012Gradle build tool that rocks with DSL JavaOne India 4th May 2012
Gradle build tool that rocks with DSL JavaOne India 4th May 2012
 

Destacado

Web accessibility with Ametys CMS
Web accessibility with Ametys CMSWeb accessibility with Ametys CMS
Web accessibility with Ametys CMSAmetys
 
Responsive Web Design - An Accessibility Tool
Responsive Web Design - An Accessibility ToolResponsive Web Design - An Accessibility Tool
Responsive Web Design - An Accessibility ToolGeorge Zamfir
 
Avoiding common Accessibility mistakes
Avoiding common Accessibility mistakesAvoiding common Accessibility mistakes
Avoiding common Accessibility mistakesDirk Ginader
 
Integrating universal design, best practices, & accessibility atia 2013 - (...
Integrating universal design, best practices, & accessibility   atia 2013 - (...Integrating universal design, best practices, & accessibility   atia 2013 - (...
Integrating universal design, best practices, & accessibility atia 2013 - (...Howard Kramer
 
Accessibility beyond the desktop - panel slides Accessibility 2.0
Accessibility beyond the desktop - panel slides Accessibility 2.0Accessibility beyond the desktop - panel slides Accessibility 2.0
Accessibility beyond the desktop - panel slides Accessibility 2.0Henny Swan
 
Accessibility of Common Web Applications
Accessibility of Common Web ApplicationsAccessibility of Common Web Applications
Accessibility of Common Web ApplicationsTomáš Muchka
 
Developing for Diversity
Developing for DiversityDeveloping for Diversity
Developing for DiversityInclusiveUX
 
Introduction to Accessibility Best Practices
Introduction to Accessibility Best PracticesIntroduction to Accessibility Best Practices
Introduction to Accessibility Best Practicesshawtrusta11y
 
503 web accessibility - best practices
503   web accessibility - best practices503   web accessibility - best practices
503 web accessibility - best practicesJoanna Wiebe
 
Best Practices for Web Accessibility
Best Practices for Web AccessibilityBest Practices for Web Accessibility
Best Practices for Web AccessibilityCarli Spina
 
Screencasting Tutorial DRN
Screencasting Tutorial DRNScreencasting Tutorial DRN
Screencasting Tutorial DRNdrnbc
 
Accessibility for Hybrid Mobile
Accessibility for Hybrid MobileAccessibility for Hybrid Mobile
Accessibility for Hybrid MobileBobby Bristol
 
Agile Accessibility From a Testers Perspective
Agile Accessibility From a Testers PerspectiveAgile Accessibility From a Testers Perspective
Agile Accessibility From a Testers PerspectiveAlicia Jarvis, CPACC, CSM
 
Principales fonctionnalités du CMS Ametys
Principales fonctionnalités du CMS AmetysPrincipales fonctionnalités du CMS Ametys
Principales fonctionnalités du CMS AmetysAmetys
 
SSB BART Group Mobile Accessibility
SSB  BART Group Mobile AccessibilitySSB  BART Group Mobile Accessibility
SSB BART Group Mobile AccessibilityEduardo Meza-Etienne
 
Html & CSS - Best practices 2-hour-workshop
Html & CSS - Best practices 2-hour-workshopHtml & CSS - Best practices 2-hour-workshop
Html & CSS - Best practices 2-hour-workshopVero Rebagliatte
 
Mobile Accessibility Best Practices & Trends
Mobile Accessibility Best Practices & TrendsMobile Accessibility Best Practices & Trends
Mobile Accessibility Best Practices & TrendsAidan Tierney
 
Early prevention of accessibility issues with mockup & wireframe reviews
Early prevention of accessibility issues with mockup & wireframe reviewsEarly prevention of accessibility issues with mockup & wireframe reviews
Early prevention of accessibility issues with mockup & wireframe reviewsAidan Tierney
 
Embrology of the respiratory system
Embrology of the respiratory systemEmbrology of the respiratory system
Embrology of the respiratory systemOriba Dan Langoya
 

Destacado (20)

Web accessibility with Ametys CMS
Web accessibility with Ametys CMSWeb accessibility with Ametys CMS
Web accessibility with Ametys CMS
 
Responsive Web Design - An Accessibility Tool
Responsive Web Design - An Accessibility ToolResponsive Web Design - An Accessibility Tool
Responsive Web Design - An Accessibility Tool
 
Avoiding common Accessibility mistakes
Avoiding common Accessibility mistakesAvoiding common Accessibility mistakes
Avoiding common Accessibility mistakes
 
Integrating universal design, best practices, & accessibility atia 2013 - (...
Integrating universal design, best practices, & accessibility   atia 2013 - (...Integrating universal design, best practices, & accessibility   atia 2013 - (...
Integrating universal design, best practices, & accessibility atia 2013 - (...
 
Accessibility beyond the desktop - panel slides Accessibility 2.0
Accessibility beyond the desktop - panel slides Accessibility 2.0Accessibility beyond the desktop - panel slides Accessibility 2.0
Accessibility beyond the desktop - panel slides Accessibility 2.0
 
Accessibility of Common Web Applications
Accessibility of Common Web ApplicationsAccessibility of Common Web Applications
Accessibility of Common Web Applications
 
Developing for Diversity
Developing for DiversityDeveloping for Diversity
Developing for Diversity
 
Introduction to Accessibility Best Practices
Introduction to Accessibility Best PracticesIntroduction to Accessibility Best Practices
Introduction to Accessibility Best Practices
 
503 web accessibility - best practices
503   web accessibility - best practices503   web accessibility - best practices
503 web accessibility - best practices
 
Best Practices for Web Accessibility
Best Practices for Web AccessibilityBest Practices for Web Accessibility
Best Practices for Web Accessibility
 
Screencasting Tutorial DRN
Screencasting Tutorial DRNScreencasting Tutorial DRN
Screencasting Tutorial DRN
 
Accessibility for Hybrid Mobile
Accessibility for Hybrid MobileAccessibility for Hybrid Mobile
Accessibility for Hybrid Mobile
 
Agile Accessibility From a Testers Perspective
Agile Accessibility From a Testers PerspectiveAgile Accessibility From a Testers Perspective
Agile Accessibility From a Testers Perspective
 
Line Height
Line HeightLine Height
Line Height
 
Principales fonctionnalités du CMS Ametys
Principales fonctionnalités du CMS AmetysPrincipales fonctionnalités du CMS Ametys
Principales fonctionnalités du CMS Ametys
 
SSB BART Group Mobile Accessibility
SSB  BART Group Mobile AccessibilitySSB  BART Group Mobile Accessibility
SSB BART Group Mobile Accessibility
 
Html & CSS - Best practices 2-hour-workshop
Html & CSS - Best practices 2-hour-workshopHtml & CSS - Best practices 2-hour-workshop
Html & CSS - Best practices 2-hour-workshop
 
Mobile Accessibility Best Practices & Trends
Mobile Accessibility Best Practices & TrendsMobile Accessibility Best Practices & Trends
Mobile Accessibility Best Practices & Trends
 
Early prevention of accessibility issues with mockup & wireframe reviews
Early prevention of accessibility issues with mockup & wireframe reviewsEarly prevention of accessibility issues with mockup & wireframe reviews
Early prevention of accessibility issues with mockup & wireframe reviews
 
Embrology of the respiratory system
Embrology of the respiratory systemEmbrology of the respiratory system
Embrology of the respiratory system
 

Similar a Groovy & Grails for Spring/Java developers

Grails 3.0 Preview
Grails 3.0 PreviewGrails 3.0 Preview
Grails 3.0 Previewgraemerocher
 
Java Edge.2009.Grails.Web.Dev.Made.Easy
Java Edge.2009.Grails.Web.Dev.Made.EasyJava Edge.2009.Grails.Web.Dev.Made.Easy
Java Edge.2009.Grails.Web.Dev.Made.Easyroialdaag
 
Introduction to Grails 2013
Introduction to Grails 2013Introduction to Grails 2013
Introduction to Grails 2013Gavin Hogan
 
Dynamic Languages Web Frameworks Indicthreads 2009
Dynamic Languages Web Frameworks Indicthreads 2009Dynamic Languages Web Frameworks Indicthreads 2009
Dynamic Languages Web Frameworks Indicthreads 2009Arun Gupta
 
GR8Conf 2011: Adopting Grails
GR8Conf 2011: Adopting GrailsGR8Conf 2011: Adopting Grails
GR8Conf 2011: Adopting GrailsGR8Conf
 
Adopting Grails - GR8Conf Europe
Adopting Grails - GR8Conf EuropeAdopting Grails - GR8Conf Europe
Adopting Grails - GR8Conf EuropeKlausBaumecker
 
Fast web development using groovy on grails
Fast web development using groovy on grailsFast web development using groovy on grails
Fast web development using groovy on grailsAnshuman Biswal
 
GraalVM Overview Compact version
GraalVM Overview Compact versionGraalVM Overview Compact version
GraalVM Overview Compact versionscalaconfjp
 
Commit to excellence - Java in containers
Commit to excellence - Java in containersCommit to excellence - Java in containers
Commit to excellence - Java in containersRed Hat Developers
 
Make Your Build Great Again (DroidConSF 2017)
Make Your Build Great Again (DroidConSF 2017)Make Your Build Great Again (DroidConSF 2017)
Make Your Build Great Again (DroidConSF 2017)Jared Burrows
 
Google App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGoogle App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGuillaume Laforge
 
Everything you need to know about GraalVM Native Image
Everything you need to know about GraalVM Native ImageEverything you need to know about GraalVM Native Image
Everything you need to know about GraalVM Native ImageAlina Yurenko
 
Everything as a Code / Александр Тарасов (Одноклассники)
Everything as a Code / Александр Тарасов (Одноклассники)Everything as a Code / Александр Тарасов (Одноклассники)
Everything as a Code / Александр Тарасов (Одноклассники)Ontico
 
Drools, jBPM OptaPlanner presentation
Drools, jBPM OptaPlanner presentationDrools, jBPM OptaPlanner presentation
Drools, jBPM OptaPlanner presentationMark Proctor
 
GraalVM - MadridJUG 2019-10-22
GraalVM - MadridJUG 2019-10-22GraalVM - MadridJUG 2019-10-22
GraalVM - MadridJUG 2019-10-22Jorge Hidalgo
 

Similar a Groovy & Grails for Spring/Java developers (20)

Gradle
GradleGradle
Gradle
 
Grails 3.0 Preview
Grails 3.0 PreviewGrails 3.0 Preview
Grails 3.0 Preview
 
Java Edge.2009.Grails.Web.Dev.Made.Easy
Java Edge.2009.Grails.Web.Dev.Made.EasyJava Edge.2009.Grails.Web.Dev.Made.Easy
Java Edge.2009.Grails.Web.Dev.Made.Easy
 
Introduction to Grails 2013
Introduction to Grails 2013Introduction to Grails 2013
Introduction to Grails 2013
 
Dynamic Languages Web Frameworks Indicthreads 2009
Dynamic Languages Web Frameworks Indicthreads 2009Dynamic Languages Web Frameworks Indicthreads 2009
Dynamic Languages Web Frameworks Indicthreads 2009
 
GR8Conf 2011: Adopting Grails
GR8Conf 2011: Adopting GrailsGR8Conf 2011: Adopting Grails
GR8Conf 2011: Adopting Grails
 
Adopting Grails - GR8Conf Europe
Adopting Grails - GR8Conf EuropeAdopting Grails - GR8Conf Europe
Adopting Grails - GR8Conf Europe
 
Fast web development using groovy on grails
Fast web development using groovy on grailsFast web development using groovy on grails
Fast web development using groovy on grails
 
GraalVM Overview Compact version
GraalVM Overview Compact versionGraalVM Overview Compact version
GraalVM Overview Compact version
 
Js tacktalk team dev js testing performance
Js tacktalk team dev js testing performanceJs tacktalk team dev js testing performance
Js tacktalk team dev js testing performance
 
GraalVM
GraalVMGraalVM
GraalVM
 
Commit to excellence - Java in containers
Commit to excellence - Java in containersCommit to excellence - Java in containers
Commit to excellence - Java in containers
 
Make Your Build Great Again (DroidConSF 2017)
Make Your Build Great Again (DroidConSF 2017)Make Your Build Great Again (DroidConSF 2017)
Make Your Build Great Again (DroidConSF 2017)
 
Google App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGoogle App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and Gaelyk
 
Everything you need to know about GraalVM Native Image
Everything you need to know about GraalVM Native ImageEverything you need to know about GraalVM Native Image
Everything you need to know about GraalVM Native Image
 
Peru JUG Micronaut & GraalVM
Peru JUG Micronaut & GraalVMPeru JUG Micronaut & GraalVM
Peru JUG Micronaut & GraalVM
 
Everything as a Code / Александр Тарасов (Одноклассники)
Everything as a Code / Александр Тарасов (Одноклассники)Everything as a Code / Александр Тарасов (Одноклассники)
Everything as a Code / Александр Тарасов (Одноклассники)
 
Everything as a code
Everything as a codeEverything as a code
Everything as a code
 
Drools, jBPM OptaPlanner presentation
Drools, jBPM OptaPlanner presentationDrools, jBPM OptaPlanner presentation
Drools, jBPM OptaPlanner presentation
 
GraalVM - MadridJUG 2019-10-22
GraalVM - MadridJUG 2019-10-22GraalVM - MadridJUG 2019-10-22
GraalVM - MadridJUG 2019-10-22
 

Más de Peter Ledbrook

Improving your Gradle builds
Improving your Gradle buildsImproving your Gradle builds
Improving your Gradle buildsPeter Ledbrook
 
Why your build matters
Why your build mattersWhy your build matters
Why your build mattersPeter Ledbrook
 
Groovy for Java Developers
Groovy for Java DevelopersGroovy for Java Developers
Groovy for Java DevelopersPeter Ledbrook
 
Application Architectures in Grails
Application Architectures in GrailsApplication Architectures in Grails
Application Architectures in GrailsPeter Ledbrook
 
Open source-and-you-gr8conf-us-2013
Open source-and-you-gr8conf-us-2013Open source-and-you-gr8conf-us-2013
Open source-and-you-gr8conf-us-2013Peter Ledbrook
 
Grails & the World of Tomorrow
Grails & the World of TomorrowGrails & the World of Tomorrow
Grails & the World of TomorrowPeter Ledbrook
 
Migrating to Cloud Foundry
Migrating to Cloud FoundryMigrating to Cloud Foundry
Migrating to Cloud FoundryPeter Ledbrook
 
Grails and the World of Tomorrow
Grails and the World of TomorrowGrails and the World of Tomorrow
Grails and the World of TomorrowPeter Ledbrook
 
Cloud Foundry for Java devs
Cloud Foundry for Java devsCloud Foundry for Java devs
Cloud Foundry for Java devsPeter Ledbrook
 

Más de Peter Ledbrook (11)

Why Gradle?
Why Gradle?Why Gradle?
Why Gradle?
 
Improving your Gradle builds
Improving your Gradle buildsImproving your Gradle builds
Improving your Gradle builds
 
Why your build matters
Why your build mattersWhy your build matters
Why your build matters
 
Groovy for Java Developers
Groovy for Java DevelopersGroovy for Java Developers
Groovy for Java Developers
 
Application Architectures in Grails
Application Architectures in GrailsApplication Architectures in Grails
Application Architectures in Grails
 
Open source-and-you-gr8conf-us-2013
Open source-and-you-gr8conf-us-2013Open source-and-you-gr8conf-us-2013
Open source-and-you-gr8conf-us-2013
 
Grails & the World of Tomorrow
Grails & the World of TomorrowGrails & the World of Tomorrow
Grails & the World of Tomorrow
 
Migrating to Cloud Foundry
Migrating to Cloud FoundryMigrating to Cloud Foundry
Migrating to Cloud Foundry
 
Grails 2.0 Update
Grails 2.0 UpdateGrails 2.0 Update
Grails 2.0 Update
 
Grails and the World of Tomorrow
Grails and the World of TomorrowGrails and the World of Tomorrow
Grails and the World of Tomorrow
 
Cloud Foundry for Java devs
Cloud Foundry for Java devsCloud Foundry for Java devs
Cloud Foundry for Java devs
 

Último

Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 

Último (20)

Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 

Groovy & Grails for Spring/Java developers

  • 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 views 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) } } } 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.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 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 Controllers The Domain Model i18n bundles Business Logic Custom View Tags Views & Layouts Libraries (JARs) Build Commands Additional Sources Tests 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. Constraints Given domain class: org.example.myapp.domain.Book Then: 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. Example import ... 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