SimpleJdbcTemplate: Spring 2.0 and Java 5

Engineering | Ben Hale | November 28, 2006 | ...

In the run up to The Spring Experience I've been busy but I've noticed that Rod's been really active on the blogging front. So in some spare time in airports and on planes today, I've decided to do a little blogging.

One of the biggest balancing acts that we in the Spring community have is to make sure that we stay backwards compatible while still innovating. Part of that innovation is taking advantage of new features and constructs in later versions of Java such as Java 5. Since the 1.2.x branch, we've seen some of this with things like the @Transactional annotation and our JMX auto-detection based on the @ManagedResource annotation. In the end these are great features and have greatly simplified development (at least mine anyway), but they really amount to moving metadata into the code. What we hadn't seen was…

XML Syntax Sugar in Spring 2.0

Engineering | Rod Johnson | November 26, 2006 | ...

If you've followed October's Spring 2.0 release, you will know that one of the big new features was XML extension name spaces: the ability to define new XML elements and attributes that generate Spring metadata, and can be used alongside regular bean definitions. This provides a valuable new extension point and makes Spring configuration both more simpler to use for many repeated tasks and more powerful.

However, there is also a sweet little piece of syntax sugar that you may not have noticed--probably because no one in the Spring team has gotten around to telling you... Having promised myself…

Spring Framework 2.0.1 Released

Releases | Juergen Hoeller | November 23, 2006 | ...

Dear Spring community,

We are pleased to announce that Spring 2.0.1 has been released. Download | Docs | Changelog.

This is the first maintenance release for Spring 2.0, including fixes for most bugs that have been reported since 2.0 final as well as many minor enhancements. This release also introduces OpenJPA support and GlassFish weaving support. Furthmermore, it features redesigned AspectJ support internals and an improved bean definition tooling SPI.

As always, please see the changelog for the details.

If you are new to the Spring 2.0 series, please also see the original Spring 2.0 announcement for more information.

FYI, the Spring 2.0.2 release is scheduled for end of December. Our JIRA road map outlines the issues that are planned to be addressed in that release.

Juergen
-----
Juergen Hoeller
Lead, Spring Framework Development
Chief Architect, Interface21
http://www.springframework.org
http://www.interface21.com

Spring LDAP 1.1.1 Released

Releases | Ulrik Sandberg | November 18, 2006 | ...

Dear Spring Community,

We are pleased to announce that Spring LDAP version 1.1.1 has been released. This is an update release that adds several new features and fixes a few problems that were in 1.1. Download | ChangeLog | Documentation | API

A summary of the more important changes:

  • Added capability to use server-side controls in search.
  • DirContextAdapter.getNameInNamespace() now returns the full DN.
  • DistinguishedName now supports multi-valued RDNs separated by a '+' sign, like "cn=Rod+sn=Johnson", for example.
  • Added lookup methods that take an array of return attribute names.
  • Upgraded Spring to 2.0 internally. Spring 1.2.8 is still supported.

About Spring LDAP
Spring LDAP is a Java library for simplifying LDAP operations, based on the pattern of Spring's JdbcTemplate. The framework relieves the user of the burden of looking up and closing contexts, looping through NamingEnumerations, encoding/decoding values and filters, and more.

The LdapTemplate class encapsulates all the plumbing work involved in traditional LDAP programming, such as creating, looping through NamingEnumerations, handling Exceptions and cleaning up resources. This leaves the programmer to handle the important stuff - where to find data (DNs and Filters) and what do do with it (map to and from domain objects, bind, modify, unbind, etc.), in the same way that JdbcTemplate relieves the programmer of all but the actual SQL and how the data maps to the domain model.

In addition to this, Spring LDAP provides Exception translation from NamingExceptions to DataAccessExceptions, as well as several utilities for working with filters, LDAP paths and Attributes.

Spring-LDAP requires J2SE 1.4. J2SE 1.4 is required for building. J2EE 1.4 (Servlet 2.3, JSP 1.2) is required for running the example.

