Jump into Roo for extreme Java productivity

Update: The second installment of the "Introducing Spring Roo" blog series is now available and includes a detailed step-by-step tutorial to help you get started with Roo. The third installment covers Roo's internal architecture in detail.
The twittersphere has been abuzz this week with news from SpringOne Europe. One announcement generating a significant amount of interest is SpringSource's new open source productivity tool, codenamed "Roo".
Roo is a sophisticated round-tripping code generator that makes it quicker and easier than you've ever imagined to create and evolve Spring applications. Even if you have reservations about code generation, it will still be worth taking a look at Roo. It contains significant innovation that addresses all major objections to code generation, whilst still delivering best practice Spring applications and remaining useful throughout the application lifecycle.
This is the first blog in a series where I will discuss Roo, starting with its general design goals and functionality, then later moving onto how to use it and the Roo engineering internals. Given this first blog serves as an introduction, let's start by repeating the mission statement that guided Roo's development:
Roo's mission is to fundamentally and sustainably improve Java developer productivity without compromising engineering integrity or flexibility.
How does this translate into a tool? One conference delegate who saw Roo described it as "a little genie who sits in the background and handles the things I don't want to worry about". This description is particularly appropriate for two reasons. First, Roo really is "little". Its current download is under 3 Megabytes, it lets you continue your normal Spring-based Java programming model, and it doesn't require you to adopt a special Roo runtime or build technology. Second, it does sit quietly in the background and look after things for you. Most importantly, Roo doesn't get in your way. If you want to write something yourself, just do it and Roo will quietly take care of automatically adjusting relevant files in response (ie Roo supports round-tripping). If you want to edit a Java or JSP file, just do it. Roo doesn't need you to use its interface. Or if you want to stop using Roo, just exit the program. Roo doesn't become part of your build system or runtime, so it is incredibly easy to stop using Roo in the unlikely event you'd ever want to.
We believe Roo fills a very sweet spot between the power of existing IDEs, the productivity potential demonstrated by modern web RAD frameworks, and the deep desire for Java developers to have a tool that works the way they want to work and reflect the engineering principles that they value. This has resulted in a non-invasive background tool that is exceptionally easy to learn how to use, can be applied to both existing and new projects, and streamlines the development of world best practise applications at extraordinary speed.
Productivity and Usability
It's easier to be productive and enjoy developing when you have highly usable tools that are easy to learn and build on your existing knowledge, skills and experience. Usability was therefore a critical design factor for us when designing Roo. We were influenced by the clear productivity benefits developers enjoy through tab completing user interfaces such as the *nix shell prompt. But we took it a step further, and wrote a shell specifically for Roo. By delivering a shell (instead of a GUI or command line utility) we were able to achieve a scriptable, user-friendly, easy-to-learn, forgiving interface. You can press TAB whenever in doubt and Roo will complete the command. You can type "hint" whenever you need to and receive project-stage-specific guidance. You can omit options from commands and Roo will automatically infer what you meant based on what you recently did. You can type illegal commands and Roo will carefully undo any changes the failed command might have made. You can write a script and play it back to produce your project again. You don't even need to fully type a command – just type enough so that Roo recognises it as unique. And you can do all of this from the operating system command prompt without even installing an IDE.
Of course, most Java developers use an IDE and find them invaluable for their productivity. So Roo recognises this and happily continues executing whilst you're working on a project inside your IDE. You won't need any Roo-specific IDE plugin (although we do have a plugin for SpringSource Tool Suite, which I'll discuss further below). Naturally within your IDE you will enjoy the fact that Roo was designed to make your Java development life easy via both code assist and debugging support. Your debugger will operate just as it always has, stepping through all code that forms part of your application – including those files that Roo helps you with. Every source file that Roo produces will correctly appear in code assist (control + space) lists, so you need not memorize method signatures.
As Roo supports you programming in Java, you'll receive the normal incremental validation that helps all of us identify a missing bracket or mistyped field name. IDE refactoring tools will continue to be of service to you, giving confidence that the application code quality will remain high even in the face of large development teams, changing team members, and years of ongoing development and maintenance. Finally, all Roo annotations currently adopt a naming convention of "Roo*". This naming convention ensures you can easily find an annotation when you need it – not that you actually need to type in any Roo-specific annotations at all. The annotations themselves provide you with very fine-grained control over how Roo helps your development, allowing you to control member names and custom behaviour in a detailed manner should you wish to (the defaults work just fine as well).
At SpringSource Europe we also demonstrated the use of Roo within SpringSource Tool Suite (STS), our popular and soon to be freely available Eclipse-based IDE. This allows you to enjoy all the benefits of Roo from within your IDE. You can enter commands in a "Roo View" at the bottom of the screen and see the changes instantly reflected in your Package Explorer and Editors. Or you can make a change in an Editor and see the Roo View immediately show what Roo did in response to your changes. It's the little genie sitting out of your way and taking care of what you don't want to.
Technical Functionality
Roo is built on an add-on architecture that enables different types of Java applications to be built. At the moment there are around 18 "add-ons", and these are designed to support the easy development of request-response MVC web applications with a separate JPA-based entity layer. Some of the specific functionality that Roo currently includes:
- Commencing a new application from an empty directory (Roo can work with an existing application as well, though)
- Configuring your build system and setting up a project structure specific to that build system (we support Maven 2 initially)
- Installing a JPA provider and database of your choice
- Viewing and configuring database configuration details
- Setting up Log4J configuration files, and allowing them to be modified using TAB completing commands
- Creating JPA entities that enjoy automatic dependency injection and persistence methods
- Adding fields to JPA entities, including automatically setting the correct annotations both for JPA as well as the new Bean Validation (JSR 303) standard
- Managing automatic JUnit integration tests, which pass out of the box even if you have relationships between entities and are applying Bean Validation constraints
- Creating and maintaining Spring MVC-based controllers that carefully follow REST conventions, including producing and maintaining JSP pages for those controllers
- Stubbing Spring MVC controllers that you can finish yourself, saving you the need to lookup the most common annotations, conventions and method signatures used in such controllers
- Dynamically creating finders on your entities, so you can produce typical "findByField1LikeOrField2Between(Field1 like, Field2 from, Field2 to)" style queries without writing JPA Query Language
- Easy installation and configuration of Spring Security (just type "security setup" and press enter)
All of these capabilities build on Roo's internal metadata model, which is a comprehensive representation of your project. So whilst technologies like IDEs provide a member structure model, Roo takes this to a higher level of abstraction by offering enterprise application-specific metadata that reflect common development conventions. For example, whilst an IDE may know there is a class called "Foo" with a method named "persist" that defines certain parameters and return types, Roo also has this information but a range of additional metadata such as what the method means from a logical perspective.
As a result of the metadata model, the capabilities we will add to Roo in later releases will extend significantly beyond request-response web application development. The possibilities enabled through this metadata model are extremely broad, and include for example round-trip management of generation IV web applications (component-based, client-executed technologies), round-trip UML integration, alternate persistence models (such as optimised for cloud computing) and round-trip rich clients.
Become Involved!
You're welcome to become involved in Roo. Whilst we have released a Roo alpha, this is a very early stage preview. We are also presently running a vote so the community can provide feedback on the name. Fittingly, the vote application was developed live during SpringOne Europe's keynote and deployed to the cloud. You can find links to these resources at http://www.springsource.org/roo.
As mentioned at the start of the blog, I will also publish several more blogs over the coming weeks covering Roo usage in detail, plus the internal architecture and how add-ons are authored. In the meantime you are invited to follow our work via the #roo hash key on Twitter.
We hope that you enjoy using Roo.
Similar Posts
- Spring Roo 1.0.0 Released
- Cloud Foundry integrated into developer tools
- Grails 1.1.1 released with Google AppEngine support
- Exploring Roo's Architecture
- Announcing SpringSource Tool Suite 2.0











Ray Krueger says:
Added on May 1st, 2009 at 4:30 pmHey Ben!
Glad to hear that Roo will finally see the light of day. Good luck!
-Ray
Mike Youngstrom says:
Added on May 1st, 2009 at 4:53 pmRoo is exactly what my organization has been waiting for. I cannot wait to use it.
Mike
zqudlyba says:
Added on May 1st, 2009 at 6:55 pmAt last!!! Skyway Builder has a competition.
diyet says:
Added on May 2nd, 2009 at 3:11 pmits very good projected.
Yuval Goldstein says:
Added on May 4th, 2009 at 3:33 amSeems like Roo's goal is to provide a similar tool-belt for Spring applications that is already available for Grails development.
I guess the final goal might be: have the similar productivity tool-belt and choose your language: Groovy or Java.
I wonder about the alternative for the Grails plugin architecture, would it be OSGI?
Yuval Goldstein.
Jörn Zaefferer says:
Added on May 4th, 2009 at 12:45 pmI'd like to see a Getting Started guide or something similar before downloading an alpha release. Couldn't find any hint on usage here nor on the project page. Even a screenshot would help.
Ben Alex (blog author) says:
Added on May 4th, 2009 at 6:54 pm@Jörn, unfortunately the documentation is lacking due to the alpha status. There is a readme.txt in the distribution ZIP which explains installation and getting started. Plus we ship a vote.roo and clinic.roo sample in the distribution ZIP, and you try them out by something like:
mkdir my_roo_test
cd my_roo_test
roo
script clinic.roo
quit
You now have the Petclinic sample ready to run using something like "mvn package", "mvn test", "mvn eclipse:eclipse" etc. You can also use vote.roo if you'd prefer to see the voting application we deployed to the cloud during last week's keynote.
There are also "hint" and "help" commands within the Roo shell. We've also implemented features like command hiding and tab completion to help ensure that Roo is highly usable without needing considerable documentation. It's our goal to ensure Java developers don't need to read much documentation to use Roo.
My next blog entry will also focus on Roo usage, so we'll go through some of the commands then. In addition we will be working on screen casts, tutorials, documentation, quick reference cards and more "hint" topics over the coming weeks and months. Thanks for your interest in Roo.
Aries McRae says:
Added on May 4th, 2009 at 7:29 pm@Jörn, there's a "Getting started with Spring Roo" here http://stsmedia.net/introducing-spring-roo/
Jim says:
Added on May 4th, 2009 at 9:46 pmWhere is the ROO functionality within the STS? I downloaded STS today, but don't see a perspective or view called 'ROO'. Is it a separate plugin?
thanks
Christian Dupuis (blog author) says:
Added on May 5th, 2009 at 6:57 am@Jim, yes the Roo support comes as a set of two additional plugins for STS. You can download those from the download section of the project page at http://www.springsource.org/roo. Just extract the zip and place the two jars in the dropins directory of STS and restart. You should be ready to go.
The upcoming 2.1.0.M1 will come with Roo integration out of the box.
HTH
Christian
Niel Eyde says:
Added on May 5th, 2009 at 8:44 amIf you're interested in understanding the code generation options that are available for Spring, you should check out the following blog post "Spring Roo, Skyway Builder and code generation".
http://www.skywayperspectives.org/blog/?p=647
[Note from Ben Alex: I have responded to the specifics raised in Skyway's blog in the response section of their entry; a permanent archive of the response is also available here]
Jim says:
Added on May 5th, 2009 at 9:53 pmPlayed with it a little and the concept is great. i couldn't get the pet clinic application to be fully functional. hopefully there's more examples, forum support. for me, that's critical. this blog is a great start.
the command line concept is great. skyway has the graphical interface and that's tied to eclipse. i'm not a graphical person. using ROO gives me (and everyone else) the option to use it when appropriate and with any IDE.
looking forward to more blog entries, documentation, forum support…
Michael Hunger says:
Added on May 7th, 2009 at 4:08 pmAlternative name suggestion: Spring Force
(rhymes to spring source and is a quite powerful name)
is the next step a roo console on google app engine with a web based sts IDE second? developing you cloud application in the cloud with a true team-multi-user IDE?
That would be cool
I'd also interested in a statement regarding roo vs. grails. And roo for desktop applications (ala griffon) and/or flex.
Michael
Michael Hunger says:
Added on May 7th, 2009 at 4:37 pmWill there / is there an issue tracker for roo? Found my first NPE and added the issue to STS meanwhile.
Unix like commands like
ls for showing content of packages
cat/less for viewing java files
cd for navigating packages
would be very nice.
Suspension (ctrl-z) of roo does not work. so you need at least a second window to look at the stuff roo creates (pom, directory, sources).
roo install maven would also be great as initial setup step (or auto-install as prerequisite)
Colin Sampaleanu (blog author) says:
Added on May 7th, 2009 at 9:37 pmMichael,
There will be a Roo project added soon as http://jira.springframework.org/browse/ROO.
– Edited 2009-5-15 by Colin:
This is live now, and I have corrected the link above.
–
Regards,
Colin
Joost den Boer says:
Added on May 8th, 2009 at 7:25 amI am playing with Roo-A2 and the Vote application and come along 2 issues running with a 1.5 JDK:
* mvn compile cannot compile Aspjectj due to missing aspectjr.jar on classpath.
According to the Aspjectj-Maven compiler plugin (http://mojo.codehaus.org/aspectj-maven-plugin/usage.html) you need to add an dependency for Aspjectrt to the project.
When I add this dependency the compilation works:
org.aspectj
aspectjrt
1.6.3
* Tests are failing because "java.lang.NoClassDefFoundError: javax/annotation/PostConstruct"
JDK 1.5 does not have the JSR250 annotations so it needs the common-annotations jar.
roo: add dependency -groupId javax.annotation -artifactId jsr250-api -version 1.0
Regards,
Joost
Ben Alex (blog author) says:
Added on May 9th, 2009 at 9:59 pmJoost, I've seen something similar if you're using an older version of Maven. The readme indicates you need Maven 2.0.9 or above, as it resolves a specific bug (MNG-2972). If you still have difficulty getting it to work out-of-the-box, would you please post a message over at http://forum.springsource.org/forumdisplay.php?f=67.
All, http://forum.springsource.org/forumdisplay.php?f=67 is the new Roo community forum. Please use the community forum if you have any questions or issues you'd like any assistance with.
José-Alberto Gilberte León says:
Added on May 12th, 2009 at 4:41 amIn our company we worked several years with code generation tools (8 or more years).
With plugins to MyEclipse, Maven 2. And with template
languages like JSTL and Freemarker. We likes use Spring in the
architecture of our MDA for this templates. It's important to have
in mind the possibilitie to mix the code generated with custom code.
And the possibilitie of make or modify the templates for add new
features in the code generator. I think that the value are in the templates
for generating code and not in the engine or tool for generate the code.
But we think that the most difficult part allways is the view layer.
Ans is the part that cosumes more effort. Spring Roo can build the jsp's,
controllers, navigations, validations etc for the view layer?. In which
technology works the view layer of Spring Roo: jsp, jsf, Spring MVC, Spring Faces?.
Spring Roo is open to create new architecture's like Apache Wicket, or any
new framework that appears in future?
Thanks in advance.
Regards,
José-Alberto
Viraf Karai says:
Added on May 12th, 2009 at 4:18 pmAre there any plans to integrate Roo with IntelliJ IDEA by way of a SpringSource supported plugin? My understanding of Roo from your blog entry is that it provides a lot of the features already available in Grails to Java and Spring users. It does sound promising.
Ben Alex (blog author) says:
Added on May 12th, 2009 at 5:28 pmViraf, Spring Roo is able to be used with any IDE at all, as it can run concurrently with your IDE of choice. Whilst we have some extra goodies within SpringSource Tool Suite to make using Roo more natural for those using Roo within STS, these extras are by no means essential to being productive with Roo. Because the "IDE support" is really just a nice-to-have, SpringSource does not have any plans at this time to develop specific IDEA support.
Paul says:
Added on May 12th, 2009 at 5:40 pmA zip? seriously?
It's 2009, Spring IDE comes as an Eclipse install site.
ROO comes as a zip. They seriously need to get with it.
Ben Alex (blog author) says:
Added on May 12th, 2009 at 5:59 pmPaul, the standalone Roo tool runs outside Eclipse. It does not depend on Eclipse. It doesn't mind if you use IntelliJ or NetBeans or emacs for that matter. As such our choice of distribution format for the standalone Roo tool is appropriate.
xeno says:
Added on May 14th, 2009 at 12:16 pmWhy do we have to have aspects? For example: in the petclinic project the /petclinic/src/main/java/com/springsource/petclinic/reference package contains 3 java classes and 11 (!) aspects … opening the java classes – there are more annotations than java code … well there is no java code there it is in the aspects(?!). Can't we have the aspect functionality directly generated into the java classes?
Another scary thing is "" – so much with manual overwrite(?).
Great idea I can see the potential but it all depends on how simple it can get without hindering flexibility.
zqudlyba says:
Added on May 14th, 2009 at 11:59 pm3 aspect classes for 1 java class ?
This reminds me of the days doing EJB 2.x programming.
It reminds me also of doing lots and lots of programming in XML in Spring 1.x just to prepare a single java instance.
Colin Sampaleanu (blog author) says:
Added on May 15th, 2009 at 2:59 pmzqudlyba,
I would argue this is not at all like EJB 2.x, or comparable to writing a lot of XML.
The aspects are generated for you and you don't really have to think or know about them to any real extent, short of checking them into your revision control like any other code. You may think about them essentially as supporting infrastructure. This is in direct contract to EJB 2.x, where you had to create all these artifacts, and describe them in deployment descriptors, package up everything properly, and they directly imposed on your programming and things like testability…
Regards,
Colin
Ben Alex (blog author) says:
Added on May 15th, 2009 at 6:16 pmXeno and Zqudlyba, the long-proven benefit of aspect oriented programming is you can separate cross-cutting behavior from the join point, but have the cross-cutting behavior executed at runtime in a transparent way – even though all you have done is invoked the join point. The benefit of this is you save having to manually modify every single source code file that requires the cross-cutting behavior.
These AOP techniques deliver high cohesion at a compilation unit level, leading to greater productivity, maintainability and lower conceptual weight. This is why Spring Roo uses AOP, and it's also why most other modern frameworks use AOP extensively. At both development time and runtime this usage becomes transparent for all practical intents and purposes, except now you don't have to worry about all that tedious code which is now taken care of by Spring Roo.
This ability to ignore other concerns is the fundamental benefit you receive when using AOP-based systems like Spring Security. It takes care of security for you and allows you to safely write code that is unaware of the security system. Spring Roo delivers this same benefit to other parts of the system where AOP hasn't been used very much to date, like getters/setters, toString methods, persistence operations, entity structure (identifier, version, no-arg constructor etc), scaffolded web tiers, finder methods etc and combines this into a best practice application structure that also takes care of non-Java concerns like JSPs, project directory structures, POMs and so on. Everything just works nicely together.
We understand that some people will disagree with our view that it's desirable to separate compilation units. For those people we are close to providing support for moving source code placed in aspects into the Java compilation unit. Still, we strongly believe this is a bad idea and isn't much better than using Eclipse to generate thousands of lines of code that you'll have to manually maintain forever. We use aspects in the way that we do for sound reasons, and cluttering your Java code with verbose, repetitious and manually-maintained code is definitely not what we recommend. Obviously we could have made Spring Roo do this from the outset, but we simply believe it's a bad idea to dump generated code (no matter how elegant) into standard Java source files.
The suggestion this is like EJB 2.x is misplaced. With EJB 2.x there were home interfaces, remote interfaces, implementations, special callback methods, strict lifecycle restrictions and all sorts of other constraints and tedious processes to do produce even the simplest of applications. EJB 2.x did not use AOP at all, which is one of its most fundamental deficiencies. By your own acknowledgement Spring Roo uses AOP extensively, which perhaps is the most compelling evidence that it is nothing like EJB 2.x at an engineering level. I also note that I've never seen anyone build an EJB 2.x application with web tier in under 10 minutes, providing evidence Spring Roo is totally unlike EJB 2.x at a productivity level either.
Blessed says:
Added on May 18th, 2009 at 3:49 amI understand this project is still in its preliminary stage and still has to undergo some rigorous testing. However, I would like to say that I am one of those who would like to be a season evangelist of this "doctrine" ROO. Just a few questions, could someone send me some info on how the persistent api of the petclinic was built. I was able to test it without any problem and must say I like the whole model. Also, how difficult would it be to make ROO render using jsf instead of jsp? Thanks in advance for your time.
xeno says:
Added on May 19th, 2009 at 8:51 amBen,
The keywords in the AOP is "cross-cutting behavior". I agree logging and security are very good candidates for AOP. Looking at the samples though I see that Roo will lean towards AOP for the application core logic (business logic if you like) and this I don't like …
Like Zqudlyba and many others I know, I am sick and tired of hearing that there will be something that will do the work for me. Face it – the work will be done by me. The question is how much I'll have to fight with the tools/utilities/languages …
Looks like Roo can help me bootstrap a complete project but if the project won't match my needs/preference I'd better do it the old-fashioned way with a text editor. Back to my previous statement: great idea, it is an empty niche but the balance between simplicity (of the end product not the tool) and flexibility (of the tool) will decide if it's going to be a hit.
Ben Alex (blog author) says:
Added on May 19th, 2009 at 6:18 pmXeno, I think the key point behind AOP is really "separation of concerns" , as distinct from cross-cutting behavior:
* The importance of separation of concerns is heavily reflected in formal computer science training as well as in practice. It's why we strive for specific layering techniques and concepts like high cohesion, MVC, the decorator pattern and AOP. There is far less emphasis on "cross cutting concerns", as they're simply a fact we need to deal with (like persistence, user interfaces etc) as opposed to some architectural concept we should be pursuing.
* If cross-cutting behavior were the only objective of AOP, we would not see mix-ins, inter type declarations (ITDs) or alike provided by AOP implementations. These concepts exist because the development community has identified merit in the concept of introducing members to types which did not declare those members in the traditional compilation unit for those types. One compelling benefit of mix-ins (ITDs) is separation of concerns.
I referred to cross-cutting behavior in my original reply because that's what most people associate with AOP and it is where its benefit of separation of concerns has been most visibly proven. If you try the tool you will see it easily supports you writing your own members in your own compilation units just as you always have, and it will automatically and intelligently not generate members in ITDs for manually-coded members. You will also see the tool does not do anything unless you ask it to via an annotation or UI directive, and even then it will not act unless the metadata model indicates it should act. It will automatically monitor your environment and update ITDs (and other files) as appropriate in response to changes.
Roo is one of those things you need to try out to see that it really does not get in your way. It's fine if you don't want to try it out, but if you don't try it out you should at least qualify your remarks accordingly. And if you did try it out and ran into an issue, please let me know what happened so I can clarify whether it is a design constraint or simply a bug that we will fix (remember Roo is only at alpha 2 stage right now).
In closing I again note we could have put all these members directly into .java compilation units if we wanted to. We simply think it's a bad idea as this is not achieving separation of concerns. People who disagree can still use Roo and move the members into their .java compilation units. But they sacrifice the benefits of separation of concerns and will have higher maintenance costs accordingly.
xeno says:
Added on May 20th, 2009 at 9:36 amBen,
Thanks. As usually I don't architect. I just do and adapt. Anyway, last question: any plans for command or switch or config option so I can have Roo generate the code in the java classes?
BTW, I and many others, really appreciate your work and efforts, which we use for free!
Framl says:
Added on June 25th, 2009 at 12:47 pmRegarding this comment in one of the replies from Colin above:
"The aspects are generated for you and you don't really have to think or know about them to any real extent,…"
I heartily disagree. If the generated stuff is running or supporting the app, I have to understand how it works because, inevitably, something will go wrong or I will want it to generate differently, etc. It doesn't matter how much stuff is generated for me. If I don't understand it, I can't support it.
I have seen this time and time again with every wiz-bang tool that comes down the pike. That's just as true with even Spring itself. You have to understand the concept of dependency-injection and how it works before you can use Spring effectively (especially when it comes to unit testing).
In fact, I think that requirement is the fundamental driver behind Roo. The Java development landscape has been greatly enriched by powerful frameworks like Spring, Hibernate, JSF, etc. But with each gain has also come a significant increase in complexity. So now, Roo comes along and tries to hide all that and jump start the creation of an app, using all these tools the "right" way. Kinda ironic I think.
Don't get me wrong. I applaud your efforts and this looks like a great tool to me.
Just don't oversell it. This tool may help by letting us ease our way into the massive complexity of all the frameworks involved. But it surely does not relieve us from having to deeply understand them all eventually.
Colin Sampaleanu (blog author) says:
Added on June 26th, 2009 at 3:57 pmFraml,
You're really quoting me out of context here…
I was specifically replying to a comment which complained about Roo generating 3 aspect classes (basically the ITDs) for your main Java class, and this being comparable to EJB 2.1 programming, or writing lots and lots of XML. My main point was that you really don't have to worry about creating these ITDs yourself, or having them impact your code at the code level (i.e. having to extend special base classes, implement special interfaces, or tie yourself to a container, etc. Roo will create (and remove) the helper ITDs automatically… This is fundamentally different than EJB 2.1, which has a huge impact on your code and process in a number of ways, and is fundamentally different to writing and managing lots of XML.
That said, w/respect to having to think about or understand the code in the ITDs, I do think the Roo approach required a fundamentally different level of understanding and involvement with that code, since you don't have to write it. It's one thing to add a field to your entity, and then have Roo automatically create or modify an aspect to add persistence for that field, and then be easily able to go in and see the generated code (and even do push down refactoring if you want to, to bring it into your code), vs. quite another level of understanding and involvement to go the traditional route of having to write the persistence code yourself from scratch…
Colin