7.11.3.4 非XAかつ非JDBCのリソースを使用するJAX-RSアプリケーションの構成

XAもJDBCもサポートしないリソースを使用する場合は、この項に記載されている情報を使用してJAX-RS参加側アプリケーションを構成します。

アプリケーションは、複数のXA準拠リソース・マネージャに接続できます。ただし、トランザクションに参加できるのは1つの非XAリソースのみです。
  1. 開始する前に、MicroTxライブラリのプロパティ値を構成していることを確認してください。「JAX-RSおよびNode.jsアプリケーションのライブラリ・プロパティの構成」を参照してください。
    oracle.tmm.xa.XaSupportfalseoracle.tmm.xa.LLRSupportまたはoracle.tmm.xa.LRCSupporttrueに設定されていることを確認します。
    • ロギング・ラスト・リソース(LLR)の最適化を有効にするには、環境変数に次の値を設定します。
      oracle.tmm.xa.XaSupport = false
      oracle.tmm.xa.LLRSupport = true
      oracle.tmm.xa.LRCSupport = false
    • ラスト・リソース・コミット(LRC)の最適化を有効にするには、環境変数に次の値を設定します。
      oracle.tmm.xa.XaSupport = false
      oracle.tmm.xa.LLRSupport = false
      oracle.tmm.xa.LRCSupport = true
  2. MicroTx Javaライブラリ・ファイルをアプリケーションのpom.xmlファイルにmaven依存関係として含めます。次のサンプル・コードは24.4リリース用です。使用するリリース・バージョンに基づいて、正しいバージョンを指定してください。
    • Helidon 2.xなどのJakarta EE8環境では、TmmLibファイルを使用します。

      <dependency>
           <groupId>com.oracle.tmm.jta</groupId>
           <artifactId>TmmLib</artifactId>
           <version>24.4</version>
      </dependency>
    • Helidon 3.xアプリケーションなどのJakarta EE9環境では、TmmLib-jakartaファイルを使用します。

      <dependency>
           <groupId>com.oracle.tmm.jta</groupId>
           <artifactId>TmmLib-jakarta</artifactId>
           <version>24.4</version>
      </dependency>
  3. セッション・アフィニティを有効にします。「セッション・アフィニティの有効化」を参照してください。
  4. NonXAResourceインタフェースを実装します。
    public class MongoDbNonXAResource implements NonXAResource {
    // Provide application-specific code for all the methods in the NonXAResource interface.
    }

    NonXAResourceインタフェースの詳細は、Transaction Manager for Microservices Java APIリファレンスを参照してください。

    LRCの最適化を有効にした場合、recover()メソッドをNonXAResourceインタフェースに実装する必要はありません。LRCでは、commit()メソッドがcommitRecordNULLを返すためです。

  5. NonXAResourceインタフェースを実装した後、MicroTxライブラリ・ファイルをインポートし、非XAリソースを生成します。作成した非XAリソースに@NonXa注釈を付けます。MicroTxライブラリは、注釈を付けたオブジェクトを消費します。

    次の例は、MongoDBリソースの実装例を示しています。業務要件に基づいてアプリケーションのコードを作成します。この例で、NonXaResourceFactoryクラスがNonXAResourceを提供します。非XAリソースを生成し、MicroTxライブラリが非XAリソースを消費します。

    package com.oracle.mtm.sample.nonxa;
    
    import oracle.tmm.jta.nonxa.NonXAResource;
    import oracle.tmm.jta.nonxa.NonXa;
    
    import javax.enterprise.inject.Produces;
    import javax.inject.Inject;
    import javax.ws.rs.ext.Provider;
    import java.util.function.Supplier;
    
    @Provider
    public class NonXaResourceFactory implements Supplier<NonXAResource> {
    
        @Inject
        MongoDbNonXAResource nonXAResource;
    
        @Produces    
        @NonXa
        public NonXAResource getNonXAResource() {
            return nonXAResource;
        }
    
      @Override
        public NonXAResource get() {
            return getNonXAResource();
        }
    }
  6. 変更内容を保存します。

MicroTxライブラリおよびXAトランザクション・プロトコルを使用するサンプルJAX-RSトランザクション参加側アプリケーションのソース・コードは、microtx-samples GitHubリポジトリにあるdepartment-nonxaフォルダにあります。これは、MicroTxライブラリとアプリケーションの統合時に参照として使用できます。