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

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

アプリケーションは、複数のXA準拠リソース・マネージャに接続できます。また、アプリケーションは1つの非XAリソースに接続できます。
  1. 1つのリソース・マネージャを使用する場合は、すべてのMicroTxクライアント・ライブラリ・プロパティの値を1つのファイル(application.yamlファイルなど)に指定します。アプリケーションで複数のリソース・マネージャを使用している場合は、このステップをスキップします。

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

    • ロギング・ラスト・リソース(LLR)の最適化を有効にするには、次のプロパティの値を設定します。
      spring:
        microtx:
          xa-xa-support = false
          xa-llr-support = true
          xa-lrc-support = false
          http-client-connection-pool-size = 15
          participant-url = https://bookHotel-app:8081
          propagation-active = true
          xa-transaction-timeout = 60000
    • ラスト・リソース・コミット(LRC)の最適化を有効にするには、次のプロパティの値を設定します。
      spring:
        microtx:
          xa-xa-support = false
          xa-llr-support = false
          xa-lrc-support = true
          http-client-connection-pool-size = 15
          participant-url = https://bookHotel-app:8081
          propagation-active = true
          xa-transaction-timeout = 60000

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

  2. アプリケーションで複数のリソース・マネージャを使用している場合は、次のステップを実行して、MicroTxクライアント・ライブラリのプロパティ値を構成します。1つのリソース・マネージャを使用している場合は、このステップをスキップします。
    1. リソース・マネージャごとにDataSourceInfoオブジェクトを作成します。必ず、アプリケーションのYAMLファイルで指定したデータ・ソース名とリソース・マネージャIDを指定してください。

      サンプル・コマンド

      DataSourceInfo departmentDataSourceInfo = new DataSourceInfo("ORCL1-8976-9776-9873");
      departmentDataSourceInfo.setDataSourceName(departmentDataSource);
      
      DataSourceInfo creditDataSourceInfo = new DataSourceInfo("ORCL2-2134-5668-8672");
      creditDataSourceInfo.setDataSourceName(creditDataSource);

      説明

      • departmentDataSourceおよびcreditDataSourceは、アプリケーションのYAMLファイルで指定したXAデータ・ソースの名前です。
      • ORCL1-8976-9776-9873およびORCL2-2134-5668-8672は、アプリケーションのYAMLファイルでdepartmentDataSourceおよびcreditDataSourceにそれぞれ指定したリソース・マネージャIDです。

      後で、@Inject注釈を使用して、アプリケーションでこれらのデータ・ソースが使用されることを確認します。

    2. 作成したDataSourceInfoオブジェクトごとに、次のMicroTxクライアント・ライブラリ・プロパティの1つのみを入力します。次の例では、creditDataSourceオブジェクトのプロパティ値を指定します。同様に、他のリソース・マネージャのプロパティ値を指定できます。値を指定しない場合、リソースはデフォルトでXA準拠とみなされます。
      • XA準拠リソースの場合は、creditDataSource.setXaSupport();と入力します。
      • LLRの最適化を使用する非XAリソースの場合は、 creditDataSource.setLLRSupport();と入力します。
      • LRCの最適化を使用する非XAリソースの場合は、 creditDataSource.setLRCSupport();と入力します。
  3. 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>
  4. 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);
    }
  5. セッション・アフィニティを有効にします。「セッション・アフィニティの有効化」を参照してください。
  6. com.oracle.microtx.common.MicroTxNonXAConfigパッケージをインポートします。
    import com.oracle.microtx.common.MicroTxNonXAConfig;
  7. Datasourceオブジェクトを初期化します。

    MicroTxライブラリは、データ・ソース・オブジェクトにアクセスする必要があります。データ・ソース・オブジェクトを使用してjava.sql.Connectionオブジェクトを作成し、リソース・マネージャに接続します。次のコードは、データ・ソース・オブジェクトを定義する方法を示しています。

    このコードはアプリケーションの最初に指定する必要があります。したがって、initNonXaDataSourceメソッドは、サーバーの起動直後に、他のすべてのリクエストが処理される前にコールされます。

    • アプリケーションで1つのリソース・マネージャを使用している場合は、次のようにデータ・ソースを初期化します。

      class oracle.tmm.jta.MicroTxNonXAConfig
      static void initNonXaDataSource(DataSource NonXaDs)
    • アプリケーションで複数のリソース・マネージャを使用している場合は、非XA JDBCリソースに対して次の方法でデータ・ソース・オブジェクトを初期化します。参加側サービスは複数のXA準拠リソース・マネージャに接続できますが、1つのトランザクションでサポートされる非XAリソースは1つのみです。

      class oracle.tmm.jta.MicroTxNonXAConfig
      static void initNonXaDataSource(DataSource departmentDataSource, DataSourceInfo departmentDataSourceInfo)

      ここで、dataSourceInfoは、ステップ2で作成したオブジェクトです。

  8. トランザクション参加側関数またはブロックで、MicroTxライブラリで使用されるDataSourceオブジェクトを指定します。リソース・マネージャに接続するための資格証明およびデータベース・ドライバの詳細を指定します。次の例は、MySQLデータベースをLLRとして使用する場合に指定する必要がある詳細を示しています。同様に、他のデータベースの資格証明およびデータベース・ドライバ情報を指定できます。
    //Example for a participant using a MySQL database as resource manager
    this.dataSource = PoolDataSourceFactory.getPoolDataSource();
    this.dataSource.setURL(url); //Database connection string
    this.dataSource.setUser(user); //User name to access the database
    this.dataSource.setPassword(password); //Password to access the database
    //Database driver information for the MySQL database.
    //Provide the JDBC driver information that is specific to your database.
    this.dataSource.setConnectionFactoryClassName("com.mysql.cj.jdbc.MysqlDataSource");
    this.dataSource.setMaxPoolSize(15);

    アプリケーション開発者は、DataSourceを割り当てる際に、データベース固有のJDBCドライバおよび必要なパラメータを設定する必要があります。

    MicroTxライブラリは、DataSourceオブジェクトを使用してデータベース接続を作成します。

  9. トランザクション参加側の関数すなわちブロックで、Datasourceオブジェクトを初期化した後に次のコード行を1回だけ追加します。MicroTxライブラリは、このオブジェクトを使用してデータベース・トランザクションを開始します。MicroTxライブラリは、依存関係インジェクションを使用してDMLを実行するためのSQL接続オブジェクトもアプリケーション・コードに提供します。
    oracle.tmm.jta.MicroTxNonXAConfig.initNonXaDataSource((DataSource) NonXaDs);

    ここで、DatasourceはJTAで定義されたインタフェースであり、JDBCドライバによって実装が提供されます。

  10. 参加側サービスのコードに次の行を挿入して、アプリケーションがMicroTxライブラリによって渡された接続を使用するようにします。参加側アプリケーションの次のコードは、MicroTxライブラリによって作成されたconnectionオブジェクトを注入します。
    @Autowired
    @Qualifier("microTxNonXASqlConnection")
    @Lazy
    private Connection connection;
  11. 参加側サービスにコードを挿入して、参加側サービスがDML操作を実行するたびに、注入されたconnectionオブジェクトを使用するようにします。ビジネス・シナリオに基づいて、注入されたconnectionオブジェクトを使用するコードを作成できます。次に、例のコード・スニペットを示します。
    Statement stmt1 = connection.createStatement();
    stmt1.execute(query);
    stmt1.close();

    これらのコード行は、参加側サービスが実行するDML操作ごとに挿入します。DML操作ごとにstmt1stmt2などの新しい文オブジェクトを作成しますが、MicroTxライブラリによって作成された同一のconnectionオブジェクトを使用します。

  12. 変更内容を保存します。

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