12.7.6. トランザクションのロールバック
この手順では、Java Transaction API (JTA) を使用してトランザクションをロールバックする方法を説明します。
要件
トランザクションは、ロールバックする前に開始する必要があります。トランザクションの開始方法については、を参照してください。「トランザクションの開始」。
電話する
rollback()
UserTransaction
のメソッド。あなたが電話するときrollback()
UserTransaction
のメソッドである場合、トランザクションマネージャーはトランザクションをロールバックし、データを以前の状態に戻そうとします。@Inject private UserTransaction userTransaction; public void updateTable(String key, String value) EntityManager entityManager = entityManagerFactory.createEntityManager(); try { userTransaction.begin(): <!-- Perform some data manipulation using entityManager --> ... // Commit the transaction userTransaction.commit(); } catch (Exception ex) { <!-- Log message or notify Web page --> ... try { userTransaction.rollback(); } catch (SystemException se) { throw new RuntimeException(se); } throw new RuntimeException(e); } finally { entityManager.close(); } }
CMT (Container Managed Transaction) を使用する場合は、トランザクションを手動でロールバックする必要はありません。
Bean がコンテナー管理トランザクションを使用するよう設定すると、コンテナーはコードで設定したアノテーションに基づいてトランザクションライフサイクルを管理します。注記CMT のロールバックは RuntimeException が発生すると実行されます。setRollbackOnly
メソッドを明示的に呼び出してロールバックを発生させることもできます。または、アプリケーション例外の@ApplicationException(rollback=true
) を使用してロールバックできます。
結果
トランザクションは、トランザクションマネージャーによってロールバックされます。
注記
完全な例については、を参照してください。「JTA トランザクションの例」。