emily's picture
From emily rss RSS  subscribe Subscribe

Rapid Web Application Development with Grails 



Groovy & Grails
Getting Started
The Application Domain
Controllers
Groovy Servers Pages (GSP)
Tag Libraries

 

 
 
Tags:  Web  Application  Grails 
Views:  3254
Downloads:  41
Published:  August 25, 2007
 
0
download

Share plick with friends Share
save to favorite
Report Abuse Report Abuse
 
Related Plicks
Venkat Subramaniam   Agile Web Development With Grails

Venkat Subramaniam Agile Web Development With Grails

From: bobick
Views: 1288 Comments: 0
Venkat Subramaniam Agile Web Development With Grails
 
Agile Web Development With Grails

Agile Web Development With Grails

From: satrijo
Views: 1124 Comments: 0

 
J Grails08128 Pdf

J Grails08128 Pdf

From: soschne
Views: 199 Comments: 0
J Grails08128 Pdf
 
clodfoundrydoc.pdf

clodfoundrydoc.pdf

From: jocelee7
Views: 47 Comments: 0

 
clodfoundrydoc.pdf

clodfoundrydoc.pdf

From: backmanu
Views: 37 Comments: 0

 
Steven De Vjver   Grails In The Enterprise

Steven De Vjver Grails In The Enterprise

From: ecchang8
Views: 59 Comments: 0
Steven De Vjver Grails In The Enterprise
 
See all 
 
More from this user
Java One 2005 Technical

Java One 2005 Technical

From: emily
Views: 3216
Comments: 0

NSDI - Poland

NSDI - Poland

From: emily
Views: 2245
Comments: 0

Welcome to the Minnesota SharePoint User Group

Welcome to the Minnesota SharePoint User Group

From: emily
Views: 6135
Comments: 0

Java One 2002 Overview

Java One 2002 Overview

From: emily
Views: 2257
Comments: 0

SQL Server 2005

SQL Server 2005

From: emily
Views: 3835
Comments: 1

CATPDG Quick Start Demo

CATPDG Quick Start Demo

From: emily
Views: 1404
Comments: 0

See all 
 
 
 URL:          AddThis Social Bookmark Button
Embed Thin Player: (fits in most blogs)
Embed Full Player :
 
 

Name

Email (will NOT be shown to other users)

 

 
 
Comments: (watch)
 
 
Notes:
 
