SlideShare a Scribd company logo
Grails Spring Boot
Spring Boot
By Bhagwat Kumar
AGENDA
1. What and why?
2. Key features ofSpring boot
3. Prototyping usingCLI
4. Gradle primer
5. Managing profiles aka environment in grails
6. Using Spring data libraries e.g. MongoDB
7. UsingGORM
8. Presentation layer
9. UsingGSP
• Its not a replacement for Spring framework but it presents a small
surface area for usersto approach and extract value from the rest of
Spring
• Spring-boot provides a quick way to create a Spring based
application from dependency management to convention over
configuration
• Grails 3.0will be based on Spring Boot
WHAT & WHY?
• Stand-alone Springapplications
• No code generation/ No XML Config
• Automatic configuration by creating sensible defaults
• Starterdependencies
• Structure your code as you like
• Supports Gradle andMaven
• Common non-functional requirements for a "real" application
- embedded servers,
- security, metrics, healthchecks
- externalized configuration
KEY FEATURES
• Quickest way to get a spring app off the ground
• Allows you to run groovy scripts without much boilerplate code
• Not recommended forproduction
RAPID PROTOTYPING : SPRING CLI
@Controller
classExample{
@RequestMapping("/")
@ResponseBody
public StringhelloWorld(){
"Hello Spring bootaudience!!!"
}
}
GETTING STARTED REALLY QUICKLY
// importorg.springframework.web.bind.annotation.Controller
// otherimports...
//@Grab("org.springframework.boot:spring-boot-web-starter:0.5.0")
//@EnableAutoConfiguration
@Controller
classExample{
@RequestMapping("/")
@ResponseBody
publicStringhello(){
return"HelloWorld!";
}
// public static void main(String[]args){
// SpringApplication.run(Example.class,args);
// }
}
WHAT JUST HAPPENED?
• One-stop-shop for all the Spring and related technology
• A set of convenient dependency descriptors
• Contain a lot of the dependencies that you need to get a project up
and runningquickly
• All starters follow a similarnaming pattern;
• spring-boot-starter-*
• Examples
-spring-boot-starter-web
- spring-boot-starter-data-rest
- spring-boot-starter-security
- spring-boot-starter-amqp
- spring-boot-starter-data-jpa
- spring-boot-starter-data-elasticsearch
- spring-boot-starter-data-mongodb
- spring-boot-starter-actuator
STARTER POMs
DEMO: STARTER POMs
LETS GO BEYOND PROTOTYPING : GRADLE
task hello <<{
println "Hello!!!!"
}
task greet<<{
println "Welocome Mr.Kumar"
}
task intro(dependsOn: hello)<<{
println "I'mGradle"
}
hello <<{println "Hello extended!!!!" }
greet.dependsOn hello,intro
// gradletasks
// gradleintro
:listall the available tasks
:executes introtask
// gradle -q greet :bare build output
// gradle --daemon hello:subsequent execution wil be fast
BUILD.GRADLE
apply plugin:"groovy"
//look for sources in src/main/groovyfolder
//inherits java plugin: src/main/javafolder
// tasks compileJava, compileGroovy, build, clean
sourceCompatibility =1.6
repositories {
mavenCentral()
}
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.3.6'
compile "org.apache.commons:commons-lang3:3.0.1"
testCompile "junit:unit:4.+"
}
BUILD.GRADLE: USING PLUGIN AND
ADDING DEPENDENCIES
apply plugin:'groovy'
apply plugin:'idea'
apply plugin:'spring-boot'
buildscript{
repositories {mavenCentral()}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.1.8.RELEASE")
classpath 'org.springframework:springloaded:1.2.0.RELEASE'
}
}
idea {
module {inheritOutputDirs
=false
outputDir =file("$buildDir/classes/main/")
}
}
repositories {mavenCentral() }
dependencies {
compile 'org.codehaus.groovy:groovy-all'
compile 'org.springframework.boot:spring-boot-starter-web'
}
BUILD.GRADLE: FOR SPRING BOOT APP
WITH HOT RELOADING
• Put application.properties/application.yml somewhere in classpath
• Easy one: src/main/resourcesfolder
ENVIRONMENT AND PROFILE AKA GRAILS
CONFIG
Using ConfigurationProperties annotation
import org.springframework.boot.context.properties.ConfigurationProperties
importorg.springframework.stereotype.Component
@Component
@ConfigurationProperties(prefix="app")
class AppInfo {
String name
Stringversion
}
Using Valueannotation
importorg.springframework.beans.factory.annotation.Value
importorg.springframework.stereotype.Component
@Component
classAppConfig{
@Value('${app.name}')
StringappName
@Value('${server.port}')
Integerport
}
BINDING PROPERTIES
OS envvariable
export SPRING_PROFILES_ACTIVE=development
export SERVER_PORT=8090
gradle bootRun
java -jarbuild/libs/demo-1.0.0.jar
with a -D argument (remember to put it before the main class or jararchive)
java -jar -Dspring.profiles.active=development build/libs/dem-1.0.0.jar
java -jar -Dserver.port=8090build./libs/demo-1.0.0.jar
EXAMPLES
• Add dependency
compile 'org.springframework.boot:spring-boot-starter-data-mongodb'
• Configure database URL
spring.data.mongodb.uri=mongodb://localhost/springtestdev
• Add entityclass
importorg.springframework.data.annotation.Id;
classPerson{@IdStringid, Stringname}
• Add repositoryinterface
importorg.springframework.data.mongodb.repository.MongoRepository
public interface PersonRepositoryextendsMongoRepository<Person, String> {}
• Autowire and use like charm
@AutowiredPersonRepository personRepository
personRepository.save(new Person(name:'SpringBoot'))
personRepository.findAll()
personRepository.count()
USING SPRING DATA
• Add dependencies to use GORM-Hibernate
compile 'org.springframework.boot:spring-boot-starter-data-jpa'
compile 'org.grails:gorm-hibernate4-spring-boot:1.1.0.RELEASE'
runtime 'com.h2database:h2' //for h2database
• Add entity with@grails.persistence.entity
importgrails.persistence.Entity
@Entity
class Person{
Stringname;
Integerage
static constraints ={
name blank:false
age min:15
}
}
• For GORM MongoDB use the following dependencies
compile 'org.grails:gorm-mongodb-spring-boot:1.1.0.RELEASE'
NEXT LEVEL PERSISTENCE WITH GORM
• JSP/JSTL
• Thymeleaf
• Freemarker
• Velocity
• Tiles
• GSP
• Groovy TemplateEngine
SERVER SIDE VIEW TEMPLATE LIBRARIES
• Very limited existing tags available
https://github.com/grails/grails-boot/issues/3
• Add dependency
compile "org.grails:grails-gsp-spring-boot:1.0.0.RC1"
compile "org.grails:grails-web:2.4.0.M2"
• Put gsptemplates in resources/templates folder
GSP
• Sample requesthandler
@RequestMapping("/show/{id}")
public ModelAndView show(@PathVariableLong id){
Person person =Person.read(id)
if(person) {
new ModelAndView("/person/show",[personInstance:Person.get(id)])
}else{
log.info "No entity fount for id:"+id
newModelAndView("redirect:/person/list")
}
}
GSP CONTINUED
@grails.gsp.TagLib
@org.springframework.stereotype.Component
class ApplicationTagLib{
static namespace ="app"
def paginate ={attrs ->
String action =attrs.action
Integer total =attrs.total
Integer currentPage =attrs.currentPage ?:1
Integer pages =(total / 10)+1
out <<render(template:"/shared/pagination",
model: [action: action, total:total,
currentPage:currentPage, pages:pages]
)
}
}
<app:paginate
total="${personInstanceCount ?:0}"
currentPage="${currentPage}"
action="/person/list"/>
GRAILS TAGLIB
Packaging as jar with embedded tomcat
$gradle build
$java -jarbuild/libs/mymodule-0.0.1-SNAPSHOT.jar
Packaging as war :configurebuild.groovy
//...
apply plugin:'war'
war{
baseName ='myapp'
version ='0.5.0'
}
//....
configurations {
providedRuntime
}
dependencies{
compile("org.springframework.boot:spring-boot-starter-web")
providedRuntime("org.springframework.boot:spring-boot-
starter-tomcat")
// ...
}
$gradle war
PACKAGING EXECUTABLE JAR AND WAR
FILES
Contact us
Our Office
Client
Location
Click Here To Know More!
Have more queries on Grails?
Talk to our GRAILS experts
Now!
Talk To Our Experts
Here's how the world's
biggest Grails team is
building enterprise
applications on Grails!
Ad

More Related Content

What's hot (20)

Spring Boot and REST API
Spring Boot and REST APISpring Boot and REST API
Spring Boot and REST API
07.pallav
 
Introduction to Aspect Oriented Programming
Introduction to Aspect Oriented ProgrammingIntroduction to Aspect Oriented Programming
Introduction to Aspect Oriented Programming
Amir Kost
 
Spring Boot
Spring BootSpring Boot
Spring Boot
Pei-Tang Huang
 
GraalVM
GraalVMGraalVM
GraalVM
NexThoughts Technologies
 
Introduction to Spring Framework and Spring IoC
Introduction to Spring Framework and Spring IoCIntroduction to Spring Framework and Spring IoC
Introduction to Spring Framework and Spring IoC
Funnelll
 
Spring Native and Spring AOT
Spring Native and Spring AOTSpring Native and Spring AOT
Spring Native and Spring AOT
VMware Tanzu
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
Serhat Can
 
Spring annotation
Spring annotationSpring annotation
Spring annotation
Rajiv Srivastava
 
Springboot introduction
Springboot introductionSpringboot introduction
Springboot introduction
Sagar Verma
 
Spring boot
Spring bootSpring boot
Spring boot
Gyanendra Yadav
 
Spring Framework Tutorial | Spring Tutorial For Beginners With Examples | Jav...
Spring Framework Tutorial | Spring Tutorial For Beginners With Examples | Jav...Spring Framework Tutorial | Spring Tutorial For Beginners With Examples | Jav...
Spring Framework Tutorial | Spring Tutorial For Beginners With Examples | Jav...
Edureka!
 
Spring Framework Petclinic sample application
Spring Framework Petclinic sample applicationSpring Framework Petclinic sample application
Spring Framework Petclinic sample application
Antoine Rey
 
Spring AOP
Spring AOPSpring AOP
Spring AOP
Tata Consultancy Services
 
Spring Boot
Spring BootSpring Boot
Spring Boot
Jiayun Zhou
 
Running Spring Boot Applications as GraalVM Native Images
Running Spring Boot Applications as GraalVM Native ImagesRunning Spring Boot Applications as GraalVM Native Images
Running Spring Boot Applications as GraalVM Native Images
VMware Tanzu
 
Prometheus Storage
Prometheus StoragePrometheus Storage
Prometheus Storage
Fabian Reinartz
 
Introduction to GraalVM
Introduction to GraalVMIntroduction to GraalVM
Introduction to GraalVM
SHASHI KUMAR
 
Vue 2 vs Vue 3.pptx
Vue 2 vs Vue 3.pptxVue 2 vs Vue 3.pptx
Vue 2 vs Vue 3.pptx
Albiorix Technology
 
Spring framework aop
Spring framework aopSpring framework aop
Spring framework aop
Taemon Piya-Lumyong
 
Introduction to Maven
Introduction to MavenIntroduction to Maven
Introduction to Maven
Mindfire Solutions
 
Spring Boot and REST API
Spring Boot and REST APISpring Boot and REST API
Spring Boot and REST API
07.pallav
 
Introduction to Aspect Oriented Programming
Introduction to Aspect Oriented ProgrammingIntroduction to Aspect Oriented Programming
Introduction to Aspect Oriented Programming
Amir Kost
 
Introduction to Spring Framework and Spring IoC
Introduction to Spring Framework and Spring IoCIntroduction to Spring Framework and Spring IoC
Introduction to Spring Framework and Spring IoC
Funnelll
 
Spring Native and Spring AOT
Spring Native and Spring AOTSpring Native and Spring AOT
Spring Native and Spring AOT
VMware Tanzu
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
Serhat Can
 
Springboot introduction
Springboot introductionSpringboot introduction
Springboot introduction
Sagar Verma
 
Spring Framework Tutorial | Spring Tutorial For Beginners With Examples | Jav...
Spring Framework Tutorial | Spring Tutorial For Beginners With Examples | Jav...Spring Framework Tutorial | Spring Tutorial For Beginners With Examples | Jav...
Spring Framework Tutorial | Spring Tutorial For Beginners With Examples | Jav...
Edureka!
 
Spring Framework Petclinic sample application
Spring Framework Petclinic sample applicationSpring Framework Petclinic sample application
Spring Framework Petclinic sample application
Antoine Rey
 
Running Spring Boot Applications as GraalVM Native Images
Running Spring Boot Applications as GraalVM Native ImagesRunning Spring Boot Applications as GraalVM Native Images
Running Spring Boot Applications as GraalVM Native Images
VMware Tanzu
 
Introduction to GraalVM
Introduction to GraalVMIntroduction to GraalVM
Introduction to GraalVM
SHASHI KUMAR
 

Viewers also liked (20)

Use groovy & grails in your spring boot projects
Use groovy & grails in your spring boot projectsUse groovy & grails in your spring boot projects
Use groovy & grails in your spring boot projects
Fátima Casaú Pérez
 
GGX 2014 Lari Hotari Modular Monoliths with Spring Boot and Grails 3
GGX 2014 Lari Hotari Modular Monoliths with Spring Boot and Grails 3GGX 2014 Lari Hotari Modular Monoliths with Spring Boot and Grails 3
GGX 2014 Lari Hotari Modular Monoliths with Spring Boot and Grails 3
Lari Hotari
 
O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!
Josenaldo de Oliveira Matos Filho
 
Spring boot
Spring bootSpring boot
Spring boot
NexThoughts Technologies
 
Schema 25.09.2010 rigger o-3.2, borr- och brunntekniker vg2 - 16 v - r0001
Schema 25.09.2010   rigger o-3.2, borr- och brunntekniker vg2 - 16 v - r0001Schema 25.09.2010   rigger o-3.2, borr- och brunntekniker vg2 - 16 v - r0001
Schema 25.09.2010 rigger o-3.2, borr- och brunntekniker vg2 - 16 v - r0001
OffshoreGroup™
 
Behavioural Marketing & how to get your customers to love you
Behavioural Marketing & how to get your customers to love youBehavioural Marketing & how to get your customers to love you
Behavioural Marketing & how to get your customers to love you
John Watton
 
Behavioural Marketing…or how to get your customers to love you
Behavioural Marketing…or how to get your customers to love youBehavioural Marketing…or how to get your customers to love you
Behavioural Marketing…or how to get your customers to love you
John Watton
 
C:\Fakepath\Nucleotide A H1 N1
C:\Fakepath\Nucleotide A H1 N1C:\Fakepath\Nucleotide A H1 N1
C:\Fakepath\Nucleotide A H1 N1
picardo123
 
Markatalyst Overview
Markatalyst OverviewMarkatalyst Overview
Markatalyst Overview
CJ Glynn
 
Jaarovergang in itslearning
Jaarovergang in itslearningJaarovergang in itslearning
Jaarovergang in itslearning
IT-Workz
 
Open Day Presentation
Open Day Presentation Open Day Presentation
Open Day Presentation
sallyross
 
Investor communications highlights
Investor communications highlightsInvestor communications highlights
Investor communications highlights
Peter Gallagher
 
Behavioural Marketing…or how to get your customers to love you
Behavioural Marketing…or how to get your customers to love youBehavioural Marketing…or how to get your customers to love you
Behavioural Marketing…or how to get your customers to love you
John Watton
 
Portfolio
PortfolioPortfolio
Portfolio
labbott82
 
Michacle angelo
Michacle angeloMichacle angelo
Michacle angelo
sathma
 
Getting groovier-with-vertx
Getting groovier-with-vertxGetting groovier-with-vertx
Getting groovier-with-vertx
TO THE NEW | Technology
 
Sergio Santos Portfolio
Sergio Santos PortfolioSergio Santos Portfolio
Sergio Santos Portfolio
Sergiossn
 
Open day presentation
Open day presentation Open day presentation
Open day presentation
sallyross
 
FUKUYAMA BASE WORKSHOP Vol14 Theme
FUKUYAMA BASE WORKSHOP Vol14 ThemeFUKUYAMA BASE WORKSHOP Vol14 Theme
FUKUYAMA BASE WORKSHOP Vol14 Theme
noteproject
 
Practicing Agile in Offshore Environment
Practicing Agile in Offshore EnvironmentPracticing Agile in Offshore Environment
Practicing Agile in Offshore Environment
TO THE NEW | Technology
 
Use groovy & grails in your spring boot projects
Use groovy & grails in your spring boot projectsUse groovy & grails in your spring boot projects
Use groovy & grails in your spring boot projects
Fátima Casaú Pérez
 
GGX 2014 Lari Hotari Modular Monoliths with Spring Boot and Grails 3
GGX 2014 Lari Hotari Modular Monoliths with Spring Boot and Grails 3GGX 2014 Lari Hotari Modular Monoliths with Spring Boot and Grails 3
GGX 2014 Lari Hotari Modular Monoliths with Spring Boot and Grails 3
Lari Hotari
 
Schema 25.09.2010 rigger o-3.2, borr- och brunntekniker vg2 - 16 v - r0001
Schema 25.09.2010   rigger o-3.2, borr- och brunntekniker vg2 - 16 v - r0001Schema 25.09.2010   rigger o-3.2, borr- och brunntekniker vg2 - 16 v - r0001
Schema 25.09.2010 rigger o-3.2, borr- och brunntekniker vg2 - 16 v - r0001
OffshoreGroup™
 
Behavioural Marketing & how to get your customers to love you
Behavioural Marketing & how to get your customers to love youBehavioural Marketing & how to get your customers to love you
Behavioural Marketing & how to get your customers to love you
John Watton
 
Behavioural Marketing…or how to get your customers to love you
Behavioural Marketing…or how to get your customers to love youBehavioural Marketing…or how to get your customers to love you
Behavioural Marketing…or how to get your customers to love you
John Watton
 
C:\Fakepath\Nucleotide A H1 N1
C:\Fakepath\Nucleotide A H1 N1C:\Fakepath\Nucleotide A H1 N1
C:\Fakepath\Nucleotide A H1 N1
picardo123
 
Markatalyst Overview
Markatalyst OverviewMarkatalyst Overview
Markatalyst Overview
CJ Glynn
 
Jaarovergang in itslearning
Jaarovergang in itslearningJaarovergang in itslearning
Jaarovergang in itslearning
IT-Workz
 
Open Day Presentation
Open Day Presentation Open Day Presentation
Open Day Presentation
sallyross
 
Investor communications highlights
Investor communications highlightsInvestor communications highlights
Investor communications highlights
Peter Gallagher
 
Behavioural Marketing…or how to get your customers to love you
Behavioural Marketing…or how to get your customers to love youBehavioural Marketing…or how to get your customers to love you
Behavioural Marketing…or how to get your customers to love you
John Watton
 
Michacle angelo
Michacle angeloMichacle angelo
Michacle angelo
sathma
 
Sergio Santos Portfolio
Sergio Santos PortfolioSergio Santos Portfolio
Sergio Santos Portfolio
Sergiossn
 
Open day presentation
Open day presentation Open day presentation
Open day presentation
sallyross
 
FUKUYAMA BASE WORKSHOP Vol14 Theme
FUKUYAMA BASE WORKSHOP Vol14 ThemeFUKUYAMA BASE WORKSHOP Vol14 Theme
FUKUYAMA BASE WORKSHOP Vol14 Theme
noteproject
 
Practicing Agile in Offshore Environment
Practicing Agile in Offshore EnvironmentPracticing Agile in Offshore Environment
Practicing Agile in Offshore Environment
TO THE NEW | Technology
 
Ad

Similar to Grails Spring Boot (20)

Spring boot
Spring bootSpring boot
Spring boot
Bhagwat Kumar
 
Gradle - Build System
Gradle - Build SystemGradle - Build System
Gradle - Build System
Jeevesh Pandey
 
Gradle - Build system evolved
Gradle - Build system evolvedGradle - Build system evolved
Gradle - Build system evolved
Bhagwat Kumar
 
What's new in Gradle 4.0
What's new in Gradle 4.0What's new in Gradle 4.0
What's new in Gradle 4.0
Eric Wendelin
 
Eclipse Buildship DemoCamp Hamburg (June 2015) with additional screenshots
Eclipse Buildship DemoCamp Hamburg (June 2015)  with additional screenshotsEclipse Buildship DemoCamp Hamburg (June 2015)  with additional screenshots
Eclipse Buildship DemoCamp Hamburg (June 2015) with additional screenshots
simonscholz
 
Android gradle-build-system-overview
Android gradle-build-system-overviewAndroid gradle-build-system-overview
Android gradle-build-system-overview
Kevin He
 
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
 
Spring boot wednesday
Spring boot wednesdaySpring boot wednesday
Spring boot wednesday
Vinay Prajapati
 
ICONUK 2015 - Gradle Up!
ICONUK 2015 - Gradle Up!ICONUK 2015 - Gradle Up!
ICONUK 2015 - Gradle Up!
René Winkelmeyer
 
Eclipse Buildship JUG Hamburg
Eclipse Buildship JUG HamburgEclipse Buildship JUG Hamburg
Eclipse Buildship JUG Hamburg
simonscholz
 
Grails
GrailsGrails
Grails
Vijay Shukla
 
Gradle - the Enterprise Automation Tool
Gradle  - the Enterprise Automation ToolGradle  - the Enterprise Automation Tool
Gradle - the Enterprise Automation Tool
Izzet Mustafaiev
 
Slim3 quick start
Slim3 quick startSlim3 quick start
Slim3 quick start
Guangyao Cao
 
JVM Web Frameworks Exploration
JVM Web Frameworks ExplorationJVM Web Frameworks Exploration
JVM Web Frameworks Exploration
Kevin H.A. Tan
 
Gradle,the new build system for android
Gradle,the new build system for androidGradle,the new build system for android
Gradle,the new build system for android
zhang ghui
 
7 maven vsgradle
7 maven vsgradle7 maven vsgradle
7 maven vsgradle
Avitesh Kesharwani
 
OpenCms Days 2012 - Developing OpenCms with Gradle
OpenCms Days 2012 - Developing OpenCms with GradleOpenCms Days 2012 - Developing OpenCms with Gradle
OpenCms Days 2012 - Developing OpenCms with Gradle
Alkacon Software GmbH & Co. KG
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with Gradle
Ryan Cuprak
 
Grunt & Front-end Workflow
Grunt & Front-end WorkflowGrunt & Front-end Workflow
Grunt & Front-end Workflow
Pagepro
 
Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]
Ryan Cuprak
 
