Gave it a shot - Pluses and Minuses
Guys, I applaud the work on Roo. I think in some cases, it will be the default choice for me on projects. Unfortunately I find on my current project I'm only able to use it as a one-way one-time passive code generator. The issues that blocked me are as follows. Just wanted to let you know.
I am using OpenXava on this project for basic database CRUD. I suppose I could have written a Roo plugin to reverse the database, but it would've taken more time than I had to commit to it, and would have taken a VERY long time to be as rich as OpenXava.
For whatever reason, OpenXava in it's reflection to gather model information and generate screens, is not obtaining the proper bytecode. AspectJ should be weaving a concrete class in the bytecode from the various annotations, but for some reason OpenXava cannot see the getters and setters. Sadly I don't have time to figure out why that is, but it's most certainly on them, and not on Roo. Still, I am stuck with that particular tool choice, which makes Roo a no-go on this one.
So - I had to punt, after spending a few long days trying to make them play nice together, getting the aspectj runtime jar into the deployment and trying to analyze what was happening.
So in punting, I still decided to adopt the "rich domain" approach of Roo to the model (over objections, of course - people are so stuck on their dao pattern). So I want to continue to use it for 'first draft' model objects, and push-in refactor.
Well there's an issue there too. The push-in refactoring doesn't quite work right yet. Here's the specific items I've encountered that require me to go in and hand edit every single java file. A tedious endeavor.
* @Roo* annotations are retained and should be removed.
* Casing in attribute overrides are not respected. For example, @RooEntity(identifierColumn = "FOO_ID") is built back into the java sources as @Column(name = "foo_id")
Also I think identifier-name should be a property to @RooEntity. Perhaps my column IS named FOO_ID, but I still want the model class property to be ID. In addition, inheritance-wise, how are attribute overrides supported when retaining the @Roo* annotations?
Sorry for the meandering post, but I wanted to get all these thoughts down and back to the community before I walk away from Roo on this project.
Again - not to diminish - I think Roo is AWESOME, and in any case where it's feasibly, I will use it as at least a starting point. Believe me I know - I was stuck on a few rails projects before...