Java 异步ejb方法调用中的事务传播
我们有两个EJB会话bean,如下所示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
@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时,容器将再次启动新事务。