7.10.3.4 非XAかつ非JDBCのリソースを使用するSpring Bootアプリケーションの構成

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

アプリケーションは、複数のXA準拠リソース・マネージャに接続できます。ただし、トランザクションに参加できるのは1つの非XAリソースのみです。
  1. 開始する前に、MicroTxライブラリのプロパティ値を構成していることを確認してください。

    xa-xa-supportfalseに設定され、xa-llr-supportまたはxa-lrc-supporttrueに設定されていることを確認します。

    • ロギング・ラスト・リソース(LLR)の最適化を有効にするには、次のプロパティの値を設定します。
      spring:
        microtx:
          xa-xa-support = false
          xa-llr-support = true
          xa-lrc-support = false
    • ラスト・リソース・コミット(LRC)の最適化を有効にするには、次のプロパティの値を設定します。
      spring:
        microtx:
          xa-xa-support = false
          xa-llr-support = false
          xa-lrc-support = true

    各プロパティおよびその他のオプション・プロパティの詳細は、「Spring Bootアプリケーションのライブラリ・プロパティの構成」を参照してください。

  2. MicroTxライブラリ・ファイルをSpring Boot 3.xアプリケーションのpom.xmlファイルにmaven依存関係として含めます。次のサンプル・コードは24.4リリース用です。使用するリリース・バージョンに基づいて、正しいバージョンを指定してください。Spring Boot 3.xアプリケーションは、Java 17で動作します。
    • JDBCアプリケーションでは、microtx-spring-boot-starterファイルを使用します。

      <dependency>
           <groupId>com.oracle.microtx</groupId>
           <artifactId>microtx-spring-boot-starter</artifactId>
           <version>24.4</version>
      </dependency>
    • HibernateがJPAプロバイダの場合は、microtx-spring-boot-starterおよびmicrotx-spring-boot-starter-hibernateファイルを使用します。

      <dependency>
           <groupId>com.oracle.microtx</groupId>
           <artifactId>microtx-spring-boot-starter</artifactId>
           <version>24.4</version>
      </dependency>
      
      <dependency>
           <groupId>com.oracle.microtx</groupId>
           <artifactId>microtx-spring-boot-starter-hibernate</artifactId>
           <version>24.4</version>
      </dependency>
    • EclipseLinkがJPAプロバイダの場合は、microtx-spring-boot-starterおよびmicrotx-spring-boot-starter-eclipselinkファイルを使用します。

      <dependency>
           <groupId>com.oracle.microtx</groupId>
           <artifactId>microtx-spring-boot-starter</artifactId>
           <version>24.4</version>
      </dependency>
      
      <dependency>
           <groupId>com.oracle.microtx</groupId>
           <artifactId>microtx-spring-boot-starter-eclipselink</artifactId>
           <version>24.4</version>
      </dependency>
    • JDBCアプリケーションでは、microtx-spring-boot-jaxrs-starterファイルを使用します。

      <dependency>
           <groupId>com.oracle.microtx</groupId>
           <artifactId>microtx-spring-boot-jaxrs-starter</artifactId>
           <version>24.4</version>
      </dependency>
    • HibernateがJPAプロバイダの場合は、microtx-spring-boot-jaxrs-starterおよびmicrotx-spring-boot-starter-hibernateファイルを使用します。

      <dependency>
           <groupId>com.oracle.microtx</groupId>
           <artifactId>microtx-spring-boot-jaxrs-starter</artifactId>
           <version>24.4</version>
      </dependency>
      
      <dependency>
           <groupId>com.oracle.microtx</groupId>
           <artifactId>microtx-spring-boot-starter-hibernate</artifactId>
           <version>24.4</version>
      </dependency>
    • EclipseLinkがJPAプロバイダの場合は、microtx-spring-boot-jaxrs-starterおよびmicrotx-spring-boot-starter-eclipselinkファイルを使用します。

      <dependency>
           <groupId>com.oracle.microtx</groupId>
           <artifactId>microtx-spring-boot-jaxrs-starter</artifactId>
           <version>24.4</version>
      </dependency>
      
      <dependency>
           <groupId>com.oracle.microtx</groupId>
           <artifactId>microtx-spring-boot-starter-eclipselink</artifactId>
           <version>24.4</version>
      </dependency>
  3. Spring JAX-RSアプリケーションの場合のみ、MicroTxライブラリがJAX-RSコールをインターセプトしてトランザクションを管理できるように、次のフィルタを登録する必要があります。Spring RESTアプリケーションでは、このステップをスキップできます。
    import org.glassfish.jersey.server.ResourceConfig;
    ...
    @Component
    public class Configuration extends ResourceConfig {
        public Configuration() {
    ...
          register(TrmTransactionRequestFilter.class);
          register(TrmTransactionResponseFilter.class);
          register(JaxRsXACallbackResource.class);
    }
  4. セッション・アフィニティを有効にします。「セッション・アフィニティの有効化」を参照してください。
  5. 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を返すためです。

  6. 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> {
    
    @Autowired(required = false)
    @Qualifier("NonXA")
    private NonXAResource trmNonXAInstance;
    
        @Produces    
        @NonXa
        public NonXAResource getNonXAResource() {
            return nonXAResource;
        }
    
      @Override
        public NonXAResource get() {
            return getNonXAResource();
        }
    }
  7. 変更内容を保存します。

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