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

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

 2010-05-18 00:00:00 来源:WEB开发网   
核心提示: 流管理持久化中的 OptimisticLockingFailureException乐观锁 是一个极其有效的并发性控制方法,它可以确保数据完整性而又无需在数据库中放置任何物理锁,Spring Web Flow 2 中流管理的持久化(3),尽管不是强制实施的,但是强烈建议在流管理的持久化中使用乐观

流管理持久化中的 OptimisticLockingFailureException

乐观锁 是一个极其有效的并发性控制方法,它可以确保数据完整性而又无需在数据库中放置任何物理锁。尽管不是强制实施的,但是强烈建议在流管理的持久化中使用乐观锁。

持久化上下文在刷新时检查实体版本,如果检查出并发的修改,它就抛出 OptimisticLockingFailureException 异常(在 Hibernate 中是 StaleObjectException 异常)。实体在内存中存在的时间越长,其对应的数据库值被其他进程修改的可能性越大。

如上所述,在 Open Session in View 模式中,实体的持久状态受制于用户请求。一旦实体分离,通常需要在后续用户请求中进行合并/重新连接/重新加载操作来还原实体的持久状态,从而使实体与其对应的数据库值保持同步。

在流管理的持久化中,实体在多个用户请求之间保存其持久状态。在各用户请求之间没有强制执行数据库同步,因此很有可能出现 OptimisticLockingFailureException 异常。重要的是要优雅地处理 OptimisticLockingFailureException 异常,就像处理任何检查型业务异常一样。(即使 OptimisticLockingFailureException 是一个回滚到数据库事务的运行时异常,也应如此)。常用的策略是让用户有机会合并其变更或用未过期数据重启流。

流作用域的持久化上下文

Web 流被声明为 XML 格式的流定义文件。带有 <persistence-context/> 标签的 Web 流启动时,会创建一个新的持久化上下文对象并将其绑定到流作用域。在等待用户请求时,该对象会断开与底层 JDBC 连接的连接并在服务于用户请求时重新连接。在整个流过程中都重用同一个持久化-上下文对象,这避免了分离实体状态的问题和相应的 LazyInitializationException 异常。

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

Tags:Spring Web Flow

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