- Transaction Manager for Microservices開発者ガイド
- XAでのアプリケーションの開発
- XAでのSpring Bootアプリケーションの開発
- トランザクション参加側としてのSpring Bootアプリケーションの構成
- 非XA JDBCリソースを使用するSpring Bootアプリケーションの構成
7.10.3.3 非XA JDBCリソースを使用するSpring Bootアプリケーションの構成
XAをサポートしないJDBCリソースを使用する場合は、この項に記載されている情報を使用してSpring Boot参加側アプリケーションを構成します。
- 1つのリソース・マネージャを使用する場合は、すべてのMicroTxクライアント・ライブラリ・プロパティの値を1つのファイル(
application.yaml
ファイルなど)に指定します。アプリケーションで複数のリソース・マネージャを使用している場合は、このステップをスキップします。xa-xa-support
がfalse
に設定され、xa-llr-support
またはxa-lrc-support
がtrue
に設定されていることを確認します。- ロギング・ラスト・リソース(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アプリケーションのライブラリ・プロパティの構成」を参照してください。
- ロギング・ラスト・リソース(LLR)の最適化を有効にするには、次のプロパティの値を設定します。
- アプリケーションで複数のリソース・マネージャを使用している場合は、次のステップを実行して、MicroTxクライアント・ライブラリのプロパティ値を構成します。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
注釈を使用して、アプリケーションでこれらのデータ・ソースが使用されることを確認します。 - 作成した
DataSourceInfo
オブジェクトごとに、次のMicroTxクライアント・ライブラリ・プロパティの1つのみを入力します。次の例では、creditDataSource
オブジェクトのプロパティ値を指定します。同様に、他のリソース・マネージャのプロパティ値を指定できます。値を指定しない場合、リソースはデフォルトでXA準拠とみなされます。- XA準拠リソースの場合は、
creditDataSource.setXaSupport();
と入力します。 - LLRの最適化を使用する非XAリソースの場合は、
creditDataSource.setLLRSupport();
と入力します。 - LRCの最適化を使用する非XAリソースの場合は、
creditDataSource.setLRCSupport();
と入力します。
- XA準拠リソースの場合は、
- リソース・マネージャごとに
- 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>
-
- 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); }
- セッション・アフィニティを有効にします。「セッション・アフィニティの有効化」を参照してください。
com.oracle.microtx.common.MicroTxNonXAConfig
パッケージをインポートします。import com.oracle.microtx.common.MicroTxNonXAConfig;
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で作成したオブジェクトです。
-
- トランザクション参加側関数またはブロックで、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
オブジェクトを使用してデータベース接続を作成します。 - トランザクション参加側の関数すなわちブロックで、
Datasource
オブジェクトを初期化した後に次のコード行を1回だけ追加します。MicroTxライブラリは、このオブジェクトを使用してデータベース・トランザクションを開始します。MicroTxライブラリは、依存関係インジェクションを使用してDMLを実行するためのSQL接続オブジェクトもアプリケーション・コードに提供します。oracle.tmm.jta.MicroTxNonXAConfig.initNonXaDataSource((DataSource) NonXaDs);
ここで、
Datasource
はJTAで定義されたインタフェースであり、JDBCドライバによって実装が提供されます。 - 参加側サービスのコードに次の行を挿入して、アプリケーションがMicroTxライブラリによって渡された接続を使用するようにします。参加側アプリケーションの次のコードは、MicroTxライブラリによって作成された
connection
オブジェクトを注入します。@Autowired @Qualifier("microTxNonXASqlConnection") @Lazy private Connection connection;
- 参加側サービスにコードを挿入して、参加側サービスがDML操作を実行するたびに、注入された
connection
オブジェクトを使用するようにします。ビジネス・シナリオに基づいて、注入されたconnection
オブジェクトを使用するコードを作成できます。次に、例のコード・スニペットを示します。Statement stmt1 = connection.createStatement(); stmt1.execute(query); stmt1.close();
これらのコード行は、参加側サービスが実行するDML操作ごとに挿入します。DML操作ごとに
stmt1
やstmt2
などの新しい文オブジェクトを作成しますが、MicroTxライブラリによって作成された同一のconnection
オブジェクトを使用します。 - 変更内容を保存します。
MicroTxライブラリおよびXAトランザクション・プロトコルを使用するサンプルSpring RESTトランザクション参加側アプリケーションのソース・コードは、microtx-samples
GitHubリポジトリにあるdepartment-spring-nonxa-ds
フォルダにあります。これは、MicroTxライブラリとアプリケーションの統合時に参照として使用できます。