Rapid Web Development for the Java Platform
Published under the Creative Commons Attribution Noncommercial Share Alike License Version 2.5. (Please see http://creativecommons.org/licenses/by-nc-sa/2.5 for complete details.)
Getting Started with Grails
Jason [email protected]
Introduction
Jason Rudolph
Grails Committer
Streamlined Committer
Principal @ Relevance
Author
What is Grails?
Rapid web application development
Getting things done
Having fun doing it
Full-stack MVC framework
Open source
Runs on the JVM
What (Else) is Grails?
Develop your apps in Groovy
Highly-expressive
Fully object-oriented
Dynamic
Familiar syntax
Seamless Java integration
JSR-241
Anything Else?
Convention over configuration
Opinionated software
Sensible defaults
Everything has a place
DRY (Don't Repeat Yourself)
Rock-Solid Foundation
Let’s Get StartedReady?
Install JDK 1.4 (or higher)
Set JAVA_HOME
Set
Download latest Grails release
Set GRAILS_HOME
Add $GRAILS_HOME/bin to your PATH
Grails!
Hello, GrailsDemo
What’sInside?
Instant GratificationDemo
Grails ORM (GORM)
Zero-configuration persistence management
DAOs Dynamic domain class methods
save
delete
get
list
find
findAll
count
etc.
Relationship Counseling
1:n Relationships
class Race { //... static hasMany = [registrations:Registration]}
class Registration { //... Race race
static belongsTo = Race}
Relationship Counseling
Demo
Where’s My Data
How did we get this far without a database?
Hooking up an external database
Create schema
Grant permissions
Add drivers to racetrack/lib
Update data source
Be PersistentDemo
Declaring Constraints
Pre-packaged constraints
Custom constraints
blank
creditcard
inList
min
max
matches
nullable
range
unique
url
etc.
Show Some Constraint!
Demo
Fun with URLshttp://localhost:8080/racetrack/race/show/2
Fun with URLshttp://localhost:8080/racetrack/race/show/2
class RaceController { //... def show = { [ race : Race.get( params.id ) ] } //...}
GSP
RaceController.groovy
def show = { [ race : Race.get( params.id ) ] }
views/race/show.gsp
<g:each var="r" in="${race.registrations}"> <li> <g:link controller="registration" action="show" id="${r.id}">${r.name} </g:link> </li> </g:each>
Groogle?
Get Dynamic
What if I need to...
find all races in Virginia?
count the races longer than 5 miles?
get a list of the 10 longest races?
find races matching a certain pattern?
list all races with registrations?
Dynamic Finder Methods
Get DynamicDemo
Putting It to the Test
Unit & integration testing
GroovyTestCase created for each class
grails test-app executes all test cases
Functional testing
Canoo Web Test
grails generate-webtest
grails run-webtest
Deploymentgrails war
Beyond the Finish Line
Services
Web Flow
REST
Java Integration (src/java)
Rich (and Friendly) Tag Libraries
Ajax
Still More to Explore
Custom URL Mapping
Alternate Domain Implementations
Mapping to legacy schemas
EJB3 entity beans
Job Scheduling
Command Objects for Forms
grails.org/plugins
Build rich clients
Expose web services
Secure your app
Roll your own scaffolding
Integrate a search engine
Almost limitless possibilities
grails.org/roadmap
Future Releases
Object-Relational Mapping DSL
Support for JSP custom tag libraries in GSP
JavaScript DSL
Domain model generation from database schema
JPA support
Important Companies Talking About Grails
Oraclehttp://www.oracle.com/technology/pub/articles/grall-grails.html
BEAhttp://dev2dev.bea.com/pub/a/2006/10/introduction-groovy-grails.html
SAPhttps://www.sdn.sap.com/irj/sdn/wiki?path=/display/Community/Composition+on+Rails
Resources
grails.org
Downloads
Latest release (0.6)
Development snapshot (1.0-RC1)
User guide, tutorials, screencasts, etc.
Mailing lists (grails.org/mailing+lists)
aboutGroovy.com
grails.org/grails+podcast
groovyblogs.org
Resources (cont’d)
2007 No Fluff Just Stuff
Northern Virginia Software Symposium
November 02 - 04, 2007
Sheraton Reston
nofluffjuststuff.com/conference/reston/2007/11
Books
This presentation is published under the Creative Commons Attribution Noncommercial Share Alike License Version 2.5.
(Please see http://creativecommons.org/licenses/by-nc-sa/2.5 for complete details.)