快速业务通道

Spring Web Flow 2中流管理的持久化:事务性Web流的持久化策略 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-13
Only=false) 建立读/写事务,这样会使持久化上下文的 FlushMode 变为 AUTO。应用 @Transactional(readOnly=true) 会使底层 Hibernate 会话的 FlushMode 变为 MANUAL。

JPA 1.0 不支持 MANUAL 刷新以及只读事务,因此只有在底层 JPA 提供商,比如 Hibernate,支持只读数据库事务时,@Transactional(readOnly=true) 才有意义。而且,Hibernate 将此设置用作针对某些数据库类型的数据库提示从而优化查询性能。

propagation:propagation 属性确定当前方法是在继承的事务下运行,还是通过挂起/继续封闭事务在新事物中运行,或者根本没有在事务中运行。

isolation:JPA 1.0 不支持自定义隔离级别,因此开发人员需要指定数据库端的默认事务隔离级别。Read-Committed 是乐观锁工作所需的最低级别。

timeout:timeout 属性指定在超时(以及被底层事务基础设施自动回滚)之前事务可以运行多长时间 。

rollbackFor、rollbackForClassname、noRollbackFor、noRollbackForClassname: 一般而言,在出现表示系统错误的 RuntimeException 异常时事务总是回滚,在遇到带有预定义业务意义的检查型 Exception 时总是会提交。可以通过这 4 个回滚属性自定义默认语义。

Spring 核心包的健壮的事务基础设施使绝大部分真实开发场景中的事务管理更加轻松。在下面各节中,我们将了解 Spring Web Flow 如何利用 Spring 事务基础设施连同其自己的流作用域的持久化上下文对象来处理各种 Web 流中的持久化编程,包括一些展示了流管理持久化的局限性的用例。

Spring Web Flow 2中流管理的持久化:事务性Web流的持久化策略(3)

时间:2012-02-26 IBM Xinyu Liu

原子 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 的事务内的读取。类似地,非事务性写操作永远不会进行刷新。

在上述用例中,每个用户操作都可以在数据库事务之外执行,无需指定 @Transactional 注释或 XML 配置的事务顾问。流作用域的持久化上下文对象将流期间加载的数据作为持久化实体来管理并将数据变更缓存为实体的脏状态。

如果用户在流末尾通过 <end-state commit="true"/> 确认了转账交易,那么 Spring Web Flow 运行时将在读/写数据库事务内隐式地调用 entityMana

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号