Grails – In Depth Graeme Rocher, CTO – G2One Inc TS-5764
<ul><ul><li>Learn how to dramatically simplify web development on the Java™ platform with Groovy & Grails </li></ul></ul>
Your Speaker <ul><li>Graeme Rocher </li></ul><ul><ul><li>Project Lead of Grails </li></ul></ul><ul><ul><li>CTO of G2One In...
Agenda <ul><li>Introduction to Groovy & Grails </li></ul><ul><li>Why Groovy? </li></ul><ul><li>Getting Started </li></ul><...
What is Groovy? <ul><li>Groovy is a dynamic language for the Java Virtual Machine (JVM™) </li></ul><ul><li>Takes inspirati...
What is Grails? <ul><li>A Web  platform  that implements the full stack from build system down to ORM layer </li></ul><ul>...
Solid Foundations <ul><li>Spring </li></ul><ul><li>Hibernate </li></ul><ul><li>Groovy </li></ul><ul><li>Quartz </li></ul><...
Why Groovy & Grails? <ul><li>All the power  of frameworks from other platforms like Ruby on Rails, Django and TurboGears <...
Getting Started <ul><li>Download from  http:// grails.org /Download </li></ul><ul><li>Extract zip to disk </li></ul><ul><l...
Grails – The Basics <ul><li>Creating and Running </li></ul><ul><li>Grails will load by default with an in-memory HSQLDB </...
Getting Started with Grails Creating and Running
A Grails Project Ant Build JAR files Grails Sources Web Sources Java Sources
Grails Headline Features <ul><li>GORM - ORM Layer built on Hibernate </li></ul><ul><li>Rich conversation support with Web ...
Grails – The Platform <ul><li>Java 2 Platform, Enterprise Edition (J2EE™ platform)  was too complex. Spring and Hibernate ...
Easy ORM with GORM class Album { String title String artist Date releaseDate static hasMany = [songs:Song] } class Song { ...
GORM in Action Querying and Persistence with GORM
The Grails Console Activate with:  grails console
Persistence Methods <ul><li>GORM classes automatically provided with CRUD capabilities: </li></ul><ul><ul><li>save </li></...
Dynamic Finders & Criteria def albums = Album. list () def recentAlbums =  Album. findAllByReleaseDateGreaterThan (new Dat...
GORM Features <ul><li>Dynamic finder and persistence methods </li></ul><ul><li>Criteria with a Groovy builder </li></ul><u...
Easy MVC with Grails <ul><li>Comprehensive MVC framework built on Spring </li></ul><ul><ul><li>Command objects </li></ul><...
Mapping URLs to Controllers <ul><li>Default URL Mapping: </li></ul><ul><li>Maps patterns like  /album/list  to  list  acti...
Controllers in Action Easy MVC with Grails
Grails Controllers class AlbumController { def  search  = { def albums= Album.findByTitleLike( &quot;%${params.q}%&quot; )...
Trivial Tag Libraries <ul><li>Tag Code </li></ul><ul><li>View </li></ul>def  cache = {attrs,body->  def  content= store[ a...
Web Services <ul><li>Grails features built in support for REST </li></ul><ul><ul><li>REST = Representational State Transfe...
RESTful URL Mappings <ul><li>Maps to actions based on HTTP method </li></ul>&quot; /$controller/$id? &quot; { action =  [G...
RESTful Marshalling Easy Web Services with Grails
RESTful Marshalling <ul><li>To Marshall: </li></ul><ul><li>To Unmarshall: </li></ul>import grails.converters.* … def album...
Content Negotiation <ul><li>Process different request types based on  ACCEPT  /  CONTENT_TYPE  header: </li></ul>def a = A...
Easy Ajax with Adaptive Tags <ul><li>Prototype enabled by default </li></ul><ul><ul><li>Yahoo UI and Dojo available as plu...
Ajax Plug-ins a Plenty <ul><li>Echo 2:  http://grails.org/Echo2+Plugin </li></ul><ul><li>GWT:  http:// grails.org/GWT+Plug...
Summary <ul><li>Grails is not just a web framework, but a web platform </li></ul><ul><li>Grails is the next generation abs...
For More Information <ul><li>Grails </li></ul><ul><ul><li>TS-5793 – Groovy and Grails: Changing the Landscape of Java Plat...
Grails – in Depth Graeme Rocher TS-5764
Upcoming SlideShare
Loading in...5
×

JavaOne 2008 - TS-5764 - Grails in Depth

13,855

Published on

Published in: Technology
2 Comments
25 Likes
Statistics
Notes
  • nice mr.vijay thanks
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • nice and usfull 4 me
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
13,855
On Slideshare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
596
Comments
2
Likes
25
Embeds 0
No embeds

No notes for slide

Transcript of "JavaOne 2008 - TS-5764 - Grails in Depth"

  1. 1. Grails – In Depth Graeme Rocher, CTO – G2One Inc TS-5764
  2. 2. <ul><ul><li>Learn how to dramatically simplify web development on the Java™ platform with Groovy & Grails </li></ul></ul>
  3. 3. Your Speaker <ul><li>Graeme Rocher </li></ul><ul><ul><li>Project Lead of Grails </li></ul></ul><ul><ul><li>CTO of G2One Inc – The Groovy/Grails Company </li></ul></ul><ul><ul><li>Member of JSR-241 Expert Group </li></ul></ul><ul><ul><li>Author of “The Definitive Guide to Grails” </li></ul></ul>
  4. 4. Agenda <ul><li>Introduction to Groovy & Grails </li></ul><ul><li>Why Groovy? </li></ul><ul><li>Getting Started </li></ul><ul><li>Simplified ORM </li></ul><ul><li>The Web Layer </li></ul><ul><li>Web Services </li></ul><ul><li>Easy Ajax </li></ul>
  5. 5. What is Groovy? <ul><li>Groovy is a dynamic language for the Java Virtual Machine (JVM™) </li></ul><ul><li>Takes inspiration from Small Talk, Python and Ruby </li></ul><ul><li>Integrates with the Java language and platform at every level </li></ul>
  6. 6. What is Grails? <ul><li>A Web platform that implements the full stack from build system down to ORM layer </li></ul><ul><li>Leverages existing technologies like Spring, Hibernate, Quartz etc. avoiding re-inventing the wheel </li></ul><ul><li>Features and extensible plug-in system and an environment for runtime configuration built on Spring </li></ul>
  7. 7. Solid Foundations <ul><li>Spring </li></ul><ul><li>Hibernate </li></ul><ul><li>Groovy </li></ul><ul><li>Quartz </li></ul><ul><li>SiteMesh </li></ul><ul><li>Jetty </li></ul><ul><li>Apache Ant </li></ul><ul><li>Java Technology </li></ul>
  8. 8. Why Groovy & Grails? <ul><li>All the power of frameworks from other platforms like Ruby on Rails, Django and TurboGears </li></ul><ul><li>Built from the ground up on Java technologies . </li></ul><ul><ul><li>Design for Java technology by Java technology developers </li></ul></ul><ul><li>Leverage existing tools and technologies </li></ul><ul><ul><li>Distributed caches, replicating technologies etc. </li></ul></ul><ul><ul><li>Profiling, monitoring and debugging tools </li></ul></ul><ul><ul><li>IDEs </li></ul></ul><ul><li>Reduce context switching </li></ul>
  9. 9. Getting Started <ul><li>Download from http:// grails.org /Download </li></ul><ul><li>Extract zip to disk </li></ul><ul><li>Set GRAILS_HOME variable to location on disk </li></ul><ul><li>Add $GRAILS_HOME/bin to your environment variables </li></ul><ul><li>Download from http:// groovy.codehaus.org </li></ul><ul><li>Extract zip to disk </li></ul><ul><li>Set GROOVY_HOME variable to location on disk </li></ul><ul><li>Add $GROOVY_HOME/bin to your environment variables </li></ul>
  10. 10. Grails – The Basics <ul><li>Creating and Running </li></ul><ul><li>Grails will load by default with an in-memory HSQLDB </li></ul><ul><li>The default container is an embedded Jetty Container </li></ul><ul><li>Grails is configured for automatic hot-reloading at runtime </li></ul><ul><li>WAR’ing and Deploying </li></ul><ul><li>Grails deploys as a standard WAR file deployable onto modern Java EE platform containers </li></ul><ul><li>In production mode Grails is fully compiled byte code </li></ul>> grails create-app gtunes > cd gtunes > grails run-app > grails run-war // or > grails war
  11. 11. Getting Started with Grails Creating and Running
  12. 12. A Grails Project Ant Build JAR files Grails Sources Web Sources Java Sources
  13. 13. Grails Headline Features <ul><li>GORM - ORM Layer built on Hibernate </li></ul><ul><li>Rich conversation support with Web Flow </li></ul><ul><li>Domain Specific Languages </li></ul><ul><ul><li>Validation Rules </li></ul></ul><ul><ul><li>ORM Mapping </li></ul></ul><ul><ul><li>URL Mapping </li></ul></ul><ul><li>Vibrant Plug-in community </li></ul><ul><ul><li>http:// grails.org/Plugins </li></ul></ul><ul><ul><li>Over 40 user contributed plug-ins </li></ul></ul><ul><ul><li>Everything from web services to RIA with Flex </li></ul></ul>
  14. 14. Grails – The Platform <ul><li>Java 2 Platform, Enterprise Edition (J2EE™ platform) was too complex. Spring and Hibernate reduced that complexity and became very successful </li></ul><ul><li>Grails represents the next level of abstraction for the Java EE platform </li></ul><ul><li>Built on Spring and Hibernate, but dramatically simplifying their usage </li></ul>
  15. 15. Easy ORM with GORM class Album { String title String artist Date releaseDate static hasMany = [songs:Song] } class Song { String title Double duration } table - album table - song GORM classes, also known as domain classes, go in the domain directory id title artist release_date id title duration album_id
  16. 16. GORM in Action Querying and Persistence with GORM
  17. 17. The Grails Console Activate with: grails console
  18. 18. Persistence Methods <ul><li>GORM classes automatically provided with CRUD capabilities: </li></ul><ul><ul><li>save </li></ul></ul><ul><ul><li>get </li></ul></ul><ul><ul><li>delete </li></ul></ul>new Album(title:&quot;Tourist&quot;, artist:&quot;Athlete&quot;) .addToSongs(title:&quot;Wires&quot;, duration:4.20) . save() def album = Album. get(1) album.title =&quot;Hot Fuss&quot; album. save() album. delete()
  19. 19. Dynamic Finders & Criteria def albums = Album. list () def recentAlbums = Album. findAllByReleaseDateGreaterThan (new Date()-7) def albumsStartingWithA = Album. findAllByTitleLike ( &quot;A%&quot;) def albumsWithSongsAboutSummer = Album. withCriteria { songs { like(&quot;title&quot;, &quot;%Summmer%&quot;) } } List all records Form method expressions Use “like” queries Construct criteria on the fly to query associations
  20. 20. GORM Features <ul><li>Dynamic finder and persistence methods </li></ul><ul><li>Criteria with a Groovy builder </li></ul><ul><li>Object-relational Mapping DSL </li></ul><ul><ul><li>Caching </li></ul></ul><ul><ul><li>Legacy mapping </li></ul></ul><ul><ul><li>Locking strategy (optimistic/pessimistic) </li></ul></ul><ul><li>Built on Hibernate </li></ul>+
  21. 21. Easy MVC with Grails <ul><li>Comprehensive MVC framework built on Spring </li></ul><ul><ul><li>Command objects </li></ul></ul><ul><ul><li>Data binding </li></ul></ul><ul><ul><li>Zero configuration </li></ul></ul><ul><ul><li>URL Mappings </li></ul></ul><ul><ul><li>Groovy Server Pages (GSP) </li></ul></ul><ul><ul><li>Tag libraries </li></ul></ul><ul><ul><li>CRUD (Scaffolding) </li></ul></ul><ul><ul><li>Internationalization (i18n) </li></ul></ul>
  22. 22. Mapping URLs to Controllers <ul><li>Default URL Mapping: </li></ul><ul><li>Maps patterns like /album/list to list action of AlbumController </li></ul>&quot; /$controller/$action?/$id? ”() UrlMappings file defines the default mapping, but is completely configurable
  23. 23. Controllers in Action Easy MVC with Grails
  24. 24. Grails Controllers class AlbumController { def search = { def albums= Album.findByTitleLike( &quot;%${params.q}%&quot; ) [albumResults:albums] } } Return a model as a map Actions are properties assigned a block or closure Controllers go in the “controllers” directory
  25. 25. Trivial Tag Libraries <ul><li>Tag Code </li></ul><ul><li>View </li></ul>def cache = {attrs,body-> def content= store[ attrs.id ] if (!content) content = body() store[ attrs.id ]= content } out << content } <g: cache id= &quot;test&quot;> expensive lazy loaded content goes here </g: cache > Write to the response Read tag attributes Invoke the body Tag name matches closure name Pass tag attributes Tag libraries go in the taglib directory
  26. 26. Web Services <ul><li>Grails features built in support for REST </li></ul><ul><ul><li>REST = Representational State Transfer </li></ul></ul><ul><li>Optional support for SOAP via plug-ins (another example of not re-inventing the wheel!) </li></ul><ul><ul><li>Xfire – http:// grails.org/XFire+plugin </li></ul></ul><ul><ul><li>Axis 2 – http://grails.org/Apache+Axis2+Plugin </li></ul></ul>
  27. 27. RESTful URL Mappings <ul><li>Maps to actions based on HTTP method </li></ul>&quot; /$controller/$id? &quot; { action = [GET:&quot;show&quot;, POST:&quot;update&quot;, PUT:&quot;save&quot;] } Defined in URLMappings.groovy file
  28. 28. RESTful Marshalling Easy Web Services with Grails
  29. 29. RESTful Marshalling <ul><li>To Marshall: </li></ul><ul><li>To Unmarshall: </li></ul>import grails.converters.* … def album = Album.get(params.id) render album as XML def album = new Album(params.album) send XML to the response Read XML from the request when the root node is <album>
  30. 30. Content Negotiation <ul><li>Process different request types based on ACCEPT / CONTENT_TYPE header: </li></ul>def a = Album.get(params.id) withFormat { html album:a xml { render a as XML } json { render a as JSON } } Request format obtained from ACCEPT header Different response sent based on content type Supported content types configurable in Config.groovy
  31. 31. Easy Ajax with Adaptive Tags <ul><li>Prototype enabled by default </li></ul><ul><ul><li>Yahoo UI and Dojo available as plug-ins! </li></ul></ul>< g:remoteLink action=&quot;showAlbum&quot; /> < g:formRemote action=&quot;updateAlbum&quot; /> < g:remoteField action=&quot;changeTitle&quot; update=&quot;titleDiv&quot; name=&quot;title&quot; value=&quot;${album?.title}&quot;/>
  32. 32. Ajax Plug-ins a Plenty <ul><li>Echo 2: http://grails.org/Echo2+Plugin </li></ul><ul><li>GWT: http:// grails.org/GWT+Plugin </li></ul><ul><li>OpenLaszlo: http:// grails.org/OpenLaszlo+plugin </li></ul><ul><li>ZK: http:// grails.org/ZK+Plugin </li></ul><ul><li>Flex: http:// grails.org/Flex+Plugin </li></ul><ul><li>ULC: http:// grails.org/ULC+Plugin </li></ul><ul><li>Yahoo UI: http:// grails.org/YUI+Plugin </li></ul><ul><li>DWR: http:// grails.org/DWR+Plugin </li></ul>
  33. 33. Summary <ul><li>Grails is not just a web framework, but a web platform </li></ul><ul><li>Grails is the next generation abstraction of the Java EE platform built on Spring and Hibernate </li></ul><ul><li>Groovy and Grails integrate tightly with Java technology, the Java Virtual Machine at every level providing an easy migration path </li></ul><ul><li>Grails == Simplifying Java EE platform on the web </li></ul>
  34. 34. For More Information <ul><li>Grails </li></ul><ul><ul><li>TS-5793 – Groovy and Grails: Changing the Landscape of Java Platform, Enterprise Edition (Java EE Platform) Patterns, TS-6457 - Choosing Your Java Technology-Based Web Framework: A Comparison </li></ul></ul><ul><ul><li>Web Site: http:// grails.org </li></ul></ul><ul><ul><li>User Guide: http://grails.org/doc/1.0.x/ </li></ul></ul><ul><li>Groovy </li></ul><ul><ul><li>Sessions, Panel Discussions, BOFs: PAN-5435, TS-5815, TS-6050, TS-5274, BOF-5102, BOF-5110, TS-5693, BOF-5101 </li></ul></ul><ul><ul><li>http:// groovy.codehaus.org </li></ul></ul>
  35. 35. Grails – in Depth Graeme Rocher TS-5764
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×