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 に答える