groovy & grails scripting for modern web...
TRANSCRIPT
![Page 1: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/1.jpg)
Groovy & GrailsScripting for Modern Web Applications
Rohit Nayak
Talentica Software
![Page 2: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/2.jpg)
Agenda Demo: Quick intro to Grails Scripting, Web Applications and Grails/Groovy REST service in Grails
− Demo
− Internals
Web Client in Grails− Demo
− Internals
Perspective
![Page 3: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/3.jpg)
Demo
Quick Intro to Grails
![Page 4: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/4.jpg)
Maggi
grails create-app Maggi Domain class: Noodle, Packaging grails generate-all Noodle, Packaging grails run-app
![Page 5: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/5.jpg)
Web Frameworks with Scripting
Ruby on Rails (2004)
CakePHP (2005)
Django / Python (2005)
Groovy on Grails (2006)
![Page 6: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/6.jpg)
Power of these frameworks
Baked Experience
The Language
Agility / Productivity
![Page 7: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/7.jpg)
Baked Experience
Model View Controller Object-Relational Mapping Templates Layout URL rewriting Ajax support XML / JSON support
![Page 8: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/8.jpg)
The Language
Dynamic More expressive code Smaller code Native support for Lists, Hashmaps Lang. support for IO, Net, XML Idioms for common Design Patterns
![Page 9: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/9.jpg)
Agile
Scaffolding Unit tests No compile cycles Built-in webservers Fail faster!
![Page 12: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/12.jpg)
HelloWorld.javapublic class HelloWorld {
String name;
public void setName(String name){ this.name = name; }
public String getName() { return name; }
public String hello(){ return “Hello “+ name; }
public static void main(String args[]) {
HelloWorld helloWorld = new HelloWorld();
helloWorld.setName(“Java”);
System.out.println( helloWorld. hello() );
}
}
![Page 13: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/13.jpg)
HelloWorld.groovy
class HelloWorld {
String name
def hello() { "Hello $name" }
}
def helloWorld = new HelloWorld(name:"Groovy")
println helloWorld.hello()
![Page 14: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/14.jpg)
Key Groovy Features Java-like syntax Complements Java Object-oriented Targets Java VM (JSR-241)
− Invoke Java class within Groovy− Invoke Groovy class within Java
Dynamic Scripting (JSR-223) Brevity
![Page 15: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/15.jpg)
Brevity
Optional semicolons, package prefixes Automatic imports (java.util.*, java.net.*,
java.io.*, groovy…) GroovyBeans (generated accessors) Optional typing Optional return
![Page 16: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/16.jpg)
Groovy Gravy GStrings: ”$book.title: $book.author (${book.reviewers.length})”
Regular expressions: assert ‘12345’ =~ /\d+/
Only objects: primitives converted to Reference Types
Lists: def list = [1, 2, 'hello', new java.util.Date()]
Maps: def map = ['name':‘Indic Threads', 'location':‘Pune']
Closures [1,2,3].collect {it*2} ===> [2, 4, 6]
String literals – single, double, triple quotes
![Page 17: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/17.jpg)
Closures
Block of statements First class objects Parameters including default values Carries local context
def foo(n) { // method
return { n += it } // returns closure
}
def accumulator = foo(1) //curried closure
assert accumulator(2) == 3 //assert used for self-documenting, unit-testing
assert accumulator(1) == 4
![Page 18: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/18.jpg)
Dynamic Programming
Add methods, properties to classes/objects at run-time
Mixins to inject behaviour Can extend class field-access mechanism Dynamic method invocation
![Page 19: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/19.jpg)
Poolster
Online “football pools” application Entities: Game, User Game Stake, Option, Ends To join User chooses an Option REST Webservice backend Clients: iPhone, Grails, Android, Silverlight
![Page 20: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/20.jpg)
Demo
The Poolster Webservice
![Page 21: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/21.jpg)
Grails – Philosophy Convention over Configuration
− Magic directories
− Implicit table names, column names Don’t Repeat Yourself
− Database maps to domain
− hasMany defines relationship & declares variable
− Layout, form validations Lightweight
− Modify and F5 Strong shoulders
− Spring (Grails MVC, DI, Transactions)
− Hibernate (GORM)
− Ant, JUnit, SiteMesh
![Page 22: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/22.jpg)
Grails – Key Features
Database constraints, composition MySQL integration URL Mapping Authentication / Filters Bootstrapping Unit test Logging
![Page 23: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/23.jpg)
Demo
Poolster Web Client
![Page 24: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/24.jpg)
Grails Web Application
Custom Tag libraries Session variables Sitemesh layout Templates Internationalization
![Page 25: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/25.jpg)
Unseen Gravy
JUnit test cases, Mocking/Stubbing Web testing with Canoo Webtest Bootstrapping Pagination
![Page 26: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/26.jpg)
Cons
Learning curve Performance ?! Early adopter issues
![Page 27: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/27.jpg)
Scripted In Groovy
Canoo WebTest Tellurium Ant / Maven config files SoapUI script step Spring beans <YOUR APP HERE>
![Page 28: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/28.jpg)
Invoking Groovy Scriptsimport java.io.File;import groovy.lang.Binding;import groovy.util.GroovyScriptEngine;
public class ScriptEngineEmbedGroovy{public static void main(String args[]) throws Throwable{String[] paths = {"C:\\groovy"};GroovyScriptEngine gse = new GroovyScriptEngine(paths);Binding binding = new Binding();Object[] path = {"C:\\music\\mp3"};binding.setVariable("args",path);gse.run("Songs.groovy", binding);}
}
![Page 29: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/29.jpg)
Getting Started
groovy.codehaus.org grails.org Free e-books
− Beginning Groovy and Grails (Apress)− Getting started with Grails (InfoQ)
refcardz.com cheat sheets
ibm.com Mastering Grails, Practically Groovy
![Page 30: Groovy & Grails Scripting for Modern Web Applicationsj09.indicthreads.com/.../12/IndicThreads-Java-Webapps-with-Grails.pdf · Agenda Demo: Quick intro to Grails Scripting, Web Applications](https://reader031.vdocuments.mx/reader031/viewer/2022021512/5af780447f8b9a927191bd34/html5/thumbnails/30.jpg)
Thanks