groovy and grails talk

27
Groovy and Grails Prabhu [email protected]

Upload: desistartups

Post on 17-May-2015

3.497 views

Category:

Business


1 download

DESCRIPTION

Prabhu talking about Groovy and Grails at WebCamp India

TRANSCRIPT

Page 1: Groovy and Grails talk

Groovy and Grails

Prabhu

[email protected]

Page 2: Groovy and Grails talk

Groovy

• is an agile and dynamic language for JVM

• Features inspired from Python, Ruby …

• Seamless integration with all existing

Java classes and libraries.

• Groovysh and GroovyConsole

• Can run on .Net 2.0 using IKVM

• Latest version 1.5

• http://groovy.codehaus.org

Page 3: Groovy and Grails talk

Features

• Closures

• Dynamic Methods

• List & Maps

• Better XML/Swing Capabilities

Page 4: Groovy and Grails talk

Closure

• Statements enclosed within curly braces

“ { } “

• Can be passed around like variables

• Return value either using return

keyword or the value of last executed

statement.

Page 5: Groovy and Grails talk

Closure (Contd)

square = { it * it }

square (4)

Output = 16

“it” implicit parameter representing the

passed value.

Page 6: Groovy and Grails talk

Closure (Contd)

square {

it * it

return 3

}

square (4)

Output = 3 (Since there is an explicit

return statement!)

Page 7: Groovy and Grails talk

Closure (Contd)

square = { param1 ->

param1 * param1

}

square (3)

Output = 9

Param1 – Named parameter

Page 8: Groovy and Grails talk

Factorial using closures

fact = 1

for (i in 2..5) {

fact *= i

}

print fact

fact = 1

(2..5).each { number ->

fact *= number

}

print fact

// (2..5) = Range

Page 9: Groovy and Grails talk

Factorial again!

fact = 1

2.upto(5) { num ->

fact *= num

}

print fact

// Numbers are treated as object.

• upto method generates all number objects

• To each object, the closure gets passed around!

Page 10: Groovy and Grails talk

Generic Factorial

fact = 1

fun = { n->

2.upto(n) { num ->

fact *= num

}

}

fun(5)

print fact

Page 11: Groovy and Grails talk

Dynamic methods

class webcamp {

def haveTea() {

println "Time for tea"

}

}

camp = new webcamp()

camp.haveTea()

Page 12: Groovy and Grails talk

Dynamic methods (Contd)• Add a new method “haveSamosa”

class webcamp {

def haveTea() {

println "Time for tea“

}

}

camp = new webcamp()

camp.haveTea()

webcamp.metaClass.haveSamosa = { ->

println "Have Samosa also"

}

camp = new webcamp() // Create a fresh object since the class has changed!

camp.haveSamosa()

Page 13: Groovy and Grails talk

Lists and Maps

• Like python

List = [2,3,4]

Map = [„a‟ : 2, „b‟ : new Date()]

Page 14: Groovy and Grails talk

Grails

• Web Framework inspired by RoR

• Latest version is 1.0.1.– The one in the DVD is 1.0 and doesn‟t run cleanly in

windows!

• Grails = Spring MVC 2.5.1 + Hibernate 3 + SiteMesh 2.3

• Newbie‟s are unaware that Grails is full and full Spring!

• Provides several commands to auto generate code.

• Comes bundled with HSQLDB.

Page 15: Groovy and Grails talk

Create your first app

• Set environmental variables

GRAILS_HOME and PATH

• grails create-app firstapp

Page 16: Groovy and Grails talk

Directory Structure

Controllers

Domain

Views

Sources

Test cases

J2EE Web Appln.

Page 17: Groovy and Grails talk

First app Demo

• grails create-domain-class <name>

• grails create-controller <name>

• grails run-app (Starts inbuilt Jetty 6.1.4

server)

• Visit http://localhost:8080/firstapp

• Demo

Page 18: Groovy and Grails talk

Features

• Both gsp and jsp are supported.

• Specify constraintsstatic constraints = {

username (minLength : 3, maxLength: 8, blank:false)

password(minLength : 5, maxLength:9, blank:false)

}

• Specify Optional fieldsstatic optionals = [“middle_name”, “addr2”]

Page 19: Groovy and Grails talk

Features (Contd)

• Dynamic finder methodsdef search = {

render(view : „list‟,

model : [userList :

User.findAllByUsernameLike (

„%‟ + params.username + „%‟)

]

)

}

• User.findAllByUsernameLikeAndPasswordLike

Page 20: Groovy and Grails talk

Features (Contd)

• Create Advanced Search criteria using Hibernate Criteria Builder.

def criteria = User.createCriteria() // Dynamic method

def results = criteria {

and (

like („username‟ , „%‟ + params.username + „%‟)

le(„age‟, params.age)

)

}

Render(view:‟list‟, model:[userList : results])

Page 21: Groovy and Grails talk

Features (Contd)

• Flash scope - Data will be stored as

name-value pairs for current request

and the next request.

• Create custom tags just by creating a

new file in grails-

app/taglib/<name>TagLib.groovy

Page 22: Groovy and Grails talk

Features (Contd)

• AJAX Support– Supports prototype, YUI, DOJO

– Use render method in your groovy code to render text, HTML, JSON or OpenRicoResponse XMLs

• Plays nicely with flex– Simply add this

static expose = [“flex-remoting”]

– Automatic flex based CRUD generation and Domain class to AS3 compilation coming up!

Page 23: Groovy and Grails talk

Features (Contd)

• Plays nicely with EJB

– http://www.infoq.com/articles/grails-ejb-

tutorial

• Has lots of plugins already!

– grails install-plugin <name>

– grails create-plugin <name>

Page 24: Groovy and Grails talk

Scalability

• Thanks to Spring and Hibernate, Grails

is highly scalable and already enterprise

ready!

Page 25: Groovy and Grails talk

RoR Competition?

• No.

– Instead going to compete with Java based

frameworks like struts 2, JSF, Seam.

Page 26: Groovy and Grails talk

Should I learn?

• If you are a Java guy, then yes.

• Companies like Oracle have already

started showing full support!

Page 27: Groovy and Grails talk

Thanks

Q & A