InfoQ

InfoQ

News

My Bookmarks

Login or Register to enable bookmarks for unlimited time.

The content has been bookmarked!

There was an error bookmarking this content! Please retry.

Grails 0.6 Adds Best of Breed Mix From Spring Web Flow and Rich Conversations a la JBoss

Posted by Shane Witbeck on Sep 14, 2007

Sections
Development
Topics
Java ,
Web Frameworks
Tags
Grails
Graeme Rocher announced that Grails is moving further away from "its Rails-like beginnings" with this latest release.  Although this release was labeled as 0.6, it's clearly being modest with the amount of work that went into it. Here's the full feature list:

  • Joint Groovy/Java Compilation
  • Spring Web Flow Integration
  • Support for Spring scopes to allow scoped services
  • Improved support for REST with automatic XML/JSON marshalling and RESTful URL mappings
  • New Config DSL for configuration not possible by convention
  • Refreshed scaffolding interface and branding
  • Support for Sitemesh inline decorators
  • Controllers can now call tag libraries as methods
  • New GSP tags
  • Massive improvements to speed of start-up time, unit tests and generation tool

Spring Web Flow Integration

Just as Rod Johnson had proposed a new way of defining Spring-managed beans via code rather than the traditional XML markup, Graeme takes a similar approach by defining Spring Web Flow definitions with Groovy:

showCart {
on("checkout").to "enterPersonalDetails"
on("continueShopping").to "showCatalogue"
}
enterPersonalDetails {
on("submit") {
def p = new Person(params)
flow.person = p
def e = yes()
if(p.hasErrors() || !p.validate())return error()
}.to "enterShipping"
on("return").to "showCart"
on(Exception).to "handleError"
}
enterShipping {
on("back").to "enterPersonalDetails"
on("submit") {
def a = new Address(params)
flow.address = a
if(a.hasErrors() || !a.validate()) return error()
}.to "enterPayment"
}

The above snippet illustrates the concept of defining a unit of work or "conversation", as described in the JBoss Seam framework. Just as in Seam, the "flow" contains conversational state information.

Automatic XML/JSON marshalling and RESTful URL mapping

While previously using a plug-in for conversions, this release uses:

 import grails.converters.*
...

def list = {
render Book.list() as XML
// or render Book.list() as JSON
}
Seam by Martin Gilday Posted
Re: Seam [News Item Updated] by Scott Delap Posted
nice work by serge boulay Posted
  1. Back to top

    Seam

    by Martin Gilday

    What integration has been added with JBoss Seam? There is no mention of it in the release notes. Here you have a subtitle "Rich Conversion via JBoss Seam" but then only have a code snippet showing content rendering, of XML and JSON. Graeme's blog seems to suggest that Grails' new integration with SWF provides something equivalent to Seam's conversations, not "via". Sorry to be pedantic, but the title just seems misleading (unless I have misunderstood).

  2. Back to top

    Re: Seam [News Item Updated]

    by Scott Delap

    Martin,

    You are correct. The news item has been updated to correctly identify that the conversation features are similar to Seam but not implemented using seem. Thank you for the quick observation.

  3. Back to top

    nice work

    by serge boulay

    exciting stuff guys, keep up the great work!!

Educational Content

New-age Transactional Systems - Not Your Grandpa's OLTP

John Hugg discusses high volume transaction processing applications with high and low frequency profiles, and how VoltDB can be used for that purpose.

Cool Code

Kevlin Henney examines code samples to see what can be learned from them starting from the premise that one won’t write great code unless he knows how to read it.

Collaboration: At the Extremities of Extreme

Jason Ayers share the observations he made watching a team of developers collaborating in real time on the same code base, pushing XP, pair programming and continuous integration to their extremes.

Yesod Web Framework

Michael Snoyman presents Yesod, a web framework written in Haskell and containing a web server, templating, ORM, libraries (templating, gravatar, etc.).

Transactions without Transactions

Richard Kreuter and Kyle Banker on how to avoid classical RDBMS transactional systems by using compensation mechanisms, transactional messaging or transactional procedures.

Attila Szegedi on JVM and GC Performance Tuning at Twitter

Attila Szegedi talks about performance tuning Java and Scala programs at Twitter: how to approach GC problems, the importance of asynchronous I/O, when to use MySQL/Cassandra/Redis, and much more.

10 tips on how to prevent business value risk

One category of risk that project teams need to ensure they address is business value failure – delivering a product that fails to provide value for the business investor.

Interview: Software Systems Architecture: Working With Stakeholders Using Viewpoints and Perspectives

InfoQ spoke to the authors of Software Systems Architecture on a couple of new topics, the System Context viewpoint and Agile, which have been added to the second edition.