Blogs

SpringSource Blog

Spring Roo 1.1.0.M2 Released

Ben Alex

I'm pleased to announce we've just released Spring Roo 1.1.0.M2 (download here). We've also concurrently released SpringSource Tool Suite 2.3.3.M2, which offers the latest integration with this new Spring Roo release. For production use we recommend you continue to use Spring Roo 1.0.2, although we know a very large number of people are happily using the Roo 1.1.0 development releases as well.

What's New?

So, what's included in the new Spring Roo 1.1.0 Milestone 2? Well, there's 140 fixes, improvements and enhancements since Milestone 1. Some of the highlights include:

More Add-On Discovery and Management Features

Spring Roo 1.1.0.M2 also features a large number of enhancements in preparation for the all-important add-on discovery and management features. The Roo team is highly committed to helping build a vibrant add-on ecosystem for Roo, which will benefit the many users who'd like functionality not included in the core Roo distribution.

As part of this work, Roo now automatically downloads an OBR index from our new repository, http://spring-roo-repository.springsource.org/repository.xml. As a Roo user you're unlikely to see much of the OBR infrastructure (as it just works!), but it's good to know that OBR provides Roo with an OSGi-standardised way to discover available add-ons, resolve their dependencies, download them to your Roo environment and automatically start them up. This means Roo users benefit from an industrial-strength, OSGi-standardised way to manage add-ons and we won't hit a barrier as increasingly complex add-ons are made available to the Roo community.

Roo has also extended the OBR capabilities by integrating OBR metadata directly into shell command resolution. This means if you type a command that is part of a presently uninstalled add-on, Roo will automatically suggest to you which add-on(s) can provide that command! I'm happy to acknowledge this particular feature was inspired by my use of Ubuntu, as it's tremendously useful to just type any random command and have the system inform you the one-line installation command you need to type to have that command installed.

While this new OBR support and shell command discovery is certainly very nice, we also wanted to ensure we could offer convenient add-on hosting for the Roo community. But to do this properly means we needed to carefully consider security implications.

We tackled add-on security by adding extensive PGP key management features to Roo 1.1.0.M2. These allow you to indicate exactly which developers you trust to sign software that Roo will download to your computer. Roo itself is now also PGP signed in every release. To support these capabilities we've introduced a new protocol handler called httppgp:// into Roo. This tells Roo a given HTTP URL also has a PGP armour detached signature available.

By requiring PGP signatures for all add-ons, we're able to conveniently and safely host all Roo add-ons for the community. It's up to you to decide if you trust a given PGP key, and without trusting that key, Roo will refuse to even spend time downloading the httppgp:// resource. We also implemented this architecture so we didn't need to change Apache Felix's OBR infrastructure nor force everyone to use our central add-on hosting feature. This means we benefit from future improvements to OBR in newer Felix releases, plus it's perfectly fine for you to use httppgp:// URLs in your own OBR repository.xml files. Roo's approach also means you can also use standalone PGP tools like GnuPG to perform signature-related operations to independently verify Roo's correct operation. As you can tell, I'm very happy about the new PGP OBR infrastructure (but I guess my geeky Acegi Security/Spring Security past is shining through there!).

I'll talk more about how this new infrastructure works when we announce Milestone 3, as that will incorporate the full add-on end user interface. Plus we'll also be introducing our new backend tool that helps automate add-on publication to the central repository (called RooBot). If you can't wait for the new end user interface, try the "pgp list trusted keys" command to see which keys Roo trusts by default. Also try typing "welcome property" at the Roo prompt to see how Roo advises the currently-uninstalled add-ons which provide the "welcome property" command. If you really want to see the httppgp:// infrastructure in operation, try untrusting my PGP key (pgp untrust –keyId 00B5050F) and then try installing the welcome add-on (osgi obr start –bundleSymbolicName org.springframework.samples.roo.welcome).

1.1.0 Roadmap

Despite all the neat new features in Roo 1.1.0.M2, we've also been very busy preparing other features which didn't make it into the Milestone 2 release.

One feature many people are keenly waiting for is incremental database reverse engineering. This feature request now has over 113 votes and the implementation already supports Java compilation unit lifecycle management, incremental field maintenance, composite primary keys and most relationship types (1:M, M:M, 1:1). We anticipate this feature will be included in Roo 1.1.0.M3, but if you want to live on the bleeding edge, you can experiment by building Roo from Git.

