Transactions 调用带有事务属性的ejb方法需要在调用方方法中新建并执行setRollbackOnly
我有以下两个EJB3.0 beanTransactions 调用带有事务属性的ejb方法需要在调用方方法中新建并执行setRollbackOnly,transactions,ejb-3.0,rollback,Transactions,Ejb 3.0,Rollback,我有以下两个EJB3.0 bean public class ExternalBean { @Resource private SessionContext ctx; @EJB protected DataBaseLogging dbLogger; @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public void doExternaljob() {
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();
}
}
由于EJB DatabaseLogging的方法log()具有事务属性,因此需要\u我预期的新属性 如果成功完成,数据将独立于调用方方法doExternaljob()的结果写入数据库。但事实并非如此。似乎log()方法也被回滚,并且没有写入任何数据。 如果删除对setRollbackOnly()的调用,则数据写入正确。但是在这种情况下,我是否可以通过抛出异常来确保外部事务总是回滚
这是否被视为正常行为?日志记录程序与数据库日志记录程序的比较是否只是复制粘贴错误?如果是,那么它应该工作(setRollbackOnly不应该回滚log完成的工作)。如果没有,那么如何获得
记录器
?它实际上是一个EJB引用,还是直接创建了实例?是的,logger和dbLogger是相同的。那是个打字错误。但这种行为与《华盛顿邮报》中所描述的一样。
public class DataBaseLogging {
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void log(){
//write log data to db
......
}
}