Spring Web Flow 1.0 RC2 发布

发布 | Keith Donald | 2006 年 6 月 10 日 | ...


 

尊敬的 Spring 社区:

我们很高兴地宣布 Spring Web Flow (SWF) 1.0 RC2(发布候选版 2)已发布。  Spring Web Flow (SWF) 1.0 RC2(发布候选版 2)已发布。  下载 | 文档 | 更新日志

此版本包含错误修复和轻微改进。   1.0 RC2 的新特性包括...

新特性

支持以可配置的方式传递从调用环境输入给新启动的流程执行(flow executions)。  默认情况下,所有请求参数都作为输入公开。  然后,流程可以使用其输入映射器(input mapper)将此输入映射到其自己的本地作用域(local scope)中。  该映射器定义了流程的输入契约,无论流程是作为顶级流程还是作为子流程启动,该契约都是一致的。

请参考以下请求 URL 作为示例:

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

默认情况下,当访问此 URL 时,后端的 FlowExecutor 会将 "flightNumber" 请求参数放入一个“输入映射”(input map)中。  然后,该输入映射会传递给 "search-flow" 的一个新的执行。

在 search-flow 定义中:

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

    ...
</flow>
上面的 <input-mapper> 定义了流程的输入契约,声明此流程支持名为 "flightNumber" 的输入属性。  当在启动时提供 flightNumber 时,它将被映射到 "flowScope" 中,名称为 "flightNumber"。  该映射器还能够在映射操作期间执行类型转换。

要自定义流程执行输入映射的填充方式,例如从请求路径或其他外部源中提取属性,请配置 "FlowExecutorImpl.inputMapper" 属性。

支持在 JSR168 Portlet 环境中进行流程执行和外部重定向。  结合基于延续的仓库(continuation-based repository),这允许在 Portlet 环境中使用浏览器导航按钮(后退、刷新)。  此外,在 Portlet 环境中,我们现在公开了一个 "globalSessionMap" 属性,用于访问 Portlet Session APPLICATION_SCOPE 中的属性。

一个新的仓库工厂,名为 "SingleKeyFlowExecutionRepositoryFactory"。 此实现为每个持久化的流程执行生成一个唯一的标识符。  它有助于实现 1.0 EA 的“会话重定向”(conversation redirect)语义——即每次 POST 后,通过 REDIRECT-GET 请求一个嵌入了常量流程执行键的稳定的“流程执行 URL”。  请参阅 NumberGuess 示例以获取说明。

引入了一个独立的“会话”(conversation)子系统,提供的流程执行仓库实现会将逻辑会话的划分委托给它,以管理流程执行状态。  该会话子系统与 Spring Web
Flow 的其余部分完全解耦,可在 SWF 之外使用,并且随着时间的推移可能会演变为其自己的独立模块。 
中央服务接口包括:

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();
}
当启动一个新的流程执行并且需要在单个请求之外持久化时,仓库会调用 "beginConversation" 来启动一个新的逻辑
会话(conversation),并在会话作用域(conversation scope)中放置属性来跟踪执行状态。  同样,当流程执行结束时,对应的会话也会结束,并且清理所有分配的状态。

未来,我们期望在这个系统中提供强大的功能,包括通过 JMX 进行会话监控和管理,以及会话历史记录和统计信息。  我们也期望证明它适用于 Spring Web Flow 之外的其他环境。  特别感谢 Juergen Hoeller 和 Ben Hale 在设计此可移植会话服务抽象方面提供的帮助。


可能影响用户的更改

在迈向 1.0 正式版的过程中,1.0 RC2 中有一些可能影响用户的更改。  以下部分对此进行了说明:

在 spring-webflow-dtd 中,为了与其他属性和元素名称保持一致,我们将 '<action/>' 元素的属性 'resultName' 和 'resultScope' 分别重命名为 'result-name' 和 'result-scope'

为简化起见,移除了 FormAction 的属性 "bindOnSetupForm" 和 "validateOnBinding"。  经验表明这些属性很少使用,并且是新用户的困惑来源。  作为更好的替代方案,要在进入视图状态(view state)之前执行数据绑定操作,只需从您的流程定义中调用 "bind" 操作方法即可。  要计算是否应在 bindAndValidate 尝试中进行验证,请覆盖单个 "validationEnabled(RequestContext)" 钩子。

