- Transaction Manager for Microservices開発者ガイド
- XAでのアプリケーションの開発
- XAでのSpring RESTアプリケーションの開発
- トランザクション参加側としてのSpring RESTアプリケーションの構成
- 複数のXA準拠リソース・マネージャを使用するSpring RESTアプリケーションの構成
6.10.3.2 複数のXA準拠リソース・マネージャを使用するSpring RESTアプリケーションの構成
複数のXA準拠のリソース・マネージャを使用する場合は、この項に記載されている情報を使用してSpring REST参加側アプリケーションを構成します。
- 次のMicroTxライブラリ・ファイルの1つのみをSpring Boot 3.xアプリケーションの
pom.xmlファイルにmaven依存関係として含めます。次のサンプル・コードは24.2リリース用です。使用するリリース・バージョンに基づいて、正しいバージョンを指定してください。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.2</version> </dependency> -
JPAプロバイダとしてHibernateを使用するJavaアプリケーションでは、
microtx-spring-boot-starter-hibernateライブラリ・ファイルを使用します。<dependency> <groupId>com.oracle.microtx</groupId> <artifactId>microtx-spring-boot-starter-hibernate</artifactId> <version>24.2</version> </dependency> -
EclipseLinkをJPAプロバイダとして使用するJavaアプリケーションでは、
microtx-spring-boot-starter-eclipselinkライブラリ・ファイルを使用します。<dependency> <groupId>com.oracle.microtx</groupId> <artifactId>microtx-spring-boot-starter-eclipselink</artifactId> <version>24.2</version> </dependency>
-
com.oracle.microtx.common.MicroTxConfigパッケージをインポートします。import com.oracle.microtx.common.MicroTxConfig;- リソース・マネージャごとに
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(); - Oracle RACデータベースの場合は、次のように入力します:
creditDataSource.setRAC(true); - LLRの最適化を使用する非XAリソースの場合は、次を入力します:
creditDataSource.setLLRSupport(); - LRCの最適化を使用する非XAリソースの場合は、次を入力します:
creditDataSource.setLRCSupport();
- XA準拠リソースの場合は、次を入力します:
XADatasourceオブジェクトを初期化します。アプリケーションで複数のリソース・マネージャを使用している場合は、XA準拠リソース・マネージャごとに次の方法でXADatasourceオブジェクトを初期化します。MicroTxクライアント・ライブラリは、
XADatasourceオブジェクトにアクセスする必要があります。このオブジェクトを使用してXAConnectionオブジェクトおよびXAResourceオブジェクトを作成し、リソース・マネージャまたはデータベース・サーバーに接続します。次のコードでは、接続オブジェクトを作成する際にアプリケーション・コードの先頭にXADatasourceオブジェクトをどのように定義するかを示しています。class oracle.tmm.jta.MicroTxConfig static void initXaDataSource(XADataSource dataSource, DataSourceInfo creditDataSource)ここで、
creditDataSourceは、以前に作成したDataSourceInfoオブジェクトです。すべてのリソース・マネージャについてこのステップを繰り返します。
XADataSourceの詳細は、https://docs.oracle.com/javase/8/docs/api/javax/sql/XADataSource.htmlを参照してください。- トランザクション参加側関数またはブロックで、MicroTxクライアント・ライブラリで使用される
XADatasourceオブジェクトを指定します。リソース・マネージャに接続するための資格証明およびその他の詳細を指定します。//Example for a participant using an Oracle Database: OracleXADataSource dataSource = new oracle.jdbc.xa.client.OracleXADataSource(); dataSource.setURL(url); //database connection string dataSource.setUser(user); //username to access database dataSource.setPassword(password); //password to access databaseアプリケーション開発者は、
XADataSourceを割り当てる際に、XA準拠JDBCドライバおよび必要なパラメータを設定する必要があります。MicroTxクライアント・ライブラリは、
XADatasourceオブジェクトを使用してデータベース接続を作成します。すべてのリソース・マネージャについてこのステップを繰り返します。
- トランザクション参加側の関数すなわちブロックで、
XADatasourceオブジェクトを初期化した後に次のコード行を1回だけ追加します。oracle.tmm.jta.MicroTxConfig.initXaDataSource(dataSource, creditDataSource)ここで、
creditDataSourceは、以前に作成したDataSourceInfoオブジェクトです。MicroTxクライアント・ライブラリは、このオブジェクトを使用してデータベースに接続し、XAトランザクションを開始し、準備、コミット、ロールバックなどの様々な操作を実行します。MicroTxライブラリは、依存関係インジェクションを使用してDMLを実行するためのSQL接続オブジェクトもアプリケーション・コードに提供します。
すべてのリソース・マネージャについてこのステップを繰り返します。
- 参加側サービスのコードに次の行を挿入して、アプリケーションがMicroTxクライアント・ライブラリによって渡された接続を使用するようにします。参加側アプリケーションの次のコードは、MicroTxクライアント・ライブラリによって作成された
connectionオブジェクトを注入します。アプリケーションで複数のリソース・マネージャを使用している場合は、XA準拠リソース・マネージャごとに次の方法で
connectionオブジェクトを注入します。次の例では、XA準拠リソース・マネージャごとに1つずつ、2つの接続を追加する方法について説明します。接続を注入する場合は、
microTxSqlConnectionをコールし、その後にデータ・ソースの名前を指定します。//Initialize the application context private ApplicationContext applicationContext; //Connection for XA-compliant resource manager 1 private Connection connection; //Connection for XA-compliant resource manager 2 private Connection creditConnection; @Autowired public AccountService(ApplicationContext applicationContext) { this.applicationContext = applicationContext; try { // Inject the connections for XA-compliant resource manager 1. // Specify the name of the data source associated with XA-compliant resource manager 1. connection = (Connection) applicationContext.getBean("microTxSqlConnection", "departmentDataSource"); // Inject the connections for XA-compliant resource manager 2. // Specify the name of the data source associated with XA-compliant resource manager 2. creditConnection = (Connection) applicationContext.getBean("microTxSqlConnection","creditDataSource"); } catch (ClassCastException ex) { LOG.info(ex.getMessage()); } }ここで、
creditDataSourceは、oracle.tmm.jta.common.DataSourceInfoパッケージのDataSourceInfoクラスのdataSourceName文字列に指定した値です。すべてのリソース・マネージャについてこのステップを繰り返します。
- 参加側サービスのコードに次の行を挿入して、参加側サービスがDML操作を実行するたびに、注入された
connectionオブジェクトを使用するようにします。Statement stmt1 = creditConnection.createStatement(); stmt1.execute(query); stmt1.close();ここで、
creditConnectionは、前のステップで注入したConnectionオブジェクトの名前です。これらのコード行は、参加側サービスが実行するDML操作ごとに挿入します。DML操作ごとに
stmt1やstmt2などの新しい文オブジェクトを作成しますが、MicroTxクライアント・ライブラリによって作成された同一のcreditConnectionオブジェクトを使用します。すべてのリソース・マネージャについてこのステップを繰り返します。
- 変更内容を保存します。
MicroTxライブラリおよびXAトランザクション・プロトコルを使用するサンプルSpring RESTトランザクション参加側アプリケーションのソース・コードは、microtx-samples GitHubリポジトリにあるdepartment-spring-multiplermフォルダにあります。これは、MicroTxライブラリとアプリケーションの統合時に参照として使用できます。