1

我有以下两个 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();
    }
}

public class DataBaseLogging  {
 @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
 public void log(){
  //write log data to db
  ......
 }
}

由于 EJB DatabaseLogging 的方法 log() 具有事务属性 REQUIRES_NEW,因此我希望如果它成功完成,数据将被写入 db,而与调用方方法 doExternaljob() 的结果无关。但这不是发生的事情。似乎 log() 方法也被回滚并且没有写入数据。如果我删除对 setRollbackOnly() 的调用,则数据写入正确。但是我可以确定在这种情况下通过抛出异常外部事务总是回滚吗?

这被认为是正常行为吗?

4

0 回答 0