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

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

 2010-05-18 00:00:00 来源:WEB开发网   
核心提示: 原子 Web 流流管理持久化旨在处理那些从事务角度来说属于原子性的 Spring Web Flow 用例,例如,Spring Web Flow 2 中流管理的持久化(6),假设有一个网银系统,该系统允许用户将资金从支票账户移动到储蓄账户或即将建立的定期账户,auto-commit 模式中的非事务

原子 Web 流

流管理持久化旨在处理那些从事务角度来说属于原子性的 Spring Web Flow 用例。例如,假设有一个网银系统,该系统允许用户将资金从支票账户移动到储蓄账户或即将建立的定期账户。事务必须分几个步骤完成:

用户选择要转账的支票账户。

系统显示账户余额。

用户输入要转账的金额。

用户选择一个储蓄或定期账户作为目标。

系统显示整个交易的摘要供用户检查。

用户决定提交或取消交易。

由于明显的并发性需求,您应该首先在实体类上启用乐观锁。为此,您可以使用 JPA @Version 注释或者 Hibernate 私有 OptimisticLockType.ALL 属性。然后将整个用例映射到一个带有 Spring Web Flow 的 <persistence-context/> 标签的 Web 流中。

Web 流中非事务性数据访问

在 Spring Web Flow 中,默认情况下,所有数据访问都是非事务性的。对于非事务性数据访问,Hibernate 将底层数据库的 auto-commit 模式设置为 true,这样每个 SQL 语句都会在其自己的 “短事务” 中立即执行,提交或回滚。从应用程序的角度而言,数据库短事务等效于根本没有事务。更为严重的是,对于非事务性操作,Hibernate 禁用了默认的 FlushMode.AUTO。它在 FlushMode.MANUAL 模式下高效地工作。

禁用 FlushMode.AUTO 对于流管理的持久化而言很重要。视图呈现阶段的实体延迟读取也在非事务性模式下执行。如果在呈现不同视图期间发生过刷新,那么就无法在流末尾完成延迟的刷新。在本质上,auto-commit 模式中的非事务性读取等效于隔离级别为 Read-Committed 的事务内的读取。类似地,非事务性写操作永远不会进行刷新。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:Spring Web Flow

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