0

次のことを行うサードパーティのコードがあります

  1. リスト項目

    ユーザートランザクションを作成します。

     txn = (UserTransaction)ctx.lookup( "UserTransaction" );
     txn.begin(  );
    
  2. (JPA を介して) MySQL データベースに永続化する作業を行います。

  3. txn.commit()

それらには Exception ブロックがありますが、どれも呼び出しませんtxn.rollback。優れたコーディング慣行では、例外が発生した場合はロールバックを呼び出す必要があると言われていますが、私の質問は、txn がコミットされておらず、例外が発生した場合、ロールバックを呼び出さないことの悪影響は何ですか?

4

2 に答える 2

4

トランザクションは、commit()ユーザーまたはrollback()それが実行されるまでアクティブのままになります。ロックを保持し続け、アプリケーション(実際にはデータベース)をブロックしてしまう可能性があります。

于 2010-05-19T16:50:35.287 に答える
1

IMO JTAトランザクションは、最終的にタイムアウトし(設定またはデフォルトのtransactionTimeoutに基づいて)、自動的にロールバックする必要があります。

于 2012-11-06T12:48:52.810 に答える