使用事务属性REQUIRES_NEW调用ejb方法并在调用方法中执行setRollbackOnly

时间:2012-06-18 13:29:31

标签: transactions ejb-3.0 rollback

我有以下两个EJB3.0 Beans

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()的调用,则数据写入正确。但是,我可以确定在这种情况下通过抛出异常外部事务总是回滚吗?

这被视为正常行为吗?

0 个答案:

没有答案