Spring Web Flow 2 中流管理的持久化
2010-05-18 00:00:00 来源:WEB开发网如果希望刷新发生在 <end-state/> 之前,您需要在用 @Transactional 注释的 Spring bean 方法之一中调用 entityManager.flush()。
直接从 Web 流调用,<evaluate expression="persistenceContext.flush()"/>,行不通,因为没有事务绑定到任何 Spring Web Flow 标签,除了 <end-state commit="true"/>。您会得到以下错误消息:
"javax.persistence.TransactionRequiredException: no transaction is in progress"
本文稍后我们会回到 “Hotel Booking” 这个示例,来了解 没有流作用域持久化上下文的持久化编程 所面临的挑战。
关于事务传播的更多信息
我已经介绍了事务如何根据其 propagation 属性的值进行传播,但是我忽略了一个特别的用例:如果标有 @Transactional(readOnly=true, propagation=Propagation.REQUIRED) 的方法要调用另一个标有 @Transactional(readOnly=false, propagation=Propagation.REQUIRED) 的方法,或者情况相反,那么事务又将如何传播呢?
Spring Web Flow 用一种简单而聪明的方式处理了这个问题:它忽略了第二个方法上的 readOnly 属性值。简而言之,初始化为只读的事务会保持只读状态,直到它结束,而且反之亦然。
这对于在流管理的持久化中是不使用事务还是使用只读事务的问题产生了有趣的影响。
只读事务的一个用例
应用程序服务层的 Spring bean 可以通过一些 JAX-WS/JAX-RS 注释公开为可重用的 SOAP/REST Web 服务。在这些 @Service bean 或其方法中应用 @Transactional 将 Web 服务调用与数据库事务绑定到了一起(没有明显的原因要在 DAO @Repository bean 上使用 @Transactional,除非应用程序具有级联式层架构,其中没有其他地方供开发人员指定事务属性)。
- ››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前端设计模式--制作漂亮的弹出层
更多精彩
赞助商链接