FormAction 的 "exposeFormObject" 操作方法已被移除。  只需使用首选的 "setupForm" 即可。

FlowExecutionRepository 和 FlowExecutor SPI 接口已简化。  现在,更多的逻辑封装在 FlowExecutionRepository 后面,包括生成的 FlowExecutionKeys 的结构和格式。  此外,FlowExecutionRepository 现在只严格负责管理持久化的流程执行(persistent flow executions),别无其他。  “会话”(conversation)的附加概念不再为 SWF 核心所知。  这意味着几点:

  • 整体仓库接口更简单,使得创建具有自定义 FlowExecutionKeys 的自定义 FlowExecutionRepositories 更加容易。
  • SWF 核心词汇更清晰:流程执行器(flow executors)调用流程执行(flow executions)来执行流程(flows)。  在一个请求之外保持活动的执行会被持久化到仓库中。
  • 默认的仓库实现选择委托给一个独立的“会话子系统”(conversation subsystem)来跟踪由执行系统驱动的会话状态,但对该系统的依赖是完全封装且可选的。

FlowExecutor 接口,作为 SWF 的入口点,对调用者来说也得到了简化。  它现在封装了对复杂内部类型的了解,例如
EventIds 和 FlowExecutionKeys,因此总体上更容易使用。

同样地,移除了对显式 "conversationRedirect" 的支持。  这意味着移除了 "conversationRedirect:"
'view' 前缀和 "CONVERSATION" RedirectType。  要在 1.0 RC2 中实现相同的逻辑重定向语义,只需配置一个 FlowExecutor,将其 redirectOnPause 类型设置为 FLOW_EXECUTION,并将 repositoryFactory 设置为
SingleKeyFlowExecutionRepositoryFactory。
--

Spring Web Flow 1.0 RC2 进一步完善了参考手册,提供了 50 页关于 SWF 使用的内容。  手册提供 HTML 和 PDF 两种在线格式。

开始使用 Spring Web Flow 的最佳方法之一是查看和演练示例应用程序。  我们建议从一开始就查看所有示例,并根据需要补充参考手册材料。1.0 RC2 版本附带了十个示例应用程序,每个都展示了一组不同的产品功能。  这些示例包括:

1. Phonebook - 最初的示例,展示了大部分功能(包括子流程)
2. Sellitem - 展示了一个具有条件转换、流程执行重定向、会话作用域和延续的向导(wizard)
3. Flowlauncher - 展示了启动和恢复流程的所有可能方式
4. Itemlist - 展示了 REST 风格的 URL 和内联流程(inline flows)
5. Shippingrate - 展示了 Spring Web Flow 与 Ajax 技术结合使用
(感谢 Steven Devijver)
6. NumberGuess - 展示了有状态 bean 和“单键”流程
执行重定向。
7. Birthdate - 展示了与 Struts 的集成
8. Fileupload - 展示了多部分文件上传
9. Phonebook-Portlet - 在 Portlet 环境中的 phonebook 示例
(注意流程定义并未改变)
10. Sellitem-JSF - 在 JSF 环境中的 sellitem 示例

要一步构建示例应用程序进行部署,只需解压发布归档文件,进入 projects/spring-webflow/build-spring-webflow 目录并执行 "ant dist" 目标即可。  有关发布归档内容和示例的更多信息,请分别参阅 release readme.txt 和
projects/spring-webflow/spring-webflow-samples/readme.txt。
所有示例项目都是 Spring IDE 项目,可以直接导入 Eclipse。

感谢所有支持此版本的社区成员。  目前,我们预计 SWF 的下一个版本将是 1.0 正式版,目标发布时间在六月下旬
左右。  如果有必要,我们仍有可能发布另一个 1.0 发布候选版。  请务必关注 SWF 主页和
论坛以获取更新。

尽情使用吧!

Spring Web Flow 团队

获取 Spring 新闻通讯

订阅 Spring 新闻通讯以保持联系

订阅

领先一步

VMware 提供培训和认证,助您加速前进。

了解更多

获取支持

Tanzu Spring 在一份简单的订阅中提供对 OpenJDK™、Spring 和 Apache Tomcat® 的支持及二进制文件。

了解更多

即将举行的活动

查看 Spring 社区中所有即将举行的活动。

查看全部