10.7.3. トランザクションの開始

この手順では、Java Transaction Service (JTS) プロトコルを使用して、新しい JTA トランザクションを開始する方法、または分散トランザクションに散開する方法を示します。
分散トランザクション

分散トランザクションでは、トランザクション参加者が複数のサーバー上の個別アプリケーションに存在します。参加者が新しいトランザクションコンテキストを作成する代わりに、すでに存在するトランザクションに参加する場合は、コンテキストを共有する 2 人以上の参加者が分散トランザクションに参加します。分散トランザクションを使用するには、ORB を設定する必要があります。ORB 設定の詳細については、『管理および設定ガイド』の項 『ORB 設定』を参照してください。

  1. UserTransaction のインスタンスを取得します。

    @TransactionManagement(TransactionManagementType.BEAN) アノテーションを用いると、 JNDI やインジェクション (EJB が Bean 管理のトランザクションを使用する場合は EJB の EjbContext) を使用してインスタンスを取得できます。
    • JNDI

      new InitialContext().lookup("java:comp/UserTransaction")
    • インジェクション

      @Resource UserTransaction userTransaction;
    • EjbContext

      EjbContext.getUserTransaction()
  2. データソースに接続後、UserTransaction.begin() を呼び出します。

    ...
    try {
        System.out.println("\nCreating connection to database: "+url);
        stmt = conn.createStatement();  // non-tx statement
        try {
            System.out.println("Starting top-level transaction.");
            userTransaction.begin();
            stmtx = conn.createStatement(); // will be a tx-statement
            ...
        }
    }
    
JTS API を使用して既存のトランザクションに参加します。

EJB の利点の 1 つは、コンテナがすべてのトランザクションを管理することです。ORB をセットアップした場合は、コンテナによって分散トランザクションが管理されます。

結果

トランザクションが開始します。トランザクションをコミットまたはロールバックするまで、データソースのすべての使用でトランザクションに対応します。

注記

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