Archive for February 6th, 2012

Why I’ll never use Groovy on Grails

Monday, February 06th, 2012

Why? Because it doesn’t exist. The framework is called Grails. Just Grails. Go to and search the site. You won’t see any “Groovy on” anywhere. Seriously. Check it out. I’ll wait.

I guess some history about what caused all this is in order. Back in 2005 the Grails framework was started after discussions on the Groovy mailing list about the idea of a Groovy-based JVM alternative to Ruby on Rails which was then starting to get a lot of buzz. The original name was “Groovy on Rails”, but only a few months later in March 2006 Graeme sent a note to the mailing list titled “Groovy on Rails is no more (kind of)” saying that David Heinemeier Hansson had complained about the name, so he was changing it to just “Grails”.

It’s now February 2012. One month short of six years since the name was changed to Grails. And yet there are still a lot of recruiters (who are for the most part beyond hope) and even developers (who should know better) who call Grails “Groovy on Grails” and “Groovy on Rails”. “Groovy on Rails” makes some sense since there’s a historical basis for it, but “Groovy on Grails” makes me think of nonsense phrases like Splooby on Splails. We don’t call Spring MVC “Spring on Java” or Struts “Struts on Java”. Django isn’t “Django on Python”. Even recruiters looking for “Groovy & Grails” developers are a bit confused since you can’t use Grails without Groovy.

I was thinking that if there were a PHP framework that used the Rails-like convention-over-configuration approach that they could call it PHP on Rails, but that developers would just call it Phails, so I guess that’d be unfortunate. But someone did this, and I’m guessing got a similar note from DHH since the PHP on TRAX website describes the name as “Php On Trax (formerly Php On Rails)”.

So if you’re one of “them”, stop. Refer to the framework as Grails. And when replying to clueless recruiters who are looking for Groovy on Grails developers, gently remind them that there’s no such thing.

This Week in Grails (2012-05)

Monday, February 06th, 2012

Rob Fletcher has been doing some great work on scaffolding. Check out this slick demo app on Cloud Foundry. It uses his Fields plugin (the successor to the bean-fields) and Twitter Bootstrap.

I realized this week that I’d missed the transition of Rob’s blog to its new home and had missed some interesting posts: Organizing Functional Tests and Optional Tag Bodies.

When I switched to 2.0 for development of the Spring Security Core plugin, the PDF of the docs was clipped on the right and I assumed it was because of a 2.0 bug so I removed the PDF from the docs page. I tried generating PDF docs this week for another project and it worked fine and I realized that it was actually a combination of long non-breaking strings and the new larger font that was the issue, so I added in some spaces to allow line breaks and updated the docs page with a link to the PDF.

I also did some work to make working with Heroku a bit better. There was a reported issue with using SSL and Spring Security so I released a small update of the spring-security-core plugin (v1.2.7.2) to address that and updated the Heroku docs about how to use it. There wasn’t a need to update the Heroku plugin – it involves a configuration setting for the security plugin. I’m now also generating PDF docs for the Heroku plugin which you’ll see at the docs link.

Another standing issue with Heroku and Spring Security has to do with sessions when running multiple instances of an application. Heroku doesn’t offer any session clustering or session affinity options, so authentication will usually fail because after successfully logging into one instance, you’ll get redirected and there’s a good chance you’ll end up on an instance that doesn’t have your authentication details in its session. I started playing with an approach to session management that stores sessions in a database (either a database or a NoSQL store or even Memcached) and released a preliminary version of the database-session plugin to test it out, but it’s not ready yet. It was a mistake to release it as 1.0 – it should have been a snapshot release – so don’t use it yet.

I also updated the runtime-logging to work with Grails 1.3 and 2.0.

If you want to keep up with these “This Week in Grails” posts you can access them directly via their category link or in an RSS reader with the feed for just these posts.

Translations of this post:


There were 8 new plugins released:

and 22 updated plugins:

  • asynchronous-mail version 0.4. Send email asynchronously by storing them in the database and sending with a Quartz job
  • auto-test version 1.0. Monitors the project directory and attempts to run only the subset of tests affected by what changed
  • bean-fields version 1.0.BUILD-SNAPSHOT. Provides a suite of tags for rendering form fields for domain and command objects
  • cxf-client version 1.2.6. Use existing (or new) Apache CXF wsdl2java generated content to invoke SOAP services
  • dojo version Integrates the Dojo javascript toolkit
  • elasticsearch version Adds support for the RESTful search engine
  • external-config-reload version 0.4.9. Polls for changes to external configuration files (files added to grails.config.locations), reloads the configuration when a change has occurred, and notifies specified plugins by firing the onConfigChange event in each
  • fields version 1.0.1. Customizable form-field rendering based on overrideable GSP template
  • grom version 0.2.3. Sends notifications on Windows, Linux, and Mac
  • jesque version 0.3.0. Groovier approach to using jesque
  • jesque-web version 0.3.0. Web interface to view and manage jesque queues, jobs and workers
  • jquery-mobile version 1.0.4. Provides jQuery mobile framework resource files
  • lesscss-resources version 1.0. Optimises the use of css files, compiling .less files into their .css counterprt, and place the css into the processing chain to be available to the other resource plugin features
  • paypal version 0.6.5. Adds PayPal integration
  • redis version 1.2. Provides integration with a Redis datastore
  • routing version 1.1.7. Send and route messages to a wide variety of destination endpoints directly from your Controllers and Services using Camel
  • runtime-logging version 0.4. Control Log4j logging at runtime
  • spring-security-core version The official Grails security plugin; integrates with Spring Security
  • spring-security-saml version 1.0.0.M13. SAML 2.x support for the Spring Security Plugin
  • spring-security-shibboleth-native-sp version 1.0.3. Shibboleth Naitive SP support for the Spring Security grails plugin
  • twitter-bootstrap version Twitter Bootstrap CSS framework resource files
  • twitter4j version 0.3.2. Send and receive Twitter messages using the twitter4j library

Interesting Tweets


User groups and Conferences

Creative Commons License
This work is licensed under a Creative Commons Attribution 3.0 License.