SlideShare ist ein Scribd-Unternehmen logo
1 von 15
Downloaden Sie, um offline zu lesen
Grails 101


     Lim Chee Kin
     limcheekin@vobject.com
     http://limcheekin.blogspot.com
About Me
●   Moderator of the Malaysia Groovy and Grails User Group
●   Involved in Grails development since version 0.6 and
    developed 15 Grails plugins to date
●   10+ years experience in software development and
    solution consulting for Java EE platform
●   Experience spans across various industries, including
    retail sector, telecommunication, heath care and
    financial services industry.
●   Experienced in many frameworks and web technologies,
    including Java EE, SpringFramework, Hibernate, Groovy,
    Grails Framework, Web Services, JQuery, JQuery UI
Why Grails

●


●


●   To practice agile development process you
    need an agile framework.
Inside Grails
●   Seamless integration of ...
●   Groovy                ●   Tomcat
●   Java                  ●   Ant
●   SpringFramework       ●   Maven
●   Hibernate             ●   Log4J
●   Java EE               ●   H2 Database
●   Sitemesh              ●   Quartz
●   JQuery                ●   ... many more
Best Practices Support
●   Convention over Configuration         standard directory
    structure

●   Dependency Injection SpringFramework
●   Model domain class View GSP Controller groovy class
●   Test Automation JUnit, Spock
●   Modularization plugin system
●   Code Generation scaffolding
●   Fast Development Cycle dynamic reloading
Running Grails App in 5 minutes

●   Step 1: grails create-app addressbook
●


●   Step 2: grails create-domain-class Person
●


●   Step 3: grails generate-all Person
●


●   Step 4: grails run-app
Step 1: grails create-app addressbook
●   Created Grails Application at /opt/dev/ws/addressbook
Step 1: grails create-app addressbook
    /addressbook
