Spring Web Flow 1.0

Releases | Keith Donald | June 10, 2006 | ...

 

Product Leads
Keith Donald, SpringSource
Erwin Vervaet, Ervacon
 
Spring Web Flow is a next generation Java web application controller framework that allows developers to model user actions as high-level modules called flows that are runnable in any environment.  The framework delivers improved productivity and testability while providing a strong solution to enforcing navigation rules and managing application state.  

The Big Picture

Spring Web Flow allows developers to build reusable, self-contained…

Spring Web Flow 1.0 RC2 Released

Releases | Keith Donald | June 10, 2006 | ...


 

Dear Spring Community,

We are pleased to announce that Spring Web Flow (SWF) 1.0 RC2 (Release Candidate 2) has been released.  Download | Documentation | Changelog

This release contains bug fixes and minor improvements.   The new and noteworthy of 1.0 RC2 include...

NEW AND NOTEWORTHY

Support for passing newly launched flow executions input from their calling environment in a configurable manner.  By default all request parameters are exposed as input.  The flow may then choose to map this input into its own local scope using its input mapper.  This mapper defines the input contract for the flow which is consistent regardless of whether the flow is started as a top-level flow  or as a subflow.

Consider the following request URL as an example:

http://localhost:8080/flights/search-flow?flightNumber=12345

By default, when this URL is accessed the backing FlowExecutor will place the "flightNumber" request parameter into an "input map".  The input map is then passed to a new execution of the "search-flow".

Within the search-flow definition:

<flow start-state="executeSearch">
    <input-mapper>
        <mapping source="flightNumber" target="flowScope.flightNumber"/>
    </input-mapper>

    ...
</flow>
The <input-mapper> above defines the flow's input contract, stating this flow supports a "flightNumber" input attribute.  When a flightNumber is provided at startup it will be mapped into "flowScope" under the name "flightNumber".  The mapper is also capable of performing a type conversion during the mapping operation.

To customize flow execution input map population, for example, to pull attributes from the request path or some other external source, configure the "FlowExecutorImpl.inputMapper" property.

Support for flow execution and external redirects within a JSR168 Portlet environment.  Combined with a continuation-based repository this allows use of browser navigational buttons (back, refresh) within a Portlet environment.  Also in a Portlet environment we now expose a "globalSessionMap" property for accessing attributes in Portlet Session APPLICATION_SCOPE.

A new repository factory named "SingleKeyFlowExecutionRepositoryFactory". This implementation generates a single unique identifier for each persistent flow execution.  It is useful for achieving 1.0 EA "conversation redirect" semantics--the case where after every POST a REDIRECT-GET hits a stable "flow execution URL" which embeds the constant flow execution key.  See the NumberGuess sample for an illustration.

Introduction of a standalone "conversation" subsystem, which the provided flow execution repository implementations delegate to for demarcating logical conversations that manage flow execution state.  This conversation subsystem is fully decoupled from the rest of Spring Web
Flow, is usable outside of SWF, and may evolve into its own independent module over time. 
The central service interface consists of:

public interface ConversationService {
    public Conversation beginConversation(ConversationParameters parameters);
    public Conversation getConversation(ConversationId id);
    public ConversationId parseConversationId(String encodedId);
}


public interface Conversation {
    public ConversationId getId();
    public void lock();
    public void end();
    public Object getAttribute(String name);
    public void setAttribute(String name, Object value);
    public void removeAttribute(String name);
    public void unlock();
}
When a new flow execution is launched and needs to be persisted beyond one request the repository calls "beginConversation" to start a new logical
conversation and places attributes in conversation scope to track execution state.  Likewise, when a flow execution ends the governing conversation also ends and any allocated state is cleaned up.

In the future we expect to offer robust features within this system, including conversation monitoring and management via JMX as well as conversation history and statistics.  We also expect to prove its applicability to other environments outside of Spring Web Flow.  Special thanks to Juergen Hoeller and Ben Hale for their help in the design of this portable conversation service abstraction.


POTENTIAL USER AFFECTING CHANGES

With 1.0 RC2 there are a few potential user-affecting changes on the road to 1.0 final.  The following section notes them:

