Your SlideShare is downloading. ×
Groovy and Grails talk
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Groovy and Grails talk

3,477
views

Published on

Prabhu talking about Groovy and Grails at WebCamp India

Prabhu talking about Groovy and Grails at WebCamp India

Published in: Business, Technology

0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,477
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
137
Comments
0
Likes
6
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Groovy and Grails Prabhu prabhu@prabhu-s.com
  • 2. 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
  • 3. Features • Closures • Dynamic Methods • List & Maps • Better XML/Swing Capabilities
  • 4. 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.
  • 5. Closure (Contd) square = { it * it } square (4) Output = 16 “it” implicit parameter representing the passed value.
  • 6. Closure (Contd) square { it * it return 3 } square (4) Output = 3 (Since there is an explicit return statement!)
  • 7. Closure (Contd) square = { param1 -> param1 * param1 } square (3) Output = 9 Param1 – Named parameter
  • 8. Factorial using closures fact = 1 fact = 1 for (i in 2..5) { (2..5).each { number -> fact *= i fact *= number } } print fact print fact // (2..5) = Range
  • 9. 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!
  • 10. Generic Factorial fact = 1 fun = { n-> 2.upto(n) { num -> fact *= num } } fun(5) print fact
  • 11. Dynamic methods class webcamp { def haveTea() { println quot;Time for teaquot; } } camp = new webcamp() camp.haveTea()
  • 12. Dynamic methods (Contd) • Add a new method “haveSamosa” class webcamp { def haveTea() { println quot;Time for tea“ } } camp = new webcamp() camp.haveTea() webcamp.metaClass.haveSamosa = { -> println quot;Have Samosa alsoquot; } camp = new webcamp() // Create a fresh object since the class has changed! camp.haveSamosa()
  • 13. Lists and Maps • Like python List = [2,3,4] Map = [„a‟ : 2, „b‟ : new Date()]
  • 14. 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.
  • 15. Create your first app • Set environmental variables GRAILS_HOME and PATH • grails create-app firstapp
  • 16. Directory Structure Controllers Domain Views Sources Test cases J2EE Web Appln.
  • 17. 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
  • 18. Features • Both gsp and jsp are supported. • Specify constraints static constraints = { username (minLength : 3, maxLength: 8, blank:false) password(minLength : 5, maxLength:9, blank:false) } • Specify Optional fields static optionals = [“middle_name”, “addr2”]
  • 19. Features (Contd) • Dynamic finder methods def search = { render(view : „list‟, model : [userList : User.findAllByUsernameLike ( „%‟ + params.username + „%‟) ] ) } • User.findAllByUsernameLikeAndPassword Like
  • 20. 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])
  • 21. 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
  • 22. Features (Contd) • AJAX Support – Supports prototype, YUI, DOJO – Use render method in your groovy code to render text, HTML, JSON or OpenRico Response 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!
  • 23. 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>
  • 24. Scalability • Thanks to Spring and Hibernate, Grails is highly scalable and already enterprise ready!
  • 25. RoR Competition? • No. – Instead going to compete with Java based frameworks like struts 2, JSF, Seam.
  • 26. Should I learn? • If you are a Java guy, then yes. • Companies like Oracle have already started showing full support!
  • 27. Thanks Q&A

×