Gradle - Build system evolved
Gradle - Build system evolvedGradle - Build system evolved
Gradle - Build system evolved
Bhagwat Kumar
 
What's new in Gradle 4.0
What's new in Gradle 4.0What's new in Gradle 4.0
What's new in Gradle 4.0
Eric Wendelin
 
Eclipse Buildship DemoCamp Hamburg (June 2015) with additional screenshots
Eclipse Buildship DemoCamp Hamburg (June 2015)  with additional screenshotsEclipse Buildship DemoCamp Hamburg (June 2015)  with additional screenshots
Eclipse Buildship DemoCamp Hamburg (June 2015) with additional screenshots
simonscholz
 
Android gradle-build-system-overview
Android gradle-build-system-overviewAndroid gradle-build-system-overview
Android gradle-build-system-overview
Kevin He
 
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
 
Eclipse Buildship JUG Hamburg
Eclipse Buildship JUG HamburgEclipse Buildship JUG Hamburg
Eclipse Buildship JUG Hamburg
simonscholz
 
Gradle - the Enterprise Automation Tool
Gradle  - the Enterprise Automation ToolGradle  - the Enterprise Automation Tool
Gradle - the Enterprise Automation Tool
Izzet Mustafaiev
 
JVM Web Frameworks Exploration
JVM Web Frameworks ExplorationJVM Web Frameworks Exploration
JVM Web Frameworks Exploration
Kevin H.A. Tan
 