Where to start
Download the distribution from the link above. The distribution contains extensive JavaDoc documentation as well as full reference documentation and a sample application illustrating different ways to use Spring LDAP.

Home
The permanent home of Spring LDAP is at http://www.springframework.org/ldap.

History
Spring LDAP is based on the SourceForge LdapTemplate project. Users of LdapTemplate are advised to switch to Spring LDAP.

Mattias Arthursson & Ulrik Sandberg
Spring LDAP Project Team

Spring Framework: The Origins of a Project and a Name

Engineering | Rod Johnson | November 09, 2006 | ...

I am regularly asked about the origin of the name “Spring.”

The name goes back to late 2002. In November 2002, I published Expert One-on-One J2EE Design and Development. The book was accompanied by 30,000 lines of framework code, which had accounted for a good deal of the year full-time I put into writing the book. (Writing a 750 page book is enough work on its own; writing a substantial framework to go along with it is sheer masochism. It was hard.) Many of the fundamental concepts of the Spring Framework were there: an already capable IoC container, with BeanFactory and ApplicationContext…

Last chance to join 500+ others in Australia

Engineering | Ben Alex | November 01, 2006 | ...

If you're reading this blog, chances are that you already know Spring is a pretty popular framework. Most J2EE developers who've ever used it simply love it, as illustrated by 12+ books, 1,000,000+ downloads, 14,000+ forum members etc. Still, even I was surprised when my Australian Spring user group announcement a little over a week ago generated this much interest... As of today, we've had over five hundred registrations to attend these three meetings. Indeed, we've needed to move the Sydney meeting to larger premises, with the Brisbane and Melbourne meetings almost booked out. If you're…

Oracle, Open Source and Commodization

Engineering | Rod Johnson | October 28, 2006 | ...

I was in San Francisco for Oracle World. I even spoke briefly in Thomas Kurian's keynote on Java middleware. But Neelan and I had to leave on Tuesday and missed the Big Deal: Larry Ellison announcing that Oracle are offering support for Linux.

This is an interesting event from the perspective of the open source business. What are the wider implications?

Oracle are offering support for an open source product that they did not create and don't control.

This is possible for a number of reasons:

  • Linux is not a product. It is a class of technology, and companies or organizations assemble, document, distribute and support products.
  • Linux support is already commoditized to some extent. Red Hat is only one of several distributors offering support.
  • The leadership of Linux is diffused. Linus Torvalds does not work for a big distributor; Red Hat does more than most but no single company provides clear leadership.
  • The leadership of Linux matters less than you think. Linux is not primarily an engine of innovation, but an engine of commodization.

However, it's interesting to think about what the limits are for companies such as Oracle in providing…

Interface21 / Spring at Oracle OpenWorld 2006

Engineering | Neelan Choksi | October 23, 2006 | ...

Rod and I are here in San Francisco at Oracle OpenWorld 2006. This is indeed a scene. I can't decide if "hubris" or "impressive" is the right way to describe it but the numbers don't lie. They are expecting 45000 people for the conference and the City of San Francisco thinks the show will generate $50-60M in money for the city. Apparently, no Oracle employee is allowed to stay in a hotel north of the airport. One of the more shocking things was that the city blocked off a chunk of Howard St. in front of Moscone for the conference.

In this morning's Oracle Develop keynote given by Thomas Kurian, Senior Vice President at Oracle, Spring was front and center. Thomas had Rod get on stage during the keynote and describe what Spring is and what's new with Spring 2.0. Rod also talked about the collaboration…

Spring Web Flow 1.0 RC4 Released

Releases | Keith Donald | October 05, 2006 | ...
Dear Spring Community,
 
We are pleased to announce that Spring Web Flow 1.0 RC4 has been released.
 

 

Spring Web Flow is a product of the Spring community focused on the orchestration of user interface flow within a web application.

