groovy and grails talk
DESCRIPTION
Prabhu talking about Groovy and Grails at WebCamp IndiaTRANSCRIPT
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
Features
• Closures
• Dynamic Methods
• List & Maps
• Better XML/Swing Capabilities
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.
Closure (Contd)
square = { it * it }
square (4)
Output = 16
“it” implicit parameter representing the
passed value.
Closure (Contd)
square {
it * it
return 3
}
square (4)
Output = 3 (Since there is an explicit
return statement!)
Closure (Contd)
square = { param1 ->
param1 * param1
}
square (3)
Output = 9
Param1 – Named parameter
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
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!
Generic Factorial
fact = 1
fun = { n->
2.upto(n) { num ->
fact *= num
}
}
fun(5)
print fact
Dynamic methods
class webcamp {
def haveTea() {
println "Time for tea"
}
}
camp = new webcamp()
camp.haveTea()
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()
Lists and Maps
• Like python
List = [2,3,4]
Map = [„a‟ : 2, „b‟ : new Date()]
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.
Create your first app
• Set environmental variables
GRAILS_HOME and PATH
• grails create-app firstapp
Directory Structure
Controllers
Domain
Views
Sources
Test cases
J2EE Web Appln.
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
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”]
Features (Contd)
• Dynamic finder methodsdef search = {
render(view : „list‟,
model : [userList :
User.findAllByUsernameLike (
„%‟ + params.username + „%‟)
]
)
}
• User.findAllByUsernameLikeAndPasswordLike
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])
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
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!
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>
Scalability
• Thanks to Spring and Hibernate, Grails
is highly scalable and already enterprise
ready!
RoR Competition?
• No.
– Instead going to compete with Java based
frameworks like struts 2, JSF, Seam.
Should I learn?
• If you are a Java guy, then yes.
• Companies like Oracle have already
started showing full support!
Thanks
Q & A