In spring-webflow-dtd, we renamed 'resultName' and 'resultScope' <action/> element attributes to 'result-name' and 'result-scope', respectively, for consistency with other attribute and element names.

The FormAction properties "bindOnSetupForm" and "validateOnBinding" were removed for simplicity.  Experience has shown these properties are rarely used  and have been a source of confusion for new users.  As a better alternative, to execute a data binding operation before entering a view state simply invoke the "bind" action method from your flow definition.  To calculate if validation should occur for a bindAndValidate attempt, override the single "validationEnabled(RequestContext)" hook.

The FormAction "exposeFormObject" action method was removed.  Simply use "setupForm" which is preferred.

The FlowExecutionRepository and FlowExecutor SPI interfaces were simplified.  More logic is now encapsulated behind a FlowExecutionRepository including the structure and format of generated FlowExecutionKeys.  In addition, the FlowExecutionRepository is now strictly responsible for managing persistent flow executions and nothing else.  The additional concept of a "conversation" is no longer known to the SWF core.  This means several things:

  • The overall repository interface is simpler, making it easier to create custom FlowExecutionRepositories with custom FlowExecutionKeys.
  • The SWF core lexicon is stronger: flow executors invoke flow executions to execute flows.  Executions that remain active beyond one request are persisted to a repository.
  • The default repository implementations choose to delegate to a distinct "conversation subsystem" for tracking conversational state driven by the execution system, but the dependency on this system is fully encapsulated and is optional.

The FlowExecutor interface, the entry point into SWF, was also simplified for callers.  It now encapsulates knowledge of complex internal types such
as EventIds and FlowExecutionKeys and thus is overall easier to use.

Along the same lines, support for the explicit "conversationRedirect" was removed.  This represents removal of the "conversationRedirect:"
'view' prefix and the "CONVERSATION" RedirectType.  To achieve the same logical redirect semantics with 1.0 RC2 simply configure a FlowExecutor with redirectOnPause type FLOW_EXECUTION and a repositoryFactory of
SingleKeyFlowExecutionRepositoryFactory.
--

Spring Web Flow 1.0 RC2 further refines the reference manual, providing 50 pages on SWF usage.  The manual is available on-line in HTML and PDF forms.

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 1.0 RC2 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, conversational scope, 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 (thanks to Steven Devijver)
6. NumberGuess - demonstrates stateful beans and "single key" flow
execution redirects.
7. Birthdate - demonstrates Struts integration
8. Fileupload - demonstrates multipart file upload
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 deployment in one step simply extract the release archive, access the projects/spring-webflow/build-spring-webflow directory and execute the "ant dist" target.  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.  At this time we expect the next release of SWF to be 1.0 final targeting the late June
timeframe.  There is still the possibility we will have another 1.0 release candidate if warranted.  Be sure to monitor the SWF homepage and
forums for updates.

Enjoy!

The Spring Web Flow Team

Spring IDE 1.3.1 Released

Releases | Torsten Juergeleit | June 08, 2006 | ...

Dear Spring Community,

We are pleased to announce that Spring IDE 1.3.1 has been released.

This release of Spring IDE provides a bunch of bugfixes. For a complete list visit http://springide.org/project/milestone/Release%201.3.1

Changes:

  • Now Web Tools is only required if you want to use the BeansXmlEditor
  • Fixed resource leak in image caching
  • Updated to Spring 1.2.8

More details are available from the project's site http://springide.org/

Use Eclipse's update manager to install this release from the project's update site http://springide.org/updatesite/

For bug reports tickets can be…

Getting Started With JPA in Spring 2.0

Engineering | Mark Fisher | May 30, 2006 | ...

The motivation behind this blog entry is to provide a simple step-by-step guide for getting started with JPA in a standalone environment with the Spring Framework. While the JPA specification originated as the persistence mechanism for EJB 3.0, it was fortunately recognized that any such mechanism should in fact be able to persist simple POJOs. Therefore, with a handful of JARs in your classpath and a few Spring-configured beans, you can begin experimenting with JPA code within your favorite IDE. I will be using Glassfish JPA - which is the reference implementation and is based upon Oracle's…

