10.7.6. トランザクションのロールバック

この手順では、Java Transaction API (JTA) を使用してトランザクションをロールバックする方法を示します。この API は、ローカルトランザクションと分散トランザクションの両方に使用されます。分散トランザクションは、Java Transaction Server (JTS) により管理され、Object Request Broker (ORB) の設定を必要とします。ORB の設定の詳細については、『管理および設定ガイド』の項 『ORB 設定』を参照してください。
要件

トランザクションは、ロールバックする前に開始する必要があります。トランザクションの開始方法については、「トランザクションの開始」を参照してください。

  1. UserTransactionrollback() メソッドを呼び出します。

    UserTransactionrollback() メソッドを呼び出すと、トランザクションマネージャーがトランザクションをロールバックし、データを前の状態に戻そうとします。
     
    @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();
        }
    }
    
    
  2. Container Managed Transactions (CMT) を使用する場合は、手動でトランザクションをロールバックする必要がありません。

    Bean が Container Managed Transactions を使用するよう設定すると、コンテナはコードで設定したアノテーションに基づいてトランザクションライフサイクルを管理します。
結果

トランザクションマネージャーにより、トランザクションがロールバックされます。

注記

全体の例は 「JTA トランザクションの例」 を参照してください。