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