Gradle,the new build system for android
Gradle,the new build system for androidGradle,the new build system for android
Gradle,the new build system for android
zhang ghui
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with Gradle
Ryan Cuprak
 
Grunt & Front-end Workflow
Grunt & Front-end WorkflowGrunt & Front-end Workflow
Grunt & Front-end Workflow
Pagepro
 
Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]
Ryan Cuprak
 
Ad

More from TO THE NEW | Technology (20)

10 Best Node.js Practices you Need to Know!
10 Best Node.js Practices you Need to Know!10 Best Node.js Practices you Need to Know!
10 Best Node.js Practices you Need to Know!
TO THE NEW | Technology
 
10 Pragmatic UX techniques for building smarter products:
10 Pragmatic UX techniques for building smarter products:10 Pragmatic UX techniques for building smarter products:
10 Pragmatic UX techniques for building smarter products:
TO THE NEW | Technology
 
12 Key points which make Swift more effective than Objective C
12 Key points which make Swift more effective than Objective C12 Key points which make Swift more effective than Objective C
12 Key points which make Swift more effective than Objective C
TO THE NEW | Technology
 
Gulp - The Streaming Build System
Gulp - The Streaming Build SystemGulp - The Streaming Build System
Gulp - The Streaming Build System
TO THE NEW | Technology
 
