JPA EntityManager - 交易何时开始?

时间:2014-03-11 11:09:51

标签: jpa transactions ejb java-ee-7

我对EJB容器中事务,实体管理器和持久化上下文的生命周期感到困惑。

我以这种方式使用entitymanager:

 @PersistenceContext(unitName = "..")
 private EntityManager em;

在每个无国籍的ejb。

我的问题很简单:

  1. 交易何时开始?
  2. 如何传播交易?即当无国籍的ejbs互相称呼时,他们是否继续使用相同的交易?
  3. 交易何时提交?

1 个答案:

答案 0 :(得分:0)

对于容器管理的事务:

  1. 当调用第一个事务方法时,事务(TX)启动。默认情况下,所有EJB方法都是事务性的(相当于TransactionAttributeType.REQUIRED,这是默认设置)。

  2. 默认的TX传播在所有本地EJB调用上保持相同的TX。这相当于所有调用方法的显式TrasactionAttributeType.REQUIRED

  3. 当调用链中的第一个方法(为其创建TX的方法)返回时,将提交事务。

  4. 通过使用不同的TransactionAttributeTypes注释EJB方法,您可以对TX传播进行细粒度控制。