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

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

 2010-05-18 00:00:00 来源:WEB开发网   
核心提示: 在上述用例中,每个用户操作都可以在数据库事务之外执行,Spring Web Flow 2 中流管理的持久化(7),无需指定@Transactional注释或 XML 配置的事务顾问,流作用域的持久化上下文对象将流期间加载的数据作为持久化实体来管理并将数据变更缓存为实体的脏状态,Hibernate

在上述用例中,每个用户操作都可以在数据库事务之外执行,无需指定 @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"/> 刷新变更的实体。

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

Tags:Spring Web Flow

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