AWS Elastic Beanstalk
AWS Elastic BeanstalkAWS Elastic Beanstalk
AWS Elastic Beanstalk
TO THE NEW | Technology
 
Content migration to AEM
Content migration to AEMContent migration to AEM
Content migration to AEM
TO THE NEW | Technology
 
AWS CodeDeploy
AWS CodeDeployAWS CodeDeploy
AWS CodeDeploy
TO THE NEW | Technology
 
Big Data Expertise
Big Data ExpertiseBig Data Expertise
Big Data Expertise
TO THE NEW | Technology
 
An introduction to Object Oriented JavaScript
An introduction to Object Oriented JavaScriptAn introduction to Object Oriented JavaScript
An introduction to Object Oriented JavaScript
TO THE NEW | Technology
 
Object Oriented JavaScript - II
Object Oriented JavaScript - IIObject Oriented JavaScript - II
Object Oriented JavaScript - II
TO THE NEW | Technology
 
MongoDb and NoSQL
MongoDb and NoSQLMongoDb and NoSQL
MongoDb and NoSQL
TO THE NEW | Technology
 
(AWS) Auto Scaling : Evening Session by Amazon and IntelliGrape Software
(AWS) Auto Scaling : Evening Session by Amazon and IntelliGrape Software(AWS) Auto Scaling : Evening Session by Amazon and IntelliGrape Software
(AWS) Auto Scaling : Evening Session by Amazon and IntelliGrape Software
TO THE NEW | Technology
 
