Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Transactions EJB3.0事务边界从一个本地EJB调用另一个本地EJB_Transactions_Jakarta Ee_Ejb 3.0 - Fatal编程技术网

Transactions EJB3.0事务边界从一个本地EJB调用另一个本地EJB

Transactions EJB3.0事务边界从一个本地EJB调用另一个本地EJB,transactions,jakarta-ee,ejb-3.0,Transactions,Jakarta Ee,Ejb 3.0,设想以下两个ejb3.0无状态会话bean,每个bean实现一个本地接口,并部署到同一容器中: public class EjbA { @EJB private ejbB; public void methodA() { for (int i=0; i<100; i++) { ejbB.methodB(); } } } public class EjbB { public void

设想以下两个ejb3.0无状态会话bean,每个bean实现一个本地接口,并部署到同一容器中:

public class EjbA {
    @EJB 
    private ejbB;

    public void methodA() {
        for (int i=0; i<100; i++) {
            ejbB.methodB();
        }
    }    
}

public class EjbB {
    public void methodB() {
        ...
    }
}
公共类EjbA{
@EJB
私人ejbB;
公开无效方法a(){

对于(int i=0;i,这取决于您的事务属性-您可以使用@TransactionaAttribute注释将其设置为以下属性之一:

  • 必需的
  • 需要新的
  • 支持
  • 强制性的
  • 不支持
  • 从来没有
REQUIRED是默认值,如果没有事务,则将启动新事务,否则容器将使用现有事务

REQUIRES_NEW告诉容器始终启动新事务

根据我的经验,其他选项不太常用,但它们都是在EJB规范中定义的

例如:

@Stateless
public class EjbA {
    @EJB 
    private ejbB;

    @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
    public void methodA() {
        for (int i=0; i<100; i++) {
            ejbB.methodB();
        }
    }    
}
@无状态
公共类EjbA{
@EJB
私人ejbB;
@TransactionAttribute(TransactionAttributeType.REQUIRES\u NEW)
公开无效方法a(){

对于(inti=0;i,这取决于您如何为每个方法定义事务策略

如果在方法B和A中需要:它将对这两种方法使用相同的事务

如果A需要新事务,B需要新事务:它将为方法B创建新事务