Transactions 调用带有事务属性的ejb方法需要在调用方方法中新建并执行setRollbackOnly

Transactions 调用带有事务属性的ejb方法需要在调用方方法中新建并执行setRollbackOnly,transactions,ejb-3.0,rollback,Transactions,Ejb 3.0,Rollback,我有以下两个EJB3.0 bean public class ExternalBean { @Resource private SessionContext ctx; @EJB protected DataBaseLogging dbLogger; @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public void doExternaljob() {

我有以下两个EJB3.0 bean

public class ExternalBean {
      @Resource
      private SessionContext ctx;
      @EJB
      protected DataBaseLogging dbLogger;

    @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
    public void doExternaljob() {

    try{
     .....  
    }catch(Exception e){
     logger.log();
     ctx.setRollbackOnly();
     throw new Exception();
    }
}

由于EJB DatabaseLogging的方法log()具有事务属性,因此需要\u我预期的新属性 如果成功完成,数据将独立于调用方方法doExternaljob()的结果写入数据库。但事实并非如此。似乎log()方法也被回滚,并且没有写入任何数据。 如果删除对setRollbackOnly()的调用,则数据写入正确。但是在这种情况下,我是否可以通过抛出异常来确保外部事务总是回滚


这是否被视为正常行为?

日志记录程序与数据库日志记录程序的比较是否只是复制粘贴错误?如果是,那么它应该工作(setRollbackOnly不应该回滚log完成的工作)。如果没有,那么如何获得
记录器
?它实际上是一个EJB引用,还是直接创建了实例?是的,logger和dbLogger是相同的。那是个打字错误。但这种行为与《华盛顿邮报》中所描述的一样。
public class DataBaseLogging  {
 @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
 public void log(){
  //write log data to db
  ......
 }
}