Oracle Adds New Exhibit to Java Technology Museum

Engineering | Rod Johnson | April 20, 2009 | ...

Last year, Oracle acquired BEA Systems, the hottest company in enterprise Java…until around 2001.

Today, they announced the acquisition of Sun Microsystems, the architects of the infrastructure of the dot com era. Remember the "dot in dot com"??

Both companies represent the history of enterprise Java, and are far less important to the future.

Larry Ellison states that “Java is the single most important software we've ever acquired."? Ellison is right about the importance of Java: Java is the world’s #1 programming language and the dominant choice of the enterprise. But the question is exactly what has Oracle acquired? There is no purpose to be served by Oracle trying to milk the Java language itself for profit--and, in any case, it's now open enough to make that impossible. (Open sourcing Java did turn out to matter. A lot.) And it is a long time since Sun controlled enterprise

Spring Web Flow Project Update

Engineering | Keith Donald | April 20, 2009 | ...

The Spring Web Flow project team has just completed the 7th maintenance release of Web Flow 2. This is our best release to-date and comes nearly one year to the day of the Web Flow 2.0.0 final release. Now, with the 2.0.x line mature and stable, we are beginning work on the next major version. In this entry, I would like to reflect on the past year and also provide some information on where we are headed.

Web Flow 2 Adoption

When Web Flow 2 was released last year, we saw 50,000 downloads in the first two months after the release. Since then, our forum traffic has steadily increased, and we have seen new adoption across several exciting industries. Many of you know Spring Web Flow is the foundation of Orbitz's on-line travel platform which today powers sites such as and If you have been following the 2009 NBA playoffs, you may also find it interesting Web Flow is an important component of as well.

Our Work in the Past Year

Like all Spring projects, Web Flow depends on feedback to be successful. Field interactions with customers and SpringSource support engineers have driven much of our work on 2.0.x in the last year. The community has also been exceptional at reporting bugs, contributing patches, highlighting usage scenarios, and generally discussing ways the project can continue to improve.

I'd like to quickly recap some of the concrete improvements made since 2.0.0.RELEASE:

  • Configuration simplifications and conventions for flow URL mapping

    This one, applied in 2.0.5 and driven by customer feedback as well as Dan Allen's JSFOne presentation, cut the size of a typical webflow-config.xml in half, down to ~20 lines of configuration. As you can see, this was achieved by applying a wildcard-search for flow definitions in conjunction with conventions for binding flow definitions to URLs based on their flow ids.

  • Support for explicit view-state model bindings

    This improvement, first provided to SpringSource customers in response to this security advisory and subsequently released in 2.0.3, allows you to restrict the set of allowed model bindings by view-state. This was achieved in the declarative style shown here.

  • Redirect-after-post improvements

    One of the most useful features of Web Flow is the redirect-after-post pattern just works, which is one critical prerequisite to good back button support with controlled navigation. 2.0.5, 2.0.6 and 2.0.7 all introduced subsequent improvements to this support. The most recent improvement ensures redirect behavior is applied consistently in all scenarios, including when there is a binding or validation error. You can review the source code that controls the enforcement of this pattern in the doEnter and doResume methods of

  • Support for streaming actions

    The community figured out how to stream files back to a client participating in a flow. Documented support for this was overlooked in Web Flow 2.0.0 and was added in 2.0.6.

  • Type conversion improvements

    Numerous improvements to the system that powers view-state model binding were applied from 2.0.2 through 2.0.6. The system provides all the unique features of Spring's DataBinder, such as support for converting elements of generic collections, with a simpler type Converter API compared to Java PropertyEditors.

In addition to these core improvements, we have seen a number interesting Web Flow integrations in the last year such as Grails 1.1, the ZK RIA framework, Terracotta, IceFaces, SpringSource's richweb training course, IntelliJ, Skyway Software, and the first Web Flow 2 book.

Where We Are Headed

We have a lot planned for the future. I will leave all the technical details for another time, but would like to summarize some of the key themes of the effort. First, Web Flow 3 will be the first release to require Java 5, as it will build on Spring Framework 3 as its foundation. Second, you can expect to see the introduction of a @Flow model that compliments Spring MVC's stateless @Controller model and allows stateful web flows to be defined as POJOs. Third, you can expect Spring JavaScript and Spring Faces, two modules that grew out of the Web Flow 2 effort, to both be promoted to top-level Spring projects. Spring JavaScript will become Spring's official Ajax integration project, and Spring Faces will become Spring's official JavaServerFaces integration project.

I look forward to meeting with many of you at SpringOne next week to discuss your experiences applying the project and our future directions!

Enterprise Java and the American Motors Gremlin

Engineering | Rod Johnson | April 14, 2009 | ...

You may remember the AMC Gremlin--a strong claimant for ugliest car ever. The Gremlin was produced back in the 70s, but there are still a few around, like this one, which I photographed last year in San Francisco.

AMC Gremlin

The enterprise Java experience today reminds me of this piece of American motoring heritage. The Gremlin was a desperate response to the oil shock. AMC needed a “compact” car, so they took the smallest car they had and chopped it in half. The end result sold surprisingly well, but showed unmistakable signs of the fact that its front and rear were produced by different teams and…

Proxies in OSGi

Engineering | Ben Hale | April 14, 2009 | ...