Acegi Security 1.0.0 is released

Releases | Ben Alex | May 30, 2006 | ...

After more than two and a half years of development, I am delighted to announce that Acegi Security 1.0.0 is now officially released.

Download | Documentation | Changelog 

In addition to more than 80 improvements and fixes since 1.0.0 RC2, this new release includes several changes to help new users. This entails a significant restructure and expansion of the reference guide (now at more than 90 pages) and a new "bare bones" tutorial sample application.

Furthermore, many of the frequently-identified problems experienced by new users have been addressed, such as:

  • custom 403 messages (as opposed to using the Servlet Container's error handler)
  • detecting corrupt property input following the reformatting of XML files
  • a new logout filter. 

We've also refactored our LDAP services, made the SecurityContextHolder a pluggable strategy (especially useful for rich clients who wish to avoid ThreadLocal), and improved CAS support.

Please visit here for a detailed changelog. As always, detailed upgrade instructions are included in the release ZIP file.

The project's web site at http://acegisecurity.org provides additional information on Acegi Security's features, access to online documentation, and links to download the latest release. I will also be providing a presentation on Acegi Security at SpringOne next month, so I hope to see you there.

Atlanta DevCon 2006

Engineering | Ben Hale | May 26, 2006 | ...

I just got finished with my Spring 2.0: New and Noteworthy talk at Atlanta DevCon 2006. Let me be the first to say that the conference was great. The site and organizers were all top notch. I'd like to give a special shout-out to Burr Sutter for putting on one heck of a conference. You know that things are going well when the conference center doesn't have a wireless network but you can get the one from the cafe next door. That's good karma! The JUG members were all very knowledgeable (even the ones that didn't know about Spring) and asked great questions. I fielded questions about EJB…

Spring Framework 1.2.8 Released

Releases | Juergen Hoeller | May 08, 2006 | ...

Dear Spring community,

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

This is a maintenance release, fixing a number of issues found in previous 1.2.x releases. Most of these fixes have been backported from 2.0 M4, so have already been available there. Please see the changelog for details.

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

Spring Web Flow 1.0 RC1 Released

Releases | Keith Donald | May 03, 2006 | ...

Spring Web Flow Logo

Dear Spring Community,

We are very pleased to announce that Spring Web Flow (SWF) 1.0 RC1 (Release Candidate 1) has been released.  Download it.

After over a year of hard development work, 29,000 downloads, 3,700 posts by 500 forum users, one book, and numerous community-driven articles, this release delivers the first 1.0 release candidate of Spring Web Flow.  Considered fit for production use, this release solidifies the 1.0 API which will remain backward compatible throughout the entire 1.x series.

To the Spring Web Flow early adopters and champions who have supported our product, thank you.  Spring Web Flow delivers one of the most innovative and powerful controller engines available today thanks to your feedback and support.

The Spring Web Flow team expects one more release candidate before 1.0 final.  The new and noteworthy in 1.0 RC1 include...

NEW AND NOTEWORTHY

Improved support for managing stateful business components.  Spring Web Flow now employs several techniques for managing instances of stateful middle-tier components that execute business logic as part of a task execution.  In most cases, state management is completely transparent.  You simply store your application state in instance variables and Spring Web Flow handles scoping that state within a conversation in a thread safe manner.

This support is illustrated by the simple NumberGuess sample application, where a "Game" component managed by the flow carries out the execution of game business logic.  The component itself has zero dependencies on Spring Web Flow APIs.

 To demonstrate, the business interface of the Game component could be defined as:

Game interface

The flow definition to carry out execution of a Game with a user could look like: 

 Game flow

Lastly, the binding between the logical game action identifier and a Game implementation is made by Spring within game-beans.xml.

 Game beans

The HigherLowerGame implementation is also completely decoupled from Spring and Spring Web Flow APIs. 

Enhanced support for flow variables, created automatically when a flow starts.  Flow variable values may even be sourced from a backing bean factory, benefiting from full dependeny injection there.  The exact scope of the variable is configurable.

