QCon 2007 Notes: Grails

Guillaume Laforge, Grails: Spring + Hibernate development re-invented

  • Key principles of Grails:
    • CoC (Convention over Configuration)
    • DRY (Don’t Repeat Yourself)
  • CoC model objects: POGOs (Plain Old Groovy Objects)
    • automatically mapped to DB, without mapping files or hibernate.cfg.xml
    • set relationships between model objects with def has_many, def belongs_to
    • model objects can have constraints added, which are then used all the way through, from front end to database, e.g.:
    static constraints = {
        firstName (blank:false),
        email (email:true)


isbn (matches:{regex})
  • Looks quite Rails-ish in terms of scaffolding and quick code
  • Dynamic finder methods, again on model objects, without needing to write any dao code, e.g.:
    • Book.findByTitleLikeOrReleaseDateLessThan(“%Grails%”, someDate)
    • Book.findByReleaseDateBetween(startDate, endDate)
    • Book.findAllByAuthor
    • also does sorting
    • for more complicated queries, there’s a DSL around Hibernate’s Criteria building
  • Services can automatically be injected into controllers by declaring them as fields: no Spring applicationContext.xml to maintain
  • By convention, any cron jobs in a given directory will be run automatically.
  • View is Spring MVC under the hood
    • There is very simple dynamic taglib generation (again, no tld, just add the tag in the right place and everything will be able to use it)
  • The sweet spot of Grails is enterprise-readiness: you can reuse
    • Java libraries
    • Employee skills
    • Spring beans
    • Hibernate mapping files for legacy objects (you won’t need to create them for new objects, of course)
    • EJB3 annotated beans, even
    • In fact, even if your model classes are in Java, you can still use the “magic” find methods

It's only fair to share...
Share on Facebook
Tweet about this on Twitter
Share on LinkedIn

Leave a Reply