如果外部方法失败,我希望不执行我的子方法(使用javax @TransactionAttribute)

时间:2018-10-12 13:39:58

标签: java transactions ejb

我有一个方法Meth1,女巫将从另一个类中调用Meth2。 我希望如果Meth1失败,则不执行Meth2。

两者均具有REQUIRED属性。 使用此代码,如果Meth1持续存在失败(成功执行Meth2之后),则Meth2的更改将保留。

我希望所有代码全部或全部作为一个整体执行。

例如:

@TransactionAttribute(TransactionAttributeType.REQUIRED)
void meth1(){
    // ...some code
    otherClass.meth2();
    // ... some persistance that may fail
}

@TransactionAttribute(TransactionAttributeType.REQUIRED)
void meth2(){
    // some persistance
}

谢谢!

1 个答案:

答案 0 :(得分:1)

在这种情况下,这两种方法将在同一事务中执行。

EJB规范3.0讲述了REQUIRED:

  

容器必须调用其事务处理的企业bean方法   有效交易将属性设置为REQUIRED值   上下文。

     

如果客户端调用企业Bean的方法,而   客户端与事务上下文相关联,容器调用   客户事务上下文中的企业bean的方法。

     

如果   客户端调用企业bean的方法时   与交易上下文无关的容器   在将方法调用委派给   企业bean业务方法。容器自动注册   使用该业务方法访问的所有资源管理器   交易。如果业务方法调用其他企业Bean,   容器通过调用传递事务上下文。的   容器尝试使用业务方法提交事务时   已经完成。容器在   方法结果发送给客户端。