Over the past couple of months, we've had a number of customers report issues to us regarding ClassNotFoundExceptions and proxies in dm Server. The issue actually has to do with type visibility in OSGi and is explained very well by Peter Kriens over at the OSGi Alliance Blog. Please take a look at his post if you are seeing classloading issues when using proxies in dm Server or any other OSGi runtime.

Write your Google App Engine applications in Groovy

Engineering | Guillaume Laforge | April 08, 2009 | ...

[caption id="attachment_1577" align="alignright" width="250" caption="Google App Engine Groovy"]Google App Engine Groovy[/caption]

Google just announced that their Google App Engine cloud hosting platform now supports other languages than Python: namely Java and Groovy!

You can now effectively write your Google App Engine applications in Groovy!

A couple of weeks ago, the SpringSource Groovy team and the Google App Engine Java team worked together, hand in hand, to iron out the details, to ensure that the popular and award-winning Groovy dynamic language for the JVM would run well on this exciting platform. After having created together some patches for Groovy, in the area of constrained and strict security manager policies, the Groovy development team integrated these patches and released the updated Groovy 1.6.1 version in line for the D-Day…

Announcing dm Server 2.0 M1

Engineering | Rob Harrop | April 02, 2009 | ...

Development work on dm Server 2.0 has been fully underway for some time now and I'm pleased to announce that the first milestone is available for download. Downloads are available from our home page. You can find more information about the features in this release and the coming release in my previous entry.

In this blog entry I'll outline:

  • what is new in 2.0 M1
  • building dm Server directly from SVN

We're using Scrum

For the development of the 2.0 release, the dm Server team have adopted Scrum. You can see our current sprint and release backlogs in our JIRA. As ever, the development of dm Server is driven by the requirements of our users. If you see an item on the…

SpringSource dm Server Roadmap

Engineering | Rob Harrop | April 01, 2009 | ...

We get a lot of questions from dm Server users about what to expect in the next few releases. In this blog entry, I will outline the main features that we have on our roadmap. We are following Scrum practices so you can expect to see reasonably frequent milestones as output from our sprints, and we are flexible in handling new requirements and changes in priorities.

Shared repositories

Shared repositories allow you to have a centralized location for managing the artifacts that are available to be installed in your dm Server instances. These shared repositories can then be added to a dm Server configuration at…

Announcing dm Server Getting Started Guide

Engineering | Rob Harrop | March 30, 2009 | ...

Over the past few months, the community has shown a great deal of interest in dm Server. The forums are very active and we always have stimulating discussions when presenting at conferences. We've noticed that a lot of the same questions come up as users start developing their first applications for dm Server, and so we've put together a Getting Started Guide to help get you up to speed much more quickly.

By reading the Getting Started Guide and studying the accompanying sample you'll learn best practices for :

  • installing the dm Server
  • setting up an effective development environment using the dm Server Eclipse tools
  • creating web modules for presentation logic
  • structuring your application with separate middle-tier and data access modules
  • creating and managing shared services such as Data Sources
  • creating unit and integration tests
  • building dm Server applications using Maven

The guide is available in HTML and PDF formats, and the full code for the sample application can be found here

Job Trends: Tomcat, Spring, Weblogic, JBoss, EJB

Engineering | Shaun Connolly | March 29, 2009 | ...

Forrester recently described a trend that they refer to as "lean software" in their paper entitled Lean Software Is Agile, Fit-To-Purpose, And Efficient. They state that "lean software is emerging as the antidote to bloatware" and that "the trend toward lean software has been building for years, but the worldwide recession is accelerating it".

Forrester mentions SpringSource as one of four companies at the forefront of the lean software movement. This is due to our leadership within the Spring, Apache, Groovy and Grails communities, as well as our active encouragement, via SpringSource dm Server, of enterprise OSGi as the basis for next-generation application…

REST in Spring 3: RestTemplate

Engineering | Arjen Poutsma | March 27, 2009 | ...

In an earlier post, I blogged about the REST capabilities we added to Spring @MVC version 3.0. Later, Alef wrote about using the introduced functionality to add an Atom view to the Pet Clinic application. In this post, I would like to introduce the client-side capabilities we added in Milestone 2.


The RestTemplate is the central Spring class for client-side HTTP access. Conceptually, it is very similar to the JdbcTemplate, JmsTemplate, and the various other templates found in the Spring Framework and other portfolio projects. This means, for instance, that the RestTemplate is thread-safe once constructed, and that you can use callbacks to customize its operations.

RestTemplate Methods

The main entry points of the template are named after the six main HTTP methods:

DELETEdelete(String, String...)
GETgetForObject(String, Class, String...)
HEADheadForHeaders(String, String...)
OPTIONSoptionsForAllow(String, String...)
POSTpostForLocation(String, Object, String...)
PUTput(String, Object, String...)

The names of these methods clearly indicate which HTTP method they invoke, while the second part of the name indicates what is returned. For instance, getForObject() will perform a GET, convert the HTTP response into an object type of your choice, and returns that object. postForLocation will do a POST, converting the given object into a HTTP request, and returns the response HTTP Location header where the newly created object can be…

Get the Spring newsletter

Thank you!

Get ahead

VMware offers training and certification to turbo-charge your progress.

Learn more

Get support

Spring Runtime offers support and binaries for OpenJDK™, Spring, and Apache Tomcat® in one simple subscription.

Learn more

Upcoming events

Check out all the upcoming events in the Spring community.

View all