我有一个jta转换的代码,如下所示:
try{
//start jta user transcation utx
//commit utx
}catch(Exception ex){
try{
//rollback utx
}catch(Exception){
//print error "cannot rollback
}
}
finally{
if(null != utx && utx.getStatus() == Status.STATUS_ACTIVE){
utx.commit();
}
}我不明白为什么utx最终被提交了?
发布于 2010-11-24 20:28:08
只有当事务状态为STATUS_ACTIVE时,才会调用finally块中的commit,这意味着它既没有被提交,也没有回滚。它看起来像是一种安全性,可以确保事务在方法结束时被回滚或提交,以防在方法尝试块中忘记了utx.commit()。
发布于 2011-07-29 02:40:11
我要说的是,在finally块中执行这样的提交不是一个好的做法。中途工作有风险,这在大多数情况下都是危险的。在检查事务的状态为ACTIVE之后,回滚将是更好的选择。
HTH。
谢谢你,妮汀
https://stackoverflow.com/questions/4266589
复制相似问题