Labels: springsource, spring, aspectj, grails, groovy
Spring Roo is essentially RAD tool that simplifies project setup and some other common tasks like creating simple persistence queries, stubbing controllers/views, adding JMS/email support.
Internal architecture is more described here http://blog.springsource.com/2009/06/18/roo-part-3/ but essentially it relies heavily on AspectJ inter-type declarations (ITD - "mixin" for Java) to separate the generated code and code written by developer.
It has both command line tool and special IDE (SpringSource Tool Suite).
Roo is very similar to Grails:
- they follow domain model centric design where all validation rules and database schema generation is based on the domain model
- they provide fast project setup
- they provide set of scripts for generating stubbed controllers and views
- both have extension mechanism for addons (like security, email support) that can be used to easily add some common technical features into the system
Interestingly it seems that the testing story is somewhat better in Roo. Tests are faster and can be executed from IDE. Also some simple tests for entities are generated for you. However there are some features that don't work so well in Roo. For example if you want to use dynamic finders you have to execute special command that generates the code for this finder and injects it into your entity. In Grails such finders are available automatically.
What I like most in Roo is the ability to set up new Spring web app project very fast. I'm don't like so much the way how finders are implemented . It seems that whenever you generate new finder, additional finder will also be added to the list of finders in @RooEntity annotation. I can imagine that this list can easily get quite long.
So the question that many ask - why is SpringSource developing two tools that are so similar? Some people from SpringSource say that these tools are not really competing because one is for Java-only environments. According to this post http://old.nabble.com/Re%3A-Spring-Roo-vs-plus-Grails---discuss-p23287081.html the goal of Roo is to lead the path to Grails for those who are more conservative. So essentially SpringSource doesn't want to invest everything into Grails and is therefor trying to push both tools at least for now.
In general if SpringSource will make production release (currently RC2) and add some documentation then it could be worth trying. Many features however feel much more natural in Grails where metaprogramming is already part of the underlying language.