Slide 1: Rapid Web Application Development with Grails Graeme Rocher Managing Director Agilize it http://www.agilizeit.com Session ID# BOF-2521 2006 JavaOneSM Conference | Session BOF-2521 |
Slide 2: Goal of this Talk Rapid Web Application Development with Grails Learn how to rapidly create web applications using the agile web application framework Grails 2006 JavaOneSM Conference | Session BOF-2521 | 2
Slide 3: Agenda Groovy & Grails Getting Started The Application Domain Controllers Groovy Servers Pages (GSP) Tag Libraries Ajax Support Scaffolding Java Integration 2006 JavaOneSM Conference | Session BOF-2521 | 3
Slide 4: Agenda Groovy & Grails Getting Started The Application Domain Controllers Groovy Servers Pages (GSP) Tag Libraries Ajax Support Scaffolding Java Integration 2006 JavaOneSM Conference | Session BOF-2521 | 4
Slide 5: Groovy & Grails ● Grails: MVC web framework inspired by: ● ● ● Convention over Configuration Don’t Repeat Yourself (DRY) Ruby on Rails Spring IoC, MVC and WebFlow Hibernate SiteMesh ● Built on solid foundations: ● ● ● ● Why Groovy? ● ● ● ● Meta-Programming Closure Support Syntactically Expressive Java Integration Source: Please add the source of your data here 2006 JavaOneSM Conference | Session BOF-2521 | 5
Slide 6: Agenda Groovy & Grails Getting Started The Application Domain Controllers Groovy Servers Pages (GSP) Tag Libraries Ajax Support Scaffolding Java Integration 2006 JavaOneSM Conference | Session BOF-2521 | 6
Slide 7: Getting Started ● ● ● Grails available from http://grails.org Stable & Development snapshots available Simple installation: ● ● ● Download & extract zip Set GRAILS_HOME variable Add $GRAILS_HOME\bin to PATH variable ● Run “grails create-app” Source: Please add the source of your data here 2006 JavaOneSM Conference | Session BOF-2521 | 7
Slide 8: Project Infrastructure + PROJECT_HOME Main Grails resources + grails-app + conf + controllers + domain + i18n + services Jar archive libraries + taglib + views Additional Spring configuration + lib + spring + hibernate Additional Hibernate mapping + src Java sources + web-app Web resources e.g. CSS, JavaScript etc. 2006 JavaOneSM Conference | Session BOF-2521 | 8
Slide 9: Command Line Targets ● ● Apache Ant bundled with Grails Many useful targets available: ● ● ● ● ● ● create-* (for creating Grails artifacts) generate-controller generate-views run-app test-app run-webtest Source: Please add the source of your data here 2006 JavaOneSM Conference | Session BOF-2521 | 9
Slide 10: The Data Source // data source located in grails-app/conf Class ApplicationDataSource { @Property pooled = false @Property dbCreate = “create-drop” @Property @Property @Property @Property DB Auto creation with hbm2ddl url = “jdbc:hsqldb:mem:testDb” driverClassName = “org.hsqldb.jdbcDriver” username = “sa” password = “sa” Remaining connection settings 2006 JavaOneSM Conference | Session BOF-2521 | 10 Whether connection Pooling is enabled }
Slide 11: Agenda Groovy & Grails Getting Started The Application Domain Controllers Groovy Servers Pages (GSP) Tag Libraries Ajax Support Scaffolding Java Integration 2006 JavaOneSM Conference | Session BOF-2521 | 11
Slide 12: The Application Domain ● ● ● ● Domain classes hold state and implement behaviour They are linked together via relationships (e.g. one-to-many) In Java domain classes have traditionally been handled by Object-Relational Mapping (ORM) Grails provides simple ORM built on Hibernate Source: Please add the source of your data here 2006 JavaOneSM Conference | Session BOF-2521 | 12
Slide 13: Grails ORM (GORM) ● Extremely simple. No special class to extend or file to configure! Each domain class has an ‘id’ and ‘version’ class ExpenseReport { @Property Long id @Property Long version @Property relatesToMany = [items:ExpenseItem] @Property Set items @Property Date submissionDate @Property String employeeName } Defines one-to-many relationship to ExpenseItem 13 2006 JavaOneSM Conference | Session BOF-2521 |
Slide 14: Grails ORM (GORM) ● We’ve got this far, so lets define the other side! class ExpenseItem { @Property Long id @Property Long version Defines the owning side of the relationship @Property belongsTo = ExpenseReport @Property String type @Property Currency currency @Property Integer amount } 2006 JavaOneSM Conference | Session BOF-2521 | 14 Each property maps To a column
Slide 15: Grails Constraints ● Validation constraints can be defined using the ‘constraints’ property class ExpenseItem { … @Property constraints = { type(inList:['travel', 'accomodation']) Each node relates to amount(range:1..999) a property } Ensures the ‘type’ property Is one of the values in the list } ‘amount’ must be in a range greater than 0 but less than 1000 2006 JavaOneSM Conference | Session BOF-2521 | 15
Slide 16: Dynamic Methods & Properties ● Grails injects methods and properties into domain classes at runtime: def r = ExpenseReport.findByEmployeeName('fred') def r = ExpenseReport .findBySubmissionDateGreaterThan(lastMonth) def reports = ExpenseReport.findAll() assert ! (new ExpenseItem().validate()) def er = new ExpenseReport(employeeName: 'Edgar') .save() 2006 JavaOneSM Conference | Session BOF-2521 | 16
Slide 17: Agenda Groovy & Grails Getting Started The Application Domain Controllers Groovy Servers Pages (GSP) Tag Libraries Ajax Support Scaffolding Java Integration 2006 JavaOneSM Conference | Session BOF-2521 | 17
Slide 18: Controllers ● ● ● ● Controllers handle requests and prepare responses Response created by either delegating to a view or writing to the response A controller is a class containing closure properties that act on requests The convention used for the name of the controller and the actions within map to URIs. Source: Please add the source of your data here 2006 JavaOneSM Conference | Session BOF-2521 | 18
Slide 19: The Controller ● The controller and action name map to the URI: /expenseReport/list The name of the class is the first token in the URI Each action is a closure property class ExpenseReportController { @Property list = { [expenseReports : ExpenseReport.list()] } An optional model } is returned as a map 2006 JavaOneSM Conference | Session BOF-2521 | 19
Slide 20: Data Binding & Flow Control // save action @Property save = { Dynamic get method Auto-type conversion To id type def e = ExpenseItem.get(params.id) e.properties = params Auto-type conversion if(e.save()){ redirect(action:show,id:e.id) from request parameters } else { Example flow control via render and redirect methods } render( view: 'create', model:[expenseItem:e] ) } 2006 JavaOneSM Conference | Session BOF-2521 | 20
Slide 21: Agenda Groovy & Grails Getting Started The Application Domain Controllers Groovy Servers Pages (GSP) Tag Libraries Ajax Support Scaffolding Java Integration 2006 JavaOneSM Conference | Session BOF-2521 | 21
Slide 22: Groovy Server Pages ● ● ● ● A view technology very similar to JSP, but with Groovy as the primary language More expressive and concise with support for embedded GStrings & Tags Layout support through integration with SiteMesh Ability to define dynamic tag libraries Source: Please add the source of your data here 2006 JavaOneSM Conference | Session BOF-2521 | 22
Slide 23: A GSP Example ● The GSP for the list action is named according to convention: grails-app/views/expenseItem/list.gsp References the model returned by the controller <html> <body> <g:each in="${expenseItems}"> </g:each> </body> </html> Embedded GString expressions <p>${it.type} – amount: ${it.amount}</p> 2006 JavaOneSM Conference | Session BOF-2521 | 23
Slide 24: Agenda Groovy & Grails Getting Started The Application Domain Controllers Groovy Servers Pages Tag Libraries Ajax Support Scaffolding Java Integration 2006 JavaOneSM Conference | Session BOF-2521 | 24
Slide 25: Dynamic Tag Libraries ● Easy definition of simple, logical and iterative The body argument tags: The name of the tag is a closure that can be invoked class ExpenseTagLib { @Property dateFormat = { attrs,body -> out << new SimpleDateFormat(attrs.format) .format(attrs.date) } } The attributes are passed as a map 25 2006 JavaOneSM Conference | Session BOF-2521 |
Slide 26: Dynamic Tag Libraries ● Using the tag requires no imports or configuration and can be reloaded at runtime!: Tag called by name <p>Submitted: with the “g:” prefix <g:dateFormat date="${report.submissionDate}" format="DD-MM-YYYY" /> </p> Tag can also be <p><input type="hidden" called as a regular name="submissionDate" method! value="${dateFormat( date:report.submissionDate, format:'DD-MM-YYYY')}" /> </p> 2006 JavaOneSM Conference | Session BOF-2521 | 26
Slide 27: Agenda Groovy & Grails Getting Started The Application Domain Controllers Groovy Servers Pages Tag Libraries Ajax Support Scaffolding Java Integration 2006 JavaOneSM Conference | Session BOF-2521 | 27
Slide 28: AJAX Support ● ● ● ● ● Built in “adaptive” tag library for Ajax Supports Prototype, Rico, and Yahoo (Dojo coming soon) Tags for remote linking, asynchronous form submission etc. Dynamic “render” method available for rendering XML snippets, or partial templates Save/Reload and dynamic tag libraries make Ajax even easier 2006 JavaOneSM Conference | Session BOF-2521 | 28
Slide 29: Agenda Groovy & Grails Getting Started The Application Domain Controllers Groovy Servers Pages Tag Libraries Scaffolding Ajax Support Java Integration 2006 JavaOneSM Conference | Session BOF-2521 | 29
Slide 30: DEMO Scaffolding 2006 JavaOneSM Conference | Session BOF-2521 | 30
Slide 31: Agenda Groovy & Grails Getting Started The Application Domain Controllers Groovy Servers Pages Tag Libraries Scaffolding Ajax Support Java Integration 2006 JavaOneSM Conference | Session BOF-2521 | 31
Slide 32: Java Integration ● ● ● ● ● ● Now for the important bit, with Groovy and Grails you can: Call any existing Java library seamlessly Deploy as a WAR onto any JEE application server Write your domain model in Java, mapped with Hibernate, and still use dynamic methods! Take advantage of Hibernate’s power by mapping onto legacy systems. Use Spring’s dependency injection to integrate Controllers with existing services 2006 JavaOneSM Conference | Session BOF-2521 | 32
Slide 33: DEMO ECLIPSE INTEGRATION 2006 JavaOneSM Conference | Session BOF-2521 | 33
Slide 34: Summary ● ● ● ● ● With the advent on Web 2.0 agility is key Dynamic frameworks (Grails, Rails, Django etc.) provide this through quick iterative development with a clear productivity gain However, for large scale applications statictyping and IDE support is crucial Grails provides the ability to use a blended approach And most importantly it runs on the JVM! 2006 JavaOneSM Conference | Session BOF-2521 | 34
Slide 35: For More Information ● ● ● ● ● Groovy website – http://groovy.codehaus.org Grails website – http://grails.org Mailing lists – http://grails.org/Mailing+lists Graeme’s Blog – http://graemerocher.blogspot.com Upcoming books ‘The Definitive Guide to Grails’ by Apress and ‘Groovy in Action’ by Manning 2006 JavaOneSM Conference | Session BOF-2521 | 35
Slide 36: Q&A 2006 JavaOneSM Conference | Session BOF-2521 | 36

   
Time on Slide Time on Plick
Slides per Visit Slide Views Views by Location