This release contains many improvements and several exciting new features.  We consider it the most stable release to-date and, at last, the release that makes the Spring Web Flow 1.0 final roadmap feature complete.  Spring Web Flow 1.0 final will be released next week with minimal changes.  Between now and then we encourage you to test 1.0 RC4 to help catch any remaining issues before the big 1.0 launch.

Note there are user-affecting changes in this release.  1.0 RC3 or earlier users should review the upgrade guide which outlines these changes in detail.

The new and noteworthy in 1.0 RC4 is an exciting list, including: 

New and Noteworthy

As the final release candidate before Spring Web Flow 1.0 final, Spring Web Flow 1.0 RC4 introduces powerful new features such as render actions (1), evaluate actions (2), set actions (3), flash scope (4), flow execution attributes (5), and always redirect on pause (6). It provides enhanced documentation, better flow definition validation, smart defaults, and a complete custom Spring 2.0 configuration schema (7) for configuring the flow execution engine.

  • (1) Render actions execute application behavior before a response is rendered.  A render action is invoked when a view-state is asked to make a renderable view selection, on entry or on a refresh triggered by a redirect or brower refresh button.  The following example shows a render-action that executes a search of the phonebook before the results view is rendered.

    <view-state id="displayResults" view="searchResults">
        <render-actions>
            <bean-action bean="phonebook" method="search">
                <method-arguments>
                    <argument expression="flowScope.searchCriteria"/>          
                </method-arguments>
                <method-result name="results"/>
            </bean-action>
        </render-actions>
        <transition on="newSearch" to="enterCriteria"/>
        <transition on="select" to="browseDetails"/>
    </view-state>

  • (2) Evaluate actions evaluate expressions against flow execution state.  The expression (OGNL-based by default) can be against any object reachable from the flow execution's root RequestContext, including objects in any scope such as flow scope.  The following example shows an evaluate-action that invokes the "makeGuess" method on the "game" flow-scoped bean:
    <action-state id="makeGuess">
        <evaluate-action expression="flowScope.game.makeGuess(requestParameters.guess)">
            <evaluation-result name="guessResult"/>
        </evaluate-action>
        <transition on="CORRECT" to="showAnswer"/>
        <transition on="*" to="enterGuess"/>
        <transition on-exception="java.lang.NumberFormatException" to="enterGuess"/>
    </action-state>
  • (3) Set actions set attribute values in scope types such as flow scope.  The attribute may be a top-level attribute or a property at a nested property path.  The following example shows a set-action that sets the "fileUploaded" attribute to "true" in flash scope.
    <action-state id="uploadFile">
        <action bean="uploadAction" method="uploadFile"/>
        <transition on="success" to="selectFile">
            <set attribute="fileUploaded" scope="flash" value="true"/>
        </transition>
    </action-state>
  • (4) Flash scope is a new scope type for persisting attributes across a redirect and any refreshes of the view.  When an event is signaled to transition out of the view flash scope is cleared.  The following complete flow definition example shows use of flash scope to expose a "fileUploaded" attribute to the selectFile view-state for displaying a success message after a successful upload.
    <flow xmlns="http://www.springframework.org/schema/webflow"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.springframework.org/schema/webflow
                                           http://www.springframework.org/schema/webflow/spring-webflow-1.0.xsd">
   
        <start-state idref="selectFile"/>
       
        <view-state id="selectFile" view="fileForm">
            <transition on="submit" to="uploadFile"/>
        </view-state>
   
        <action-state id="uploadFile">
            <action bean="uploadAction" method="uploadFile"/>
            <transition on="success" to="selectFile">
                <set attribute="fileUploaded" scope="flash" value="true"/>
            </transition>
        </action-state>
       
    </flow>
  • (5) Flow execution attributes allow you to set custom attributes that can influence flow execution behavior.  The following example shows an instruction to set the "alwaysRedirectOnPause" attribute to false in a Portlet environment (where redirecting doesn't tend to apply).
    <flow:executor id="flowExecutor" registry-ref="flowRegistry">
        <flow:execution-attributes>
            <flow:alwaysRedirectOnPause value="false"/>
        </flow:execution-attributes>
    </flow:executor>
  • (6) "Always redirect on pauses" gives you default POST+REDIRECT+GET behavior with no special coding. Now by default, when a view state is entered a redirect is issued automatically.  This triggers a refresh to a flow execution URL that remains stable while the conversation is active.
  • (7) The new Spring 2.0 Configuration Dialect greatly simplifies system configuration and provides strong validation and tools support.  Configuring webflow's infrastructure is now as simple as defining two elements, as shown in a complete manner below:
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:flow="http://www.springframework.org/schema/webflow-config"
           xsi:schemaLocation="
               http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
               http://www.springframework.org/schema/webflow-config
               http://www.springframework.org/schema/webflow-config/spring-webflow-config-1.0.xsd">
   
        <!-- Launches new flow executions and resumes existing executions. -->   
        <flow:executor id="flowExecutor" registry-ref="flowRegistry"/>
       
        <!-- Creates the registry of flow definitions for this application -->
        <flow:registry id="flowRegistry">
            <flow:location path="/WEB-INF/flows/**-flow.xml"/>
        </flow:registry>
       
    </beans>

See the reference manual for more information on these features.  Spring Web Flow 1.0 RC4 further refines the reference documentation, providing 70 pages on SWF usage.  The manual is available on-line in HTML and PDF forms.

Getting Started

One of the best ways to get started with Spring Web Flow is to review and walkthrough the sample applications.  We recommend reviewing all samples, supplementing with reference manual material as needed from the start. Ten sample applications ship with the  release, each demonstratinga distinct set of product features.  These samples are:

  1. Phonebook - the original sample demonstrating most features (including subflows)
  2. Sellitem - demonstrates a wizard with conditional transitions, flow execution redirects, custom text field formatting, and continuations
  3. Flowlauncher - demonstrates all the possible ways to launch and resume flows
  4. Itemlist - demonstrates REST-style URLs and inline flows
  5. Shippingrate - demonstrates Spring Web Flow together with Ajax technology
  6. NumberGuess - demonstrates stateful beans, evaluate actions, and "single key" flow execution redirects.
  7. Birthdate - demonstrates Struts integration
  8. Fileupload - demonstrates multipart file upload, set actions, and flash scope
  9. Phonebook-Portlet - the phonebook sample in a Portlet environment (notice how the flow definitions do not change)
  10. Sellitem-JSF - the sellitem sample in a JSF environment

To build the sample applications for quick evaluation simply:

  1. Extract the spring-webflow-1.0-rc4.zip release archive
  2. Access the projects/spring-webflow/build-spring-webflow directory
  3. Execute the "ant dist" target.
  4. See the "target/artifacts" directory for deployable .war files for each sample as well as expanded war directories.
See the release readme.txt and projects/spring-webflow/spring-webflow-samples/readme.txt for more information on the release archive contents and samples, respectively.

All sample projects are Spring IDE projects directly importable into Eclipse.

Thanks to everyone out there who supported this release.  Spring Web Flow 1.0 is now... finally... just around the corner.

Enjoy!

The Spring Web Flow Team

Spring 2.0 final, with over 10,000 downloads in the first day

Engineering | Rod Johnson | October 05, 2006 | ...

Spring 2.0 went final on Tuesday! This is the product of 9 months of hard work from the Spring team, and huge amounts of user feedback (thanks!) and it's a big step forward.

I promise my next blog will be about something other than download numbers. I've been playing around with some interesting approaches to testing pointcuts in @AspectJ annotations, so I'm hoping next time to post some interesting code.

But we just noticed some pretty amazing figures from SourceForge, so I can't resist posting about them. There were over 10,000 downloads of Spring 2.0 in the first 24 hours! Interest in Spring 2.0 has been building for months--with some users already in production with a release candidate, including a prominent media site in Europe--and I think Keith's brilliant launch page

Get the Spring newsletter

Thank you for your interest. Someone will get back to you shortly.

Get ahead

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

Learn more

Get support

Tanzu 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