3

我有一个 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?

4

2 回答 2

4

finally仅当事务状态为 时才调用块中的提交STATUS_ACTIVE,这意味着它既未提交也未回滚。确保在方法结束时回滚或提交事务看起来像是一种安全措施,以防utx.commit()在方法 try 块中被遗忘。

于 2010-11-24T12:28:07.640 回答
1

我想说在 finally 块中进行此类提交不是一个好习惯。存在进行中途工作的风险,这对于大多数目的来说都是危险的。在检查事务的状态为 ACTIVE 之后,回滚将是一个更好的选择。

HTH。

谢谢,尼丁

于 2011-07-28T18:40:11.400 回答