Some other interesting features we've been working on include an Op4J add-on, a very nice automatic Git add-on, and some web embedding commands. The Op4J add-on allows you to dramatically reduce the amount of code you need to write, without loosing the type safety, code assist and performance benefits of Java. The automatic Git add-on turns each Roo command you execute into an individual Git commit, which is fantastic for viewing what Roo is doing and being able to selectively rollback etc. The web embedding commands are very nice and allow you to incorporate resources like YouTube videos, SlideShare presentations, Google Maps, Flikr photos and similar media into your web views with just one Roo command (in all there are 15 different resource types currently supported, covering everything from photo sharing to finance updates and everything in between).

If you're curious about our release dates, you can track them by visiting http://tinyurl.com/rooroadmap. Of course these dates are amended as our development progresses (and dependent projects similarly amended their dates), but they give you a good indication.

Other Community News

A few other interesting announcements for the Roo community:

  • There is now a dedicated Spring Roo podcast at http://roopodcast.com/, already with two audio interviews
  • Manning are publishing a Spring Roo in Action book, which is already available via the early access program (with the first chapter being free – there's even a limited-time 40% discount if you use code "ju1540")
  • SpringOne 2GX will be featuring a number of Spring Roo sessions, so if you're in North America (or even further away!) why not come along and hear about Roo directly from the people who wrote it
  • There will also be Roo coverage at other major conferences like JavaOne and Devoxx later this year
  • You can always hear the latest Roo news by following @SpringRoo and the engineering team (Ben, Alan, Stefan) on Twitter (if you Tweet about Roo, please include @SpringRoo in your tweets so people can search for them)

We hope you enjoy this new release! Please let us know what you think via @SpringRoo or the community forums.

Similar Posts

Share this Post
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • DZone
  • LinkedIn
  • Slashdot
  • Technorati
  • Twitter
 

23 responses


  1. Thanks, for this great release, Ben.

    A small problem with a newly created Roo project (in STS 2.3.3M2) seems to be that the AspectJ version referenced in the POM is not found in any of the Maven repos listed. Where should 1.6.10.M1 be found?

    Looks like someone has hit the same problem:
    http://forum.springsource.org/showthread.php?p=309543

    Cheers


  2. Wow.. this time i am able to install GAE extension at STS 2.3.3M2. Thanks springsource


  3. Wow, I was quite busy the last weeks and couldn't follow ongoing development in M2. It is amazing what you guys have developed so far in Roo!

    I am really happy to see that Roo-Addon infrastructure and usability is addressed. And the security mechanism, quite neat. The speedup issue was important to be addressed. It was one of those blockers for real production development usage.

    Thanks for the article and keep up the good work.
    Regards


  4. @Adrian, thanks for reporting this issue. I've logged it as https://jira.springsource.org/browse/ROO-1111 and it is already fixed. The fix will be in Spring Roo 1.1.0.M3. The issue only happens via m2eclipse and is easy to work around by editing your pom.xml. I'd point you to the description in ROO-1111 for why it happens and how to easily correct it.


  5. Very exciting to see the progress being made here, especially as it concerns the GWT integration.

    Complete n00b question – ss there somewhere where I could submit an enhancement request for a future iteration? I'd love to have a command added for field / entity removal:

    remove –fieldName | –className

    I find myself mistyping something, or forgetting a flag like –testAutomatically or –notNull, and having to pull out the stuff by hand is not very fast. An "undo" command to unwind whatever was done last would be just as helpful.


  6. @Erik, Spring Roo is completely round-trip aware and encourages you to edit your .java files. So if you make a mistake, just edit the file and fix it up. Roo will automatically respond.

    FYI enhancement requests, bugs etc are tracked at http://jira.springsource.org/browse/ROO.


  7. @Ben, thanks for the prompt reply!

    I just added ROO-1124 as an enhancement request (adding "undo" as a command – it addresses more issues than the individual "remove" command I think).

    I really like where Roo is heading, and I do understand the round-trip aware nature of the tool. The problem I'm having is knowing what parts of my project were modified by the tool for each command, and how to clean up after myself if I've messed up on a command. I can do this for an easier command; the more complicated ones have me either reverting to a backup or scrapping the entire project and starting over, since I'm not sure what changed. Having an undo command there would do wonders to address this.


  8. @Erik, you'll like the new Git support we've got in Roo. It automatically tracks every single change and makes it a separate Git commit. You can then see each atomic change and rollback easily via Git. Thanks for logging ROO-1124.


  9. Thanks Ben. It is really awesome. Pretty released.Good luck :)


  10. Hi,
    I am using STS-2.3.3.M2 for 1 week and I found it is a great tool. It really has unburdened the developers from lot of work.
    But I found an issue while developing an GWT (2.1 M2) application with ROO-1.1.0 M2. I am getting "Deferred binding failed" error. Here I have summarized my development process:

    In ROO Shell :
    1) persistence setup –provider HIBERNATE –database MYSQL –databaseName awsdb –userName dbuser –password dbuser
    2) entity –class ~.domain.Customer
    3) field string –fieldName name
    4) entity –class ~.domain.Service
    5) field string –fieldName servicename
    6) field reference –fieldName customer –type ~.domain.Customer
    7)gwt setup

    While running the application in development mode, I am able to add new Customer, but while I am trying to add a new Service, I am getting following error:
    ——————————————————————————————————-
    [ERROR] [applicationScaffold] Deferred binding failed for 'com.test.management.gwt.scaffold.generated.ServiceEditView.DataBinder'; expect subsequent failure
    ——————————————————————————————————-

    My concern is, whether ROO 1.1.0 M2 support reference field? While I am able to add, delete & update a simple datatype field & string field, I am not able to do any CRUD operation when a domain object contains a reference field.
    I will appreciate it, if I get some suggestion on this.

    Regards,
    Chandan


  11. @Chandan, Spring Roo 1.1.0.M3 will be out this week and include support for GWT 2.1.0.M3 (also out this week). These new versions provide relationship support. The support is new because the Roo GWT add-on builds upon GWT 2.1.0's new "RequestFactory" feature and the functionality is just being added to GWT itself.


  12. Hi Ben, Thank you for your reply. From your mail, can I conclude that, the relationship support is not available in GWT 2.1.0 M2 itself?
    Regards,
    Chandan


  13. @Chandan, that's right, GWT 2.1.0.M2 doesn't support relationships via RequestFactory. Just a heads up, GWT 2.1.0.M3 is now looking at mid next week as the GWT team are making some further improvements to RequestFactory we want to fold into the next milestones.


  14. In Spring Roo 1.1.0.M3 there was a feature @RooWebScaffold( automaticallyMaintainView=false ) and doesnt appears in the current version, what can i do to avoid ROO always updates a Controller?


  15. @Ivan, please see http://static.springsource.org/spring-roo/reference/html/base-web.html for a background to how JSPX round-tripping now works. Because Spring Roo can automatically maintain the JSPX for you at the same time as you edit it, there is no need for the "automaticallyMaintainView" attribute anymore (it just happens automatically now).


  16. Hi Ben,

    The issues with the round-tripping jspx certainly works as you mention, but i have an other concern, when roo generates a scaffold controller then we have:

    * SomeController.java
    * SomeController_Roo_Controller.aj

    Then in the file SomeController_Roo_Controller.aj we have a "Converter" method, but i dont like the String that is generated there, how can i do something to replace this method , and aboid roo in the future updates this file automatically.

    Thanks a lot for the Info, was very useful for me.


  17. Hi, great tool. I found out a bug when putting two boolean in an entity. The HTML markup generated is correct the the JavaScript decoration software makes the name attribute of the second checkbox control the same as the first one. If you disable the javascript call in the tagx for the form checkbox things works ok.

    Cheers,
    Mario


  18. Ivan and Mario, would you mind trying the community forum at http://forum.springsource.org/forumdisplay.php?f=67 if you have questions on Roo? It helps with build a searchable archive of questions and answers, and there are lots of people participating on the forum who can help.

    Thanks
    Ben


  19. hi ben,

    i know there was an issue reported (http://forum.springsource.org/showthread.php?t=92420) regarding roo replacing the ui.xml files in the generated folder. i thought it was going to be resolved in rc1. but i went to rc1 issue tracker and could not find it in the list. could you kindly let me know when it might be resolved?


  20. Hi Ben,
    When we can expect ROO 1.1.0 M3 release?
    Per my previous mail, does it support relationship between 2 entities?

    Thanks one more time for this wonderful tool.

    Regards,
    Chandan


  21. @Sakib, https://jira.springframework.org/browse/ROO-937 is tracking the round-tripping of GWT UiBinder XML files. No design has been finalized, but the GWT and Spring Roo teams discussed this last week and we're looking at some of the conventions established in the Roo 1.1 MVC JSPX round-tripping model.

    @Chandan, I spoke with the GWT team less than two hours ago about M3. They're finalizing GWT 2.1.0.M3 as I write this, so I hope to release Roo 1.1.0.M3 this afternoon Sydney time.


  22. can we update an entity in the roo shell itself?we can update a filed using an IDE, but is there any possible way to edit it in the roo shell itself?
    i mean if i have defined a field as
    field number –fieldName price –type java.lang.Flloat
    in the above command i have misspelled as Flloat instead of Float
    can i change it in the roo shell itself


  23. @aditya,
    Probably you do not need to do above things while you are providing a type. ROO shell's code assist(CTRL SPACE) will provide you the java types.

    And if you are typing it manually '–type java.lang.Flloat", the easiest thing is to hit BCKSPACE and rectify. :)

2 trackbacks

Leave a Reply