Spring Web Flow 2 中流管理的持久化
2010-05-18 00:00:00 来源:WEB开发网所有这些因素都表明每一次进程运行后长期进程的状态都需要持久保存到后端数据库。将此长期运行进程的人类活动实现为 Web 流成为一个明智的技术解决方案。流将在不同的 Web 会话中重复执行以模仿长期进程的生命周期。
除了上述场景,还有一些应用程序由非上下文 Web 页组成,用户可以在这些 Web 页之间任意导航。这些 Web 页可以根据其业务功能被分组成流,即使没有逻辑顺序流也没有开始或结束状态。每个用户请求期间所做的数据变更都要被保存。这些应用程序中的持久化编程与上述长期运行的进程没有什么不同,事务原子性的作用域都划定到每个用户操作而不是一系列用户操作 — 一个 Web 流。
非原子 Web 流用例
在医疗卫生行业,服务提供商定期接触患有慢性病的成员以评估他们的健康状况和潜在风险。健康提供商随后为其提供治疗和行为健康方面的建议。这称为 案例管理。
案例管理系统围绕着一系列联系任务。在一个典型任务中,案例经理会通过电话联系一个成员,询问评估问题并根据其回答给出适当的建议、创建转诊请求、记录联系结果和设置后续任务。
情况非常复杂。评估问题清单可能很长:电话可能由于各种原因而被中断、没有记录转诊某些任务可能无法完成等等。包含并发或异步操作的联系任务是一个长期运行的进程,每一步进展都要被保存到数据库。联系任务可以被模拟为单一的 Web 流,在长期运行进程的发展过程中,它可以被重复进入和执行。
Spring Web Flow 文档没有介绍此非原子 Web 流场景。在此用例中仍然可以利用流作用域的持久化上下文对象吗?答案是可以。
指定事务的作用域
我们知道流定义文件中的 <persistence-context/> 标签为我们提供了一个绑定到线程的 flowScoped 持久化上下文,这带来了没有分离实体 和没有 LazyInitializationException 异常的好处。因此,我们选择保留这个标签。与原子流中流管理的持久化相比,事务作用域发生的最大变化时:原子性应用于进程的每一步而不是整个流。通常,进程中的原子步骤是由 Web 流定义中的 <transition> 标签表示的一个用户操作。
- ››web安全之信息刺探防范1
- ››webqq 最新加密算法
- ››webdriver 数据库验证方法
- ››Spring源码学习-含有通配符路径解析(上)
- ››WebSphere Application Server 7.0 XML Feature P...
- ››Web2.0网络时代基于社会影响力的声望值
- ››Web服务器搭建:配置Linux+Apache+Mysql+PHP(或Pe...
- ››WebLogic调整Java虚拟机性能优化参数
- ››webqq2.0协议研究(3)-ClientId生成
- ››Web.config配置文件
- ››WebBrowser组件的execWB方法——Delphi控制浏览器...
- ››Web前端设计模式--制作漂亮的弹出层
更多精彩
赞助商链接