1

私は次の2つのEJB3.0Beanを持っています

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があるため、正常に完了すると、呼び出し元のメソッドdoExternaljob()の結果に関係なく、データがdbに書き込まれると予想しました。しかし、これは何が起こるかではありません。log()メソッドもロールバックされ、データが書き込まれていないようです。setRollbackOnly()の呼び出しを削除すると、データは正しく書き込まれます。しかし、この場合、例外をスローすることで、外部トランザクションが常にロールバックされることを確認できますか?

これは通常の動作と見なされますか?

4

0 に答える 0