Java 异步ejb方法调用中的事务传播

Java 异步ejb方法调用中的事务传播,java,transactions,ejb,ejb-3.0,ejb-3.1,Java,Transactions,Ejb,Ejb 3.0,Ejb 3.1,我们有两个EJB会话bean,如下所示 @Stateless public class MyStatelessSessionBean{ @EJB MyStatefulSessionBean statefulBean; public void methodA(){ statefulBea.methodB(); } } @Stateful @ TransactionAttribute(TransactionAttributeTy

我们有两个EJB会话bean,如下所示

@Stateless
public class MyStatelessSessionBean{
      @EJB
       MyStatefulSessionBean statefulBean;
      public void methodA(){
          statefulBea.methodB();
      }
}

@Stateful
@ TransactionAttribute(TransactionAttributeType.REQUIRED)
public class MyStatefulSessionBean {
     @Asynchronous
     public void methodB(){
     }

}

不在任何事务中的客户端调用MyStatelessSessionBean的methodA。在所有处理完成后,容器将启动多少个distict事务?

将启动2个事务。正如EJB 3.1规范第4.5.3点所述:

客户端事务上下文不会通过异步方法调用传播。从Bean开发人员的角度来看,从来没有一个事务上下文从客户端流入。例如,这意味着异步方法上必需的事务属性的语义与REQUIRES\u NEW完全相同

据我所知,2个事务将由EJB容器启动。当客户端在没有任何活动事务的情况下调用MyStatelessSessionBean的methodA时,容器将为methodA启动一个新事务,因为默认情况下,所有方法都用TransactionAttributeType.REQUIRED注释。当调用标记为TransactionAttributeType.REQUIRED的异步methodB时,容器将再次启动新事务。