Spring Web Flow 1.0 A Next-Generation Web Application Controller

42
2007 JavaOne SM Conference | Session TS-6821 | TS-6821 Spring Web Flow 1.0 A Next-Generation Web Application Controller Framework Keith Donald Interface21 www.interface21.com

Transcript of Spring Web Flow 1.0 A Next-Generation Web Application Controller

Page 1: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 |

TS-6821

Spring Web Flow 1.0A Next-Generation Web Application Controller Framework

Keith Donald

Interface21www.interface21.com

Page 2: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 2

Topics in This Session

Web Flow Quick StartKey BenefitsWhat’s Next

Page 3: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 3

Topics in This Session

Web Flow Quick StartKey BenefitsWhat’s Next

Page 4: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 4

Web Flow Quick Start

Display Search ResultsDisplay Search Results

Enter Search CriteriaEnter Search Criteria

search

Browse ResultDetails

Browse ResultDetails

select

finish

How to implementyour typical searchmaster/detail flowend-to-end

newSearch

Page 5: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 5

The Contacts Sample Application

search

select

finish

newSearch

Page 6: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 6

Quick Start Assumptions

• The application logic to perform a contact search is already written

• The JavaServerFaces (JSF™) views are already written

• New web application project shell created

Page 7: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 7

Quick Start Steps

• Bootstrap the Contacts Application• Configure the Web Flow Engine• Implement the Search Flow

Page 8: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 8

Quick Start Steps

• Bootstrap the Contacts Application• Configure the Web Flow Engine• Implement the Search Flow

Page 9: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 9

Bootstrap the Contacts Application

• Inside <webapp/> within web.xml<context-param>

<param-name>contextConfigLocation</param-name><param-value>

/WEB-INF/contacts-webapp-config.xml</param-value>

</context-param>

<listener><listener-class>

org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

Where application configuration resides

Page 10: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 10

Inside webapp-config.xml<bean id=“searchService” class=“phonebook.impl.JdbcSearchService”>

<constructor-arg ref=“dataSource”/></bean>

<bean id=“dataSource” class=“phonebook.TestDataSourceFactory”/>

<bean id=“transactionManager” class=“org.springframework.jdbc.datasource.DataSourceTransactionManager”>

<property name=“dataSource” ref=“dataSource”/></bean>

<tx:annotation-driven transactionManager=“transactionManger/>