MongoDB using Grails plugin by puneet behl
MongoDB using Grails plugin by puneet behlMongoDB using Grails plugin by puneet behl
MongoDB using Grails plugin by puneet behl
TO THE NEW | Technology
 
Cloud Formation
Cloud FormationCloud Formation
Cloud Formation
TO THE NEW | Technology
 
BigData Search Simplified with ElasticSearch
BigData Search Simplified with ElasticSearchBigData Search Simplified with ElasticSearch
BigData Search Simplified with ElasticSearch
TO THE NEW | Technology
 
JULY IN GRAILS
JULY IN GRAILSJULY IN GRAILS
JULY IN GRAILS
TO THE NEW | Technology
 
Grails Spock Testing
Grails Spock TestingGrails Spock Testing
Grails Spock Testing
TO THE NEW | Technology
 
Introduction to Kanban
Introduction to KanbanIntroduction to Kanban
Introduction to Kanban
TO THE NEW | Technology
 
Introduction to Heroku
Introduction to HerokuIntroduction to Heroku
Introduction to Heroku
TO THE NEW | Technology
 
Node JS
Node JSNode JS
Node JS
TO THE NEW | Technology
 
10 Best Node.js Practices you Need to Know!
10 Best Node.js Practices you Need to Know!10 Best Node.js Practices you Need to Know!
10 Best Node.js Practices you Need to Know!
TO THE NEW | Technology
 
