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

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

 2010-05-18 00:00:00 来源:WEB开发网   
核心提示: 持久化上下文还被绑定到当前的请求线程并以两种方式公开给开发人员:作为隐式变量 persistenceContext 或通过 JPA @PersistenceContext 注释注入到任何 Spring bean 中,隐式变量可以在流定义 XML 文件中直接得到,Spring Web Flow 2

持久化上下文还被绑定到当前的请求线程并以两种方式公开给开发人员:作为隐式变量 persistenceContext 或通过 JPA @PersistenceContext 注释注入到任何 Spring bean 中。

隐式变量可以在流定义 XML 文件中直接得到,例如:

<evaluate expression="persistenceContext.persist(transientEntityInstance)"/> 

注入的 JPA 实体管理器可以在 Spring 组件的任何地方引用,比如在 DAO 中、服务 bean 或 Web 层 bean 中。

持久化上下文的类型:事务性或扩展型

@PersistenceContext 注释有一个可选的属性 type,该属性默认为 PersistenceContextType.TRANSACTION(也就是绑定到事务的持久化上下文)。在用流作用域的持久化上下文编程时必须使用此默认设置。在这种情况下,注入的绑定到事务的持久化上下文对象只是一个共享的代理,它透明地委托给了绑定到线程的实际的流作用域的持久化上下文。

选择另一个选项,也就是 PersistenceContextType.EXTENDED,会得到一个叫做 “扩展的实体管理器” 的东西,它对线程而言是不安全的,不能在并发访问的组件,比如单态 Spring bean,中使用。将扩展的实体管理器用作流作用域的持久化上下文会导致应用程序中出现不可预测的数据库/事务行为,因此要尽量避免使用它。

有趣地是,Seam 对话通常用注入到有状态会话 bean (EJB) 中的扩展的实体管理器实现。这是 Spring Web Flow 的流管理的持久化和 Seam 对话之间的一个显著区别。

流作用域的持久化上下文对象可以与 @Transactional 注释一起使用以调整流的持久化特征。

事务语义

作为 Spring 核心包一部分的 @Transactional 注释指定了注释的类或方法的事务语义。根据 Spring 开发团队所述,@Transactional 最好应用于具体类而不是接口。默认事务语义是:

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

Tags:Spring Web Flow

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