A new flow execution redirect response type, for redirecting to a unique "flow execution URL".  Accessing a flow execution URL refreshes a  Flow at a previously entered ViewState, allowing continuation from there.  The URL remains valid while the conversation is active and the continuation point remains valid.  This allows for full use of back, next, refresh, and new window buttons without page caching.

Refinements in state exception handling, with convenient support for transition-executing state exception handlers.  The core transition element now supports a on-exception attribute that drives a transition to a new state on the occurrence of an exception.  For example:

Transition executing state exception handling 

... transitions the flow to the editAccount state if an AccountException is thrown by the placeOrder method.

Improvements in flow attribute mapping support.  Each flow may now be configured with an input-mapper to map input provided by callers that start the flow.  A flow may also be configured with an output-mapper to expose return values to callers who terminate the flow.  These enhancements allow a flow to be reused as a top-level flow and a subflow without change, as input and output attributes are mapped consistently for both cases.

Support for dynamic view name and target state expressions, allowing for convenient runtime-based calculation of ViewState's logical view name, and a transition's target state, respectively.

Enhanced JSF integration.  The JSF integration now supports the logical redirect response types including FlowExecutionRedirect, ConversationRedirect, FlowRedirect, and ExternalRedirect.  In addition, enhancements to the FlowPhaseListener allow for a flow execution to be launched and refreshed without having to go through a formal navigation step.  1.0 RC2 is expected to add further JSF convenience and official support with JSF in a Portlet environment.

ADDITIONAL RESOURCES and WHERE TO START

Spring Web Flow 1.0 RC1 further refines the reference manual, providing 50 focused pages on SWF usage.  The manual is available on-line in HTML and PDF forms.

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.  Nine (9) sample applications ship with the 1.0 RC1 release, each demonstrating a 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, conversational scope, and continuations.
3. Flowlauncher - demonstrates all the possible ways to launch and resume flows.
4. Itemlist - demonstrates REST-style URLs, conversational redirects to a refreshable conversation URL, and inline flows.
5. Shippingrate - demonstrates Spring Web Flow together with Ajax technology (thanks to Steven Devijver)
5. NumberGuess - demonstrates stateful beans
6. Birthdate - demonstrates Struts integration.
7. Fileupload - demonstrates multipart file upload.
8. Phonebook-Portlet - the phonebook sample in a Portlet environment (notice how the flow definitions do not change)
9. Sellitem-JSF - the sellitem sample in a JSF environment (notice how the flow definition does not change)

To build the sample applications for deployment in one step simply extract the release archive, access the projects/build-spring-webflow directory and execute the ant dist target.  See the release readme.txt and projects/spring-webflow-samples/readme.txt for more information on the release archive contents and samples, respectively.  All sample projects are now Spring IDE projects, directly importable into Eclipse.  Watch for the Spring IDE Graphical Web Flow editor coming soon from the Spring IDE team.

Thanks to everyone out there who has made Spring Web Flow what it is today—those using it, providing the feedback that makes it stronger.  Enjoy!

Sincerely,

The Spring Web Flow Team

Keith Donald
Erwin Vervaet
Colin Sampaleanu
Juergen Hoeller
Rob Harrop

Message Flow Tracing with AspectJ and JMX

Engineering | Ben Hale | April 25, 2006 | ...

In a project that I used to work on we had a system that would receive messages from a device and make decisions on whether that information would be passed to the user. There were multiple decision levels and one of the problems we always found ourselves asking was if a message was being lost on it's way through the system.

Before we moved to Spring, it was nearly impossible to tell the answer to that question. Attempts were made to use logging, but the sheer volume of messages that decisions were made on made it tedious at best. Other attempts were made using debuggers but a combination…

Spring IDE 1.3 Released

Releases | Torsten Juergeleit | April 25, 2006 | ...

Dear Spring Community,

We are pleased to announce that Spring IDE 1.3 has been released.

This release of Spring IDE provides some new features and a bunch of bugfixes. For a complete list visit http://springide.org/project/milestone/Release%201.3

Changes:

More details are available from the project's site http://springide.org/

Use Eclipse's update manager to install this this release from the project's update site http://springide.org/updatesite/

For bug reports tickets can be opened via http://springide.org/project/newticket

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