●     application.properties
●     grails-app/conf/            --> location of configuration artifacts
●     grails-app/conf/hibernate   --> optional hibernate config
●     grails-app/conf/spring      --> optional spring config
●     grails-app/controllers/     --> location of controller artifacts
●     grails-app/domain/          --> location of domain classes
●     grails-app/i18n/            --> location of message bundles for i18n
●     grails-app/services/        --> location of services
●     grails-app/taglib/          --> location of tag libraries
●     grails-app/utils/           --> location of grails specific utility classes
●     grails-app/views/           --> location of views
●     grails-app/views/layouts    --> location of layouts
●     lib/                        --> jar files not available via installed plugins
●     scripts/                    --> scripts
●     src/groovy                  --> optional; location for Groovy source files (of types
                                      other than those in grails-app/*)
●     src/java                    --> optional; location for Java source files
●     test/                       --> test classes
●     web-app/                    --> css, images, etc, etc, etc.
Step 2: grails create-domain-class Person
●   Created file grails-app/domain/addressbook/Person.groovy
    Created file test/unit/addressbook/PersonTests.groovy
●

●   class Person {
●    String firstName
●    String lastName
●    Date dateOfBirth
●    Integer age
●

●       static constraints = {
●        firstName(nullable:true, maxSize:60)
●        lastName(nullable:true, maxSize:30)
●        dateOfBirth(nullable:true, maxSize:10)
●        age(nullable:true)
●        }
●   }
Step 3: grails generate-all Person
●   Finished generation for domain class addressbook.Person
Step 4: grails run-app
Server running. Browse to http://localhost:8080/addressbook
Step 4: grails run-app
Step 4: grails run-app
My Open Source Grails Plugins
●   I contributed 15 Grails plugins out of 826
    (13 Aug 2012), including:
●   Grails Activiti Plugin
●   http://code.google.com/p/grails-activiti-plugin/
●   Grails Form Builder Plugin
●   http://code.google.com/p/grails-form-builder-plugin/
●   JQuery Validation UI Plugin
●   http://grails.org/plugin/jquery-validation-ui
●   Mahout Recommender Plugin
●   https://github.com/limcheekin/mahout-recommender

●   Find out more at http://goo.gl/VPVrd
Q&A

Weitere ähnliche Inhalte

Ähnlich wie Grails 101

Inrotograils 140211155206-phpapp01
Inrotograils 140211155206-phpapp01Inrotograils 140211155206-phpapp01
Inrotograils 140211155206-phpapp01
Hiten Pratap Singh
 

Ähnlich wie Grails 101 (20)

Grails
GrailsGrails
Grails
 
Gradle - Build System
Gradle - Build SystemGradle - Build System
Gradle - Build System
 
Groovy and noteworthy
Groovy and noteworthyGroovy and noteworthy
Groovy and noteworthy
 
Grails 1.4.0.M1 メモLT
Grails 1.4.0.M1 メモLTGrails 1.4.0.M1 メモLT
Grails 1.4.0.M1 メモLT
 
Groovy shell scripting
Groovy shell scriptingGroovy shell scripting
Groovy shell scripting
 
Inrotograils 140211155206-phpapp01
Inrotograils 140211155206-phpapp01Inrotograils 140211155206-phpapp01
Inrotograils 140211155206-phpapp01
 
Introduction to Grails
Introduction to GrailsIntroduction to Grails
Introduction to Grails
 
Groovy & Grails
Groovy & GrailsGroovy & Grails
Groovy & Grails
 
Introduction to Grails
Introduction to GrailsIntroduction to Grails
Introduction to Grails
 
Android, Gradle & Dependecies
Android, Gradle & DependeciesAndroid, Gradle & Dependecies
Android, Gradle & Dependecies
 
Android Platform Debugging and Development
Android Platform Debugging and DevelopmentAndroid Platform Debugging and Development
Android Platform Debugging and Development
 
GeoServer Developers Workshop
GeoServer Developers WorkshopGeoServer Developers Workshop
GeoServer Developers Workshop
 
Gradle - the Enterprise Automation Tool
Gradle  - the Enterprise Automation ToolGradle  - the Enterprise Automation Tool
Gradle - the Enterprise Automation Tool
 
Grails 101
Grails 101Grails 101
Grails 101
 
Gluster containers!
Gluster containers!Gluster containers!
Gluster containers!
 
Grunt.js and Yeoman, Continous Integration
Grunt.js and Yeoman, Continous IntegrationGrunt.js and Yeoman, Continous Integration
Grunt.js and Yeoman, Continous Integration
 
Grails Spring Boot
Grails Spring BootGrails Spring Boot
Grails Spring Boot
 
GlusterFS Containers
GlusterFS ContainersGlusterFS Containers
GlusterFS Containers
 
Develop Android/iOS app using golang
Develop Android/iOS app using golangDevelop Android/iOS app using golang
Develop Android/iOS app using golang
 
Whats New In Groovy 1.6?
Whats New In Groovy 1.6?Whats New In Groovy 1.6?
Whats New In Groovy 1.6?
 

Kürzlich hochgeladen

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 

Kürzlich hochgeladen (20)

Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 

Grails 101

  • 1. Grails 101 Lim Chee Kin limcheekin@vobject.com http://limcheekin.blogspot.com
  • 2. About Me ● Moderator of the Malaysia Groovy and Grails User Group ● Involved in Grails development since version 0.6 and developed 15 Grails plugins to date ● 10+ years experience in software development and solution consulting for Java EE platform ● Experience spans across various industries, including retail sector, telecommunication, heath care and financial services industry. ● Experienced in many frameworks and web technologies, including Java EE, SpringFramework, Hibernate, Groovy, Grails Framework, Web Services, JQuery, JQuery UI
  • 3. Why Grails ● ● ● To practice agile development process you need an agile framework.
  • 4. Inside Grails ● Seamless integration of ... ● Groovy ● Tomcat ● Java ● Ant ● SpringFramework ● Maven ● Hibernate ● Log4J ● Java EE ● H2 Database ● Sitemesh ● Quartz ● JQuery ● ... many more
  • 5. Best Practices Support ● Convention over Configuration standard directory structure ● Dependency Injection SpringFramework ● Model domain class View GSP Controller groovy class ● Test Automation JUnit, Spock ● Modularization plugin system ● Code Generation scaffolding ● Fast Development Cycle dynamic reloading
  • 6. Running Grails App in 5 minutes ● Step 1: grails create-app addressbook ● ● Step 2: grails create-domain-class Person ● ● Step 3: grails generate-all Person ● ● Step 4: grails run-app
  • 7. Step 1: grails create-app addressbook ● Created Grails Application at /opt/dev/ws/addressbook
  • 8. Step 1: grails create-app addressbook /addressbook ● application.properties ● grails-app/conf/ --> location of configuration artifacts ● grails-app/conf/hibernate --> optional hibernate config ● grails-app/conf/spring --> optional spring config ● grails-app/controllers/ --> location of controller artifacts ● grails-app/domain/ --> location of domain classes ● grails-app/i18n/ --> location of message bundles for i18n ● grails-app/services/ --> location of services ● grails-app/taglib/ --> location of tag libraries ● grails-app/utils/ --> location of grails specific utility classes ● grails-app/views/ --> location of views ● grails-app/views/layouts --> location of layouts ● lib/ --> jar files not available via installed plugins ● scripts/ --> scripts ● src/groovy --> optional; location for Groovy source files (of types other than those in grails-app/*) ● src/java --> optional; location for Java source files ● test/ --> test classes ● web-app/ --> css, images, etc, etc, etc.
  • 9. Step 2: grails create-domain-class Person ● Created file grails-app/domain/addressbook/Person.groovy Created file test/unit/addressbook/PersonTests.groovy ● ● class Person { ● String firstName ● String lastName ● Date dateOfBirth ● Integer age ● ● static constraints = { ● firstName(nullable:true, maxSize:60) ● lastName(nullable:true, maxSize:30) ● dateOfBirth(nullable:true, maxSize:10) ● age(nullable:true) ● } ● }
  • 10. Step 3: grails generate-all Person ● Finished generation for domain class addressbook.Person
  • 11. Step 4: grails run-app Server running. Browse to http://localhost:8080/addressbook
  • 12. Step 4: grails run-app
  • 13. Step 4: grails run-app
  • 14. My Open Source Grails Plugins ● I contributed 15 Grails plugins out of 826 (13 Aug 2012), including: ● Grails Activiti Plugin ● http://code.google.com/p/grails-activiti-plugin/ ● Grails Form Builder Plugin ● http://code.google.com/p/grails-form-builder-plugin/ ● JQuery Validation UI Plugin ● http://grails.org/plugin/jquery-validation-ui ● Mahout Recommender Plugin ● https://github.com/limcheekin/mahout-recommender ● Find out more at http://goo.gl/VPVrd
  • 15. Q&A