私は次の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()の呼び出しを削除すると、データは正しく書き込まれます。しかし、この場合、例外をスローすることで、外部トランザクションが常にロールバックされることを確認できますか?
これは通常の動作と見なされますか?