WEB开发网
开发学院软件开发Java Spring Web Flow 2 中流管理的持久化 阅读

Spring Web Flow 2 中流管理的持久化

 2010-05-18 00:00:00 来源:WEB开发网   
核心提示: 所有这些因素都表明每一次进程运行后长期进程的状态都需要持久保存到后端数据库,将此长期运行进程的人类活动实现为 Web 流成为一个明智的技术解决方案,Spring Web Flow 2 中流管理的持久化(10),流将在不同的 Web 会话中重复执行以模仿长期进程的生命周期,除了上述场景,事务作用域

所有这些因素都表明每一次进程运行后长期进程的状态都需要持久保存到后端数据库。将此长期运行进程的人类活动实现为 Web 流成为一个明智的技术解决方案。流将在不同的 Web 会话中重复执行以模仿长期进程的生命周期。

除了上述场景,还有一些应用程序由非上下文 Web 页组成,用户可以在这些 Web 页之间任意导航。这些 Web 页可以根据其业务功能被分组成流,即使没有逻辑顺序流也没有开始或结束状态。每个用户请求期间所做的数据变更都要被保存。这些应用程序中的持久化编程与上述长期运行的进程没有什么不同,事务原子性的作用域都划定到每个用户操作而不是一系列用户操作 — 一个 Web 流。

非原子 Web 流用例

在医疗卫生行业,服务提供商定期接触患有慢性病的成员以评估他们的健康状况和潜在风险。健康提供商随后为其提供治疗和行为健康方面的建议。这称为 案例管理。

案例管理系统围绕着一系列联系任务。在一个典型任务中,案例经理会通过电话联系一个成员,询问评估问题并根据其回答给出适当的建议、创建转诊请求、记录联系结果和设置后续任务。

情况非常复杂。评估问题清单可能很长:电话可能由于各种原因而被中断、没有记录转诊某些任务可能无法完成等等。包含并发或异步操作的联系任务是一个长期运行的进程,每一步进展都要被保存到数据库。联系任务可以被模拟为单一的 Web 流,在长期运行进程的发展过程中,它可以被重复进入和执行。

Spring Web Flow 文档没有介绍此非原子 Web 流场景。在此用例中仍然可以利用流作用域的持久化上下文对象吗?答案是可以。

指定事务的作用域

我们知道流定义文件中的 <persistence-context/> 标签为我们提供了一个绑定到线程的 flowScoped 持久化上下文,这带来了没有分离实体 和没有 LazyInitializationException 异常的好处。因此,我们选择保留这个标签。与原子流中流管理的持久化相比,事务作用域发生的最大变化时:原子性应用于进程的每一步而不是整个流。通常,进程中的原子步骤是由 Web 流定义中的 <transition> 标签表示的一个用户操作。

上一页  5 6 7 8 9 10 

Tags:Spring Web Flow

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接