Keith Donald

Alumni
Recent Blog posts by Keith Donald

Spring Web Flow 2.0.7 Released

Releases | April 20, 2009 | ...

Dear Spring Community,


We are pleased to announce that Spring Web Flow 2.0.7 has been released. Download | Maven | Documentation | Changelog

This is a bugfix and minor improvement release addressing all known issues reported against previous 2.0.x releases; see the Changelog for all the details. We recommend upgrading to 2.0.7 from previous 2.0.x versions. Enjoy! Keith Donald Web Flow Project Lead

Spring Web Flow Project Update

Engineering | 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 ebookers.com and nwa.com. If you have been following the 2009 NBA playoffs, you may also find it interesting Web Flow is an important component of nba.com 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 ViewState.java.

  • 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!

Developing Rich Web Applications with Spring

Engineering | July 17, 2008 | ...

I am pleased to announce that Developing Rich Web Applications with Spring, a three-day bootcamp lead by SpringSource engineers on web application development, is now available.  This intense, hands-on workshop teaches how to apply the latest versions of Spring Web MVC, Spring Web Flow, Spring JavaScript, and Spring Faces to create rich web applications.  It compliments our flagship "Core Spring" course by focusing squarely on using Spring to solve problems facing Java web application developers.

Key things you will learn in the bootcamp include:
  • How to design and implement REST architectures with Spring Web MVC 2.5
  • How to progressively enhance HTML pages and forms with Ajax behaviors using Spring JavaScript with the Dojo Toolkit
  • How to design and implement linear progressions that carry out application transactions with Spring Web Flow 2
  • How to implement web authentication and authorization models with Spring Security 2
  • How to optimize object persistence and concurrency in a high-volume web application environment
  • How to integrate JavaServerFaces component libraries into your application with Spring Faces
  • User interface best practices in the areas of style, layout, and accessibility
  • Testing strategies for all layers of a web application
  • Techniques for optimizing web application performance
Like all SpringSource workshops, "Developing Rich Web Applications with Spring" focuses on being hands-on and holistic.  We designed this bootcamp for teams building web applications to equip them with everything they need to hit the ground running with the latest and best version of Spring.  It is a great next course for those who have taken Core Spring, and is generally suitable for enterprise Java developers and architects seeking in-depth, comprehensive coverage of Spring for web application development.
    For more information and to register for an upcoming workshop, visit SpringSource.com.  I am very excited to be leading the first public bootcamp in Washington D.C on August 5th through 7th--I hope to see you there!

Spring Web Flow 2 Released; Introduces New Faces and JavaScript Modules

Releases | May 15, 2008 | ...

Dear Spring Community,

We are pleased to announce general availability of Spring Web Flow 2. Download | Documentation

Spring Web Flow is the project in the Spring Portfolio that focuses on providing the infrastructure for building and running rich web applications. As a Spring project, Web Flow builds on the Spring Web MVC framework to provide:

  • A domain-specific-language for defining reusable controller modules called flows
  • An advanced controller engine for managing conversational state
  • First-class support for using Ajax to construct rich user interfaces
  • First-class support for using JavaServerFaces with Spring

The modules of the Web Flow 2 distribution and their relationship with the Spring Framework are illustrated below:

What's in Web Flow 2

Web Flow 2 Distribution Components

 

Spring Web MVC

The Spring Web MVC framework, a module of the Spring Framework distribution, provides the foundation for developing web applications with Spring using the proven ModelViewController paradigm. Each of the modules of the Web Flow distribution builds on this foundation.

Spring Web Flow

The Web Flow module is a MVC extension that allows you to define Controllers using a domain-specific-language. This language is designed to model user interactions that require several requests into the server to complete, or may be invoked from different contexts.

Spring JavaScript

Spring JavaScript is a JavaScript abstraction framework that makes it easy to write unobtrusive JavaScript to progressively enhance a web page with behavior. The framework consists of a public JavaScript API along with an implementation that builds on the Dojo Toolkit. Spring.js aims to simplify the use of Dojo for common enterprise scenarios while retaining its full-power for advanced use cases.

Spring JavaScript can work with any server-side framework. The Web Flow 2 distribution includes convenient integration between Spring JavaScript and Spring Web MVC for processing Ajax requests.

Spring Faces

The Spring Faces module contains Spring's support for JavaServerFaces. This support allows you to use JSF as a View technology within a familiar Spring MVC and Web Flow Controller environment. With this architectural approach, you combine the benefits of the JSF UI component model with the benefits of a Web MVC architecture. Spring Faces also includes a lightweight component library built on Spring JavaScript for declaratively enabling Ajax and client-side validation behaviors in a progressive manner.

Themes of the Web Flow 2 Release

In addition to introducing the new Spring Faces and Spring Javascript modules, the Web Flow 2 release effort addresses two major themes: Integration and Simplicity.

Integration

Across each of the modules, the Web Flow 2 distribution adds a number of interesting integrations that allow you to enrich your web applications. These integrations support:

  • Using Spring Security to secure your flows in a declarative manner
  • Using Tiles for JSP page composition and Ajax partial-rendering
  • When using JSF, using Facelets for page composition and layout
  • When using JSF, using Apache Trindad and JBoss RichFaces component libraries
  • Using the Dojo widget system in a progressive and unobtrusive manner; a manner that degrades gracefully if JavaScript is not available on the client

Simplicity

The flow definition language has been simplified tremendously in Web Flow 2 while becoming more powerful overall. These simplifications include:

  • An appoximate 50% overall reduction in lines-of-code when comparing a version 2 flow definition with its version 1 equivalent (example: version 2 vs version 1)
  • A concise syntax for invoking actions using an Expression Language (EL), with support for both the Unified EL and OGNL
  • Declarative model binding and validation, with support for convention-over-configuration
  • Support for reuse at both the flow and state levels using flow definition inheritance
  • Enhanced modularity, allowing a flow and its dependent resources to be packaged together in a self-contained bundle

Release Notes

  • Web Flow 2 requires Java 1.4 or greater and runs on all major Java EE platforms including Tomcat, Jetty, Websphere, WebLogic, and JBoss.
  • Web Flow 2 requires Spring Framework 2.5.4 or greater.
  • Web Flow 2 has been certified by SpringSource as "Platform Ready" and is fit to run on the SpringSource dm Server in OSGi-enabled web applications.

Getting Started

  • To get started using a build system such as Maven or Ant+Ivy, access Web Flow artifacts from the Maven Central Repository.

Additional Community Resources

  • Watch the Ajaxian.com interview where the release and Spring JavaScript are discussed with Dion Almaer.
  • Explore Spring Web reference applications on-line. The Spring Travel application showcases the integrated Web Flow 2 feature set and is included in the distribution. The SpringSource Enterprise Bundle Repository is a real-world application in production built on Spring 2.5 and Spring Web Flow 2.0.
  • If you are an existing Web Flow 1 user, review the migration guide to help in upgrading to Web Flow 2. The WebFlowUpgrader tool automates the conversion of your flows to the version 2 syntax
  • Track updates to the Web Flow source repository with Fisheye
  • Watch for upcoming articles on Web Flow 2 by subscribing to springframework.org

Spring Web Flow 2.0.0.RC1 Released

Releases | April 14, 2008 | ...

Dear Spring Community,

We are pleased to announce that Spring Web Flow 2.0.0.RC1 is now available. Download | Documentation

2.0.0.RC1 introduces several new features, and fixes all known issues reported against previous milestones.

We recommend upgrading to 2.0.0.RC1 from previous Web Flow 2 milestones. We also recommend Web Flow 1 users begin evaluating their upgrade to Web Flow 2 at this time, as RC1 introduces comprehensive version 2 documentation, as well as a tool for automating the conversion of version 1 flows to the version 2 syntax.

The best way to get started with Web Flow 2 is to evaluate the reference applications included in the distribution and supplement with the reference guide.  Spring Web Flow 2 requires Spring Framework 2.5.3 and Java 1.4 or above. 

Find the new and noteworthy in the 2.0.0 RC1 release below:

2.0.0.RC1 New and Noteworthy

  • Introduced the Web Flow 2 reference guide, available in PDF and HTML format. The new guide is written in "quick reference" style with runnable code examples. Read it on-line, or download the printable PDF.
  • Added support for upgrading from Web Flow 1 to 2. Included in this distribution is a WebFlowUpgrader tool capable of converting flows from the version 1 syntax to the version 2 syntax. See the reference guide for instructions on how to use this tool
  • Added support for flow definition inheritance. With this feature, A flow may extend one or more flows. A flow state can also extend another state. This feature is used to facilitate reuse between flows and states that share a common structure.
  • Introduced Spring Portlet MVC support. See the Portlet section of the reference guide and the booking-mvc-portlet and booking-faces-portlet sample applications for examples.
  • Formally introduced the new "Spring Javascript" module, included within spring-js-2.0.0.RC1.jar. This module provides a Javascript abstraction framework for applying client-side behaviors such as form validation and Ajax in a consistent manner. It also bundles a ResourceServlet for serving Javascript and CSS from jars (a CSS framework is included as well). The default UI toolkit this framework builds upon is Dojo 1. Spring's JSF integration module called "Spring Faces" builds on spring-js to provide a lightweight JSF component library for form validation and Ajax.
  • Added Spring Faces integration with the RichFaces JSF component library. Rich Faces can be used with the Spring Faces component library or used standalone. A sample application illustrating this integration is available in our JIRA system.
  • Added a "jsf-booking" reference application that offers a comparsion between a traditional JSF web application and a Spring web application that uses JSF as the UI component model. Compare jsf-booking with booking-faces to see the differences in the architectural approach and implementation. This comparison is particularly relevant to JSF developers interested in learning more about Spring.
  • Introduced support for automatic model binding and validation with Spring MVC. This support provides a concise alternative to manual FormAction setupForm and bindAndValidate calls. This support also allows registration of data input Formatters application wide, reducing the need to manually register PropertyEditors on a view-by-view basis in many cases. Support for suppressing data binding for a event such as a cancel button click is provided. Support for invoking validators by convention is provided. See the booking-mvc sample for an example.
  • Introduced view scope. View scope is allocated when a view-state enters and destroyed when a view-state exits. The scope is useful for updating a model specific to one view over a series of Ajax requests. It is also the scope used to manage JSF component state.
  • Added support for flow message bundles. Create a messages.properties file in your flow's working directory for the Locales you need to support and off you go.
  • Introduced configurable view-state history polices. A view state can preserve its history to support backtracking, discard its history to prevent backtracking, and invalidate all previous history to disallow backtracking after a point of no return. See the new 'history' attribute on the view-state element.
  • Refined the flow execution snapshotting process. These refinements capture view-state form values on postback to support restoring those values when backtracking. This preserves edits when going back using the browser back button for data stored in flow scope.
  • Simplified flow execution testing by allowing you to jump to any state to begin a test case. See the booking-mvc and booking-faces for examples of flow test cases.
  • Improved booking-mvc as a reference application showing @Controllers together with Flows. A new FlowHandler concept provides a clean bridge between Controllers and Flows, allowing the two types of handlers to interact in a structured manner. Also improved the organization of the reference application Spring configuration to illustrate best practice.
2.0.0 Final is right around the corner! Enjoy!

Spring For JavaServerFaces - TSSJS Slides and Demos

Engineering | March 27, 2008 | ...

Today I am delivering a presentation entitled Spring for Java Server Faces at TSSJS in Las Vegas. The presentation looks at how JSF and Spring fit together, and walks the audience through approaches to integrating these two technologies.

The slides are available for your viewing pleasure, and for you to use as you see fit.

In the presentation, I outline two approaches to integrating JSF and Spring. The first approach is what I call "JSF-centric", which is the integration approach most folks with a traditional JSF background employ today. The second approach is what I call "Spring-centric…

Spring Web Flow 2.0 M4 Released

Releases | March 11, 2008 | ...

Dear Spring Community,

We are pleased to announce that Spring Web Flow 2.0 M4 is now available.  Download | Documentation

This release firms up the Web Flow 2 architectural model, including how SWF 2 integrates with Spring MVC, JavaServerFaces, and Ajax.  It also introduces many new features and improvements, including:

2.0 M4 New and Noteworthy

  • The introduction of a simplified XML flow definition syntax.   See the Spring Travel reference application for an example of the new syntax.
    • Use of the version 2 syntax reduces the size of a version 1 flow definition by up to 50%.  As an example, Spring Travel 1.0.5 consists of ~200 lines of flow-application code across six artifacts.  The latest 2.0 M4 version consists of 93 lines of code across two artifacts, a 50% reduction with four less files to maintain. 
    • Savings are achieved primarily by stronger Expression Language (EL) integration and simpler tags for action execution and data mapping.
  • Spring Security integration.  Full support for securing flows, states, and transitions is provided.
    A new "currentUser" EL variable makes it easy to reference the authenticated Principal from a flow definition or view template.
  • Flexible support for flow exception handling inside Spring MVC, including default support for automatically restarting ended or expired flows.
  • Support for handling Ajax events that do not change the current page.  A new "render" element allows you to selectively re-render fragments of a page after handling an Ajax event.
  • View variables.  A view variable allocates when its containing view-state enters and goes out of scope when the state exits.  These variables provide a page context and are particularly useful for updating a model over a series of Ajax requests from the same page.
  • @Autowired flow variables.  Flow variables may now have their dependencies @Autowired by Spring, enabling them to hold references to Spring-managed @Services.   References to services are automatically re-wired for you between requests after variable deserialization.
  • Support for popups.  Mark a view-state with popup=true and it will render in a modal popup dialog when Javascript is enabled on the client.
  • The factoring out of a Javascript abstraction layer called "Spring Javascript" from Web Flow's JSF support.  Currently, Dojo and Ext based implementations of this layer are provided.  Spring.js provides:
    • A common interface for Ajax, regardless of which toolkit is being used under the covers
    • An aspect-oriented-like API for decorating HTML DOM nodes with behaviors, including client-side validation behaviors.
  • A small JSF component library that uses Spring.js underneath to progressively enhance Spring web applications using JSF.  This library degrades if Javascript is not available on the client.  See the Spring Travel example for an illustration: turn Javascript off and compare the application to when Javascript is turned on.
  • Support for rendering JSF views in a standard Spring MVC environment.  This enables Facelets templates to be rendered by plain Spring MVC Controllers as well as Flows.

Please see the Spring Travel reference applications included in the release for practical demonstrations of all these features.  The reference projects are directly importable into Eclipse as Dynamic Web Projects.

1.x Compatibility

A special note to existing Web Flow users: The upcoming 2.0 RC1 will provide support for version 1 flows in a version 2 environment.  This will allow 1.0.x flows to run unchanged along side version 2 flows in the same application.

For more information, see the full Web Flow 2 ChangeLog and RoadMap.  We also encourage you to visit our support forums and JIRA system to provide your feedback on M4 to the development team.

Enjoy!  2.0 final is right around the corner.

Keith Donald
Web Flow Technical Lead
SpringSource

Spring Web Flow 2.0 M4 - Feedback Requested

Engineering | March 11, 2008 | ...

The Web Flow team has been working hard on Web Flow 2. We just reached our 4th milestone and will enter release candidate status as early as next week. The 2.0 final release is scheduled for the end of the month.

Between now and 2.0 final, we'd like your feedback! If you are an application developer currently using Web Flow 1.x, or evaluating Web Flow for use in your project, please give 2.0 M4 an evaluation and let us know what you think. If you are a web framework provider integrating the Web Flow engine into your framework, we encourage you to evaluate the refined hooks in 2.0 M4 and…

The Spring Web Flow 2.0 Vision

Engineering | November 15, 2007 | ...

Spring Web Flow 2.0 M2 has just released. I am particularly excited about this release because it sets the foundation we need to realize the bold vision we have for our community for the future. In this entry, I'll explain what that vision is, and exactly what this foundation will enable. I'll also go into detail about the architecture of Web Flow 2.0, and compare it to the 1.0 version.

The Spring Web Flow 2.0 Vision

The goal of 2.0 is to evolve Spring Web Flow as a controlled navigation engine to offer significantly improved support for JavaServerFaces, flow managed persistence, and asynchronous event handling (Ajax) natively. The new Spring Faces project will build on Web Flow 2.0 to provide first-class support for JSF views in a Spring environment. In addition, Web Flow will continue to provide first-class support for Spring MVC-based views, allowing native JSF and MVC views to be used to full-power, even in the same application if desired.

* UPDATE: The vision above was updated on 1/11/08 after considering large amounts of feedback from the Spring community since The Spring Experience 2007. Based on that feedback, Spring Web Flow 2.…

Spring Web Flow 1.0.5 Released

Releases | October 04, 2007 | ...

Dear Spring Community,

We are pleased to announce that Spring Web Flow 1.0.5 has been released.  This is a bugfix and minor improvement release addressing all issues reported against 1.0.4.  We recommend users upgrade to 1.0.5 from previous 1.0.x versions.

 

Spring Web Flow is a next generation Java web application controller framework.  The framework provides a powerful system for implementing navigation logic and managing application state consistently across a variety of environments.

Related Web Flow News 

Work on Spring Web Flow 2.0 continues, with the next 2.0 release milestone (M2) due out October 30th. 

Interface21 has an full-time position open in Melbourne, Florida on their Web Application Development Products Team, the team responsible for sustaining the development of Spring MVC, Spring Web Flow, and emerging Spring Web technologies.  Experienced web application developers able to work in Melbourne, FL are encouraged to apply.

Working with Spring Web Flow, the definitive guide to Spring Web Flow 1.0, has been published by Erwin Vervaet, founder and co-lead of the project. 

 

Get ahead

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

Learn more

Get support

Tanzu Spring 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