public class JdbcSearchService implements SearchService {…@Transactionalpublic List<Contact> searchDirectory(SearchCriteria c) {

}

Page 11: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 11

Web Application Context Initialization

Spring Application ContextApplication Beans

DriverManagerDataSource

dataSource

DataSourceTransactionManager

transactionManager

searchService

SearchServiceImpl

Page 12: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 12

After Web Application Initialization

Application Context

Java Platform, Enterprise Edition (Java EE) Web Application

Servlet Context

Page 13: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 13

If You Invoked a Search…

SearchServiceImplsearchDirectory(…) Spring

TransactionInterceptor

TransactionManager

begin commit

Transaction management behavior is added around your code

You can change transaction managers without affecting your application code

Spring Dynamic ProxysearchService

Page 14: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 14

Quick Start Steps

• Bootstrap the Contacts Application• Configure the Web Flow Engine• Implement the Search Flow

Page 15: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 15

Inside contacts-webflow-config.xml

<flow:executor id=“flowExecutor” registry-ref=“flowDefinitionRegistry”/>

<flow:registry id=“flowDefinitionRegistry”><flow:location path=“/WEB-INF/flows/*-flow.xml”/>

</flow:registry>

Executes flows in registry on behalf of clients

Contains flow definitions eligible for execution

Page 16: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 16

Inside faces-config.xml<faces-config>

<application><navigation-handler>

org.springframework.webflow.executor.jsf.FlowNavigationHandler</navigation-handler><variable-resolver>

org.springframework.webflow.executor.jsf.DelegatingFlowVariableResolver</variable-resolver>

</application><lifecycle>

<phase-listener>org.springframework.webflow.executor.jsf.FlowPhaseListener

</phase-listener></lifecycle>

</faces-config>Manages flow lifecycle

Resolves flow variables

Drives flow navigation

Page 17: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 17

Check Point

• Bootstrap the Contacts Application ➼• Configure the Web Flow Engine ➼• Implement the Search Flow

Page 18: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 18

Testing Invoking flows.htm Directly

FacesServlet PhaseListener

beforePhase(RESTORE_VIEW)

GET /flows.htm

Exception:Must provide the_flowId or_flowExecutionKeyparameter

Exception:Must provide the_flowId or_flowExecutionKeyparameter

Page 19: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 19

Important Flow Executor Arguments

• flowId• Needed to launch a new flow execution

• flowExecutionKey• Needed to resume an existing flow

execution• Tracked for you by JSF™

Page 20: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 20

flows.htm?_flowId=search-flowFacesServlet PhaseListener

beforePhase(RESTORE_VIEW)

GET /flows.htm?_flowId=search-

flow

FlowExecutorFlowExecutor

launch(String, ExternalContext)

FlowDefinitionRegistry

FlowDefinitionRegistry

getFlowDefinition(String)

Exception:The definition of ‘search-flow’does not exist

Exception:The definition of ‘search-flow’does not exist

Page 21: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 21

Quick Start Steps

• Bootstrap the Contacts Application• Configure the Web Flow Engine• Implement the Search Flow

Page 22: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 22

Recall—Contact Search Flow

Display Search ResultsDisplay Search Results

Enter Search CriteriaEnter Search Criteria

search

Browse ResultDetails

Browse ResultDetails

select

finish

newSearch

States

Transitions

Page 23: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 23

XML Flow Definition Template<?xml version=“1.0” encoding=“UTF-8”?><flow xmlns=http://www.springframework.org/webflow

xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance”xsi:schemaLocation=“

http://www.springframework.org/schema/webflowhttp://www.springframework.org/schema/webflow/spring-webflow-

1.0.xsd”>

<!-- Implement your flow here -->

</flow>

Page 24: Spring Web Flow 1.0 A Next-Generation Web Application Controller

242007 JavaOneSM Conference | Session XXXX |

DEMOImplementing the Search Flow

Page 25: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 25

Putting It All Together—Graphical

Display Search ResultsDisplay Search Results

Enter Search CriteriaEnter Search Criteria

search

Browse ResultDetails

Browse ResultDetails

select

finish

newSearch

States

Transitions

Page 26: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 26

Putting It All Together—Search Flow

<flow …><start-state idref=“enterSearchCriteria”/>

<view-state id=“enterSearchCriteria” view=“searchCriteriaForm”><transition on=“search” to=“displaySearchResults”/>

</view-state>

<view-state id=“displaySearchResults” view=“searchResults”><render-actions>

<bean-action bean=“searchService” method=“search”><method-arguments>

<argument expression=“flowScope.searchCriteria”/></method-arguments><method-result name=“results”/>

</bean-action></render-actions><transition on=“select” to=“browseDetails”/>

</view-state>…

Page 27: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 27

Putting It All Together—Search Flow (2)

…<subflow-state id=“browseDetails” flow=“details-flow”>

<attribute-mapper><input-mapper>

<mapping source=“requestParameters.id” target=“id” from=“string” to=“long”/></input-mapper>

</attribute-mapper><transition on=“finish” to=“displayResults”/>

</subflow-state>

</flow>

Page 28: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 28

Completed Contacts Application

search

select

finish

newSearch

Page 29: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 29

Topics in This Session

Web Flow Quick StartKey BenefitsWhat’s Next

Page 30: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 30

Key Benefits

• Enforcement of navigation rules• Automatic state management• Modularity• Abstraction• Dynamicity• Web best practices• +1 with strong integration• Tooling

Page 31: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 31

Enforcement of Navigation Rules

• With Web Flow, it is simply not possible to short-circuit navigation rules• Go ahead and try it :-)

• You get enforcement of navigation rules for free• And you never have to worry about the flow

resuming back in the right state

Page 32: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 32

Automatic State Management

• You simply allocate local “flow scope” variables and the flow manages them for you

• When a flow ends or expires, everything in flow scope is cleaned up automatically

Page 33: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 33

Modularity

• Flows are modules that encapsulate and centralize the rules to carry out a dialog with the user

• The sub-flow concept allows flows to be partitioned into manageable chunks describing high-level application functionality• You can change one flow without effecting another

Page 34: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 34

Abstraction

• Web Flow definitions are high-level, self-contained application modules• They are not coupled with a particular environment

like HTTP• The same flow can be run inside a Spring

MVC app, a Struts App, a JavaServer™ Faces application, a Portlet, or a JUnit test without change

Page 35: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 35

Dynamicity

• Flows are externalized modules that can be recompiled on-the-fly

• Recompilation allows you to implement and test your navigation rules without container restart

Page 36: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 36

Web Best Practices

• Back button just works• Post + Redirect + Get pattern implemented

out-of-the-box

Page 37: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 37

+1 With Strong Integration

• Very easy to introduce into a project• Self-contained library with few extra dependencies

(only need ognl.jar and spring-binding.jar extra)• Strong documentation• Wide-array of samples and other resources• Minimal setup to get going

• Compliments existing controller technologies• Fills a gap by solving the problem of linear wizards

very well• Struts, Spring MVC, JavaServer Faces platform,

and JUnit are all supported environments

Page 38: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 38

Tooling

• Spring IDE 2.0 provides• A web flow graphical editor/visualizer• A web flow XML editor

• Visualizing flows improves developer and end-user communication

• Makes the tool accessible to new audiences

Page 39: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 39

What’s Next

• Web Flow 1.0 set a strong foundation• Spring Web Flow will keep evolving with 1.1

Page 40: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 | 40

On the Road to Web Flow 1.1…

• Flow Inheritance and Composition• The ability to compose flows together to form a

graph/hierarchy• Conversation-scoped persistence contexts

• Automatic management of persistence state• Enhanced Java-based flows

• Engineering flows from @Annotation metadata• More third-party integration

• Securing flows (Spring Security/Acegi)• Ajax integration with ICEFaces and Ajax4JSF

Page 41: Spring Web Flow 1.0 A Next-Generation Web Application Controller

412007 JavaOneSM Conference | Session TS-6821 |

Q&AThank You

Page 42: Spring Web Flow 1.0 A Next-Generation Web Application Controller

2007 JavaOneSM Conference | Session TS-6821 |

TS-6821

Spring Web Flow 1.0A Next-Generation Web Application Controller Framework

Keith Donald

Interface21www.interface21.com