Spring Web Flow 2 中流管理的持久化
2010-05-18 00:00:00 来源:WEB开发网在上述用例中,每个用户操作都可以在数据库事务之外执行,无需指定 @Transactional 注释或 XML 配置的事务顾问。流作用域的持久化上下文对象将流期间加载的数据作为持久化实体来管理并将数据变更缓存为实体的脏状态。
如果用户在流末尾通过 <end-state commit="true"/> 确认了转账交易,那么 Spring Web Flow 运行时将在读/写数据库事务内隐式地调用 entityManager.flush()。然后提交事务,取消绑定持久化上下文并关闭它。如果用户选择通过 <end-state commit="false"/> 取消了交易,那么所有缓存的数据变更都会在关闭流作用域的持久化上下文之际在内存中被丢弃。
流管理持久化使用的这种方法与 JPA 1.0 解释对话处理的方式是完全一致的。JpaFlowExecutionListener 类是使这一切发生的底层 Spring Web Flow 组件。除了流管理持久化的非事务性数据访问方法之外,还可以使用只读事务。
Web 流中的只读事务
在某些情况下,与非事务性事务相比您可能更愿意使用只读事务。如果查看 Spring Web Flow 发行版中的样例 “Hotel Booking” 应用程序,会注意到在整个 “booking” Web 流期间,在全局范围内,对所有数据访问都使用了 @Transactional(readOnly=true),无论操作的本质如何(读/插入/更新/删除)。
JPA 1.0 规范不支持只读事务,因此只有在某些 JPA 提供商中才能使用此设置。在其 JPA 实现中,Hibernate 将底层 Hibernate 会话的 FlushMode 设置为 MANUAL 并将 auto-commit 模式设置为 false。
流管理持久化的只读事务的表现与非事务性数据访问一样,只有在原子 Web 流结尾才会通过 <end-state commit="true"/> 刷新变更的实体。
- ››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前端设计模式--制作漂亮的弹出层
更多精彩
赞助商链接