10 Pragmatic UX techniques for building smarter products:
10 Pragmatic UX techniques for building smarter products:10 Pragmatic UX techniques for building smarter products:
10 Pragmatic UX techniques for building smarter products:
TO THE NEW | Technology
 
12 Key points which make Swift more effective than Objective C
12 Key points which make Swift more effective than Objective C12 Key points which make Swift more effective than Objective C
12 Key points which make Swift more effective than Objective C
TO THE NEW | Technology
 
An introduction to Object Oriented JavaScript
An introduction to Object Oriented JavaScriptAn introduction to Object Oriented JavaScript
An introduction to Object Oriented JavaScript
TO THE NEW | Technology
 
(AWS) Auto Scaling : Evening Session by Amazon and IntelliGrape Software
(AWS) Auto Scaling : Evening Session by Amazon and IntelliGrape Software(AWS) Auto Scaling : Evening Session by Amazon and IntelliGrape Software
(AWS) Auto Scaling : Evening Session by Amazon and IntelliGrape Software
TO THE NEW | Technology
 
MongoDB using Grails plugin by puneet behl
MongoDB using Grails plugin by puneet behlMongoDB using Grails plugin by puneet behl
MongoDB using Grails plugin by puneet behl
TO THE NEW | Technology
 
BigData Search Simplified with ElasticSearch
BigData Search Simplified with ElasticSearchBigData Search Simplified with ElasticSearch
BigData Search Simplified with ElasticSearch
TO THE NEW | Technology
 

Recently uploaded (20)

Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfComplete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Software Company
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Impelsys Inc.
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
tecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdftecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdf
fjgm517
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...
Vishnu Singh Chundawat
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfComplete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Software Company
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Impelsys Inc.
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025Splunk Security Update | Public Sector Summit Germany 2025
Splunk Security Update | Public Sector Summit Germany 2025
Splunk
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
tecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdftecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdf
fjgm517
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul Shares 5 Steps to Implement AI Agents for Maximum Business Efficien...
Noah Loul
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...
Vishnu Singh Chundawat
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 

Grails Spring Boot

  • 3. AGENDA 1. What and why? 2. Key features ofSpring boot 3. Prototyping usingCLI 4. Gradle primer 5. Managing profiles aka environment in grails 6. Using Spring data libraries e.g. MongoDB 7. UsingGORM 8. Presentation layer 9. UsingGSP
  • 4. • Its not a replacement for Spring framework but it presents a small surface area for usersto approach and extract value from the rest of Spring • Spring-boot provides a quick way to create a Spring based application from dependency management to convention over configuration • Grails 3.0will be based on Spring Boot WHAT & WHY?
  • 5. • Stand-alone Springapplications • No code generation/ No XML Config • Automatic configuration by creating sensible defaults • Starterdependencies • Structure your code as you like • Supports Gradle andMaven • Common non-functional requirements for a "real" application - embedded servers, - security, metrics, healthchecks - externalized configuration KEY FEATURES
  • 6. • Quickest way to get a spring app off the ground • Allows you to run groovy scripts without much boilerplate code • Not recommended forproduction RAPID PROTOTYPING : SPRING CLI
  • 9. • One-stop-shop for all the Spring and related technology • A set of convenient dependency descriptors • Contain a lot of the dependencies that you need to get a project up and runningquickly • All starters follow a similarnaming pattern; • spring-boot-starter-* • Examples -spring-boot-starter-web - spring-boot-starter-data-rest - spring-boot-starter-security - spring-boot-starter-amqp - spring-boot-starter-data-jpa - spring-boot-starter-data-elasticsearch - spring-boot-starter-data-mongodb - spring-boot-starter-actuator STARTER POMs
  • 11. LETS GO BEYOND PROTOTYPING : GRADLE
  • 12. task hello <<{ println "Hello!!!!" } task greet<<{ println "Welocome Mr.Kumar" } task intro(dependsOn: hello)<<{ println "I'mGradle" } hello <<{println "Hello extended!!!!" } greet.dependsOn hello,intro // gradletasks // gradleintro :listall the available tasks :executes introtask // gradle -q greet :bare build output // gradle --daemon hello:subsequent execution wil be fast BUILD.GRADLE
  • 13. apply plugin:"groovy" //look for sources in src/main/groovyfolder //inherits java plugin: src/main/javafolder // tasks compileJava, compileGroovy, build, clean sourceCompatibility =1.6 repositories { mavenCentral() } dependencies { compile 'org.codehaus.groovy:groovy-all:2.3.6' compile "org.apache.commons:commons-lang3:3.0.1" testCompile "junit:unit:4.+" } BUILD.GRADLE: USING PLUGIN AND ADDING DEPENDENCIES
  • 14. apply plugin:'groovy' apply plugin:'idea' apply plugin:'spring-boot' buildscript{ repositories {mavenCentral()} dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:1.1.8.RELEASE") classpath 'org.springframework:springloaded:1.2.0.RELEASE' } } idea { module {inheritOutputDirs =false outputDir =file("$buildDir/classes/main/") } } repositories {mavenCentral() } dependencies { compile 'org.codehaus.groovy:groovy-all' compile 'org.springframework.boot:spring-boot-starter-web' } BUILD.GRADLE: FOR SPRING BOOT APP WITH HOT RELOADING
  • 15. • Put application.properties/application.yml somewhere in classpath • Easy one: src/main/resourcesfolder ENVIRONMENT AND PROFILE AKA GRAILS CONFIG
  • 16. Using ConfigurationProperties annotation import org.springframework.boot.context.properties.ConfigurationProperties importorg.springframework.stereotype.Component @Component @ConfigurationProperties(prefix="app") class AppInfo { String name Stringversion } Using Valueannotation importorg.springframework.beans.factory.annotation.Value importorg.springframework.stereotype.Component @Component classAppConfig{ @Value('${app.name}') StringappName @Value('${server.port}') Integerport } BINDING PROPERTIES
  • 17. OS envvariable export SPRING_PROFILES_ACTIVE=development export SERVER_PORT=8090 gradle bootRun java -jarbuild/libs/demo-1.0.0.jar with a -D argument (remember to put it before the main class or jararchive) java -jar -Dspring.profiles.active=development build/libs/dem-1.0.0.jar java -jar -Dserver.port=8090build./libs/demo-1.0.0.jar EXAMPLES
  • 18. • Add dependency compile 'org.springframework.boot:spring-boot-starter-data-mongodb' • Configure database URL spring.data.mongodb.uri=mongodb://localhost/springtestdev • Add entityclass importorg.springframework.data.annotation.Id; classPerson{@IdStringid, Stringname} • Add repositoryinterface importorg.springframework.data.mongodb.repository.MongoRepository public interface PersonRepositoryextendsMongoRepository<Person, String> {} • Autowire and use like charm @AutowiredPersonRepository personRepository personRepository.save(new Person(name:'SpringBoot')) personRepository.findAll() personRepository.count() USING SPRING DATA
  • 19. • Add dependencies to use GORM-Hibernate compile 'org.springframework.boot:spring-boot-starter-data-jpa' compile 'org.grails:gorm-hibernate4-spring-boot:1.1.0.RELEASE' runtime 'com.h2database:h2' //for h2database • Add entity [email protected] importgrails.persistence.Entity @Entity class Person{ Stringname; Integerage static constraints ={ name blank:false age min:15 } } • For GORM MongoDB use the following dependencies compile 'org.grails:gorm-mongodb-spring-boot:1.1.0.RELEASE' NEXT LEVEL PERSISTENCE WITH GORM
  • 20. • JSP/JSTL • Thymeleaf • Freemarker • Velocity • Tiles • GSP • Groovy TemplateEngine SERVER SIDE VIEW TEMPLATE LIBRARIES
  • 21. • Very limited existing tags available https://github.com/grails/grails-boot/issues/3 • Add dependency compile "org.grails:grails-gsp-spring-boot:1.0.0.RC1" compile "org.grails:grails-web:2.4.0.M2" • Put gsptemplates in resources/templates folder GSP
  • 22. • Sample requesthandler @RequestMapping("/show/{id}") public ModelAndView show(@PathVariableLong id){ Person person =Person.read(id) if(person) { new ModelAndView("/person/show",[personInstance:Person.get(id)]) }else{ log.info "No entity fount for id:"+id newModelAndView("redirect:/person/list") } } GSP CONTINUED
  • 23. @grails.gsp.TagLib @org.springframework.stereotype.Component class ApplicationTagLib{ static namespace ="app" def paginate ={attrs -> String action =attrs.action Integer total =attrs.total Integer currentPage =attrs.currentPage ?:1 Integer pages =(total / 10)+1 out <<render(template:"/shared/pagination", model: [action: action, total:total, currentPage:currentPage, pages:pages] ) } } <app:paginate total="${personInstanceCount ?:0}" currentPage="${currentPage}" action="/person/list"/> GRAILS TAGLIB
  • 24. Packaging as jar with embedded tomcat $gradle build $java -jarbuild/libs/mymodule-0.0.1-SNAPSHOT.jar Packaging as war :configurebuild.groovy //... apply plugin:'war' war{ baseName ='myapp' version ='0.5.0' } //.... configurations { providedRuntime } dependencies{ compile("org.springframework.boot:spring-boot-starter-web") providedRuntime("org.springframework.boot:spring-boot- starter-tomcat") // ... } $gradle war PACKAGING EXECUTABLE JAR AND WAR FILES
  • 25. Contact us Our Office Client Location Click Here To Know More! Have more queries on Grails? Talk to our GRAILS experts Now! Talk To Our Experts Here's how the world's biggest Grails team is building enterprise applications on Grails!