我有一个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最终会提交?
答案 0 :(得分:4)
仅当事务状态为finally
时才调用STATUS_ACTIVE
块中的提交,这意味着它既未提交也未回滚。它看起来像一个安全性,以确保在方法结束时回滚或提交事务,以防方法try块中忘记utx.commit()
。
答案 1 :(得分:1)
我想说在finally块中进行这样的提交并不是一个好习惯。承担中途工作的风险对大多数目的来说都是危险的。在将事务状态检查为ACTIVE后,回滚将是更好的选择。
HTH。
谢谢, 尼丁