6.4 XAトランザクションの管理
- トランザクション・タイムアウトの設定
XA参加側サービスから送信されたリクエストがアクティブである期間を指定します。トランザクションのコミットまたはロールバックが指定した期間内に行われないと、トランザクションはロールバックされます。 - グローバルおよびローカル・トランザクションについて
トランザクション・イニシエータ・サービスがXAトランザクションを開始するためにMicroTxをコールすると、デフォルトでは、このトランザクションはグローバル・トランザクションとして処理されます。 - XAトランザクション通知の受信の登録
トランザクション・イニシエータ・サービスおよび参加側サービスを登録して、通知を受信できます。MicroTxは、イベントの発生時(準備フェーズの前およびMicroTxがトランザクションを正常にコミットまたはロールバックしたとき)に、登録したサービスについて通知します。
親トピック: XAでのアプリケーションの開発
6.4.1 トランザクション・タイムアウトの設定
XA参加側サービスから送信されたリクエストがアクティブである期間を指定します。トランザクションのコミットまたはロールバックが指定した期間内に行われないと、トランザクションはロールバックされます。
参加側サービスから送信されるリクエストのトランザクション・タイムアウトを設定するには:
ORACLE_TMM_TRANSACTION_TIMEOUT
の値はtxMaxTimeout
の値をオーバーライドできますが、txMaxTimeout
の値を超えることはできません。たとえば、txMaxTimeout
の値が70000で、ORACLE_TMM_TRANSACTION_TIMEOUT
の値が80000の場合、最長タイムアウトは70000ミリ秒に設定されます。txMaxTimeout
の値が90000で、ORACLE_TMM_TRANSACTION_TIMEOUT
の値が80000の場合、最長タイムアウトは80000ミリ秒に設定されます。
親トピック: XAトランザクションの管理
6.4.2 グローバルおよびローカル・トランザクションについて
トランザクション・イニシエータ・サービスがXAトランザクションを開始するためにMicroTxをコールすると、デフォルトでは、このトランザクションはグローバル・トランザクションとして処理されます。
グローバル・トランザクションは、GTRIDに関連付けられているトランザクションです。たとえば、複数のマイクロサービスにわたるトランザクションや、単一のマイクロサービスが複数のリソース・マネージャと対話するトランザクションなどです。
ローカル・トランザクションは、GTRIDに関連付けられていないトランザクションです。たとえば、トランザクションに含まれる単一のサービスが単一のリソース・マネージャと対話する場合などです。このようなトランザクションは、このトランザクションを管理するためにコーディネータを必要としないため、ローカルで処理できます。MicroTxクライアント・ライブラリは、ローカル・トランザクションを管理します。MicroTxコーディネータを使用せずにトランザクションをローカルで処理すると、パフォーマンスが向上します。ローカル・トランザクションによって時間が節約され、スループットが向上します。
- トランザクション・プロモーションについて
トランザクション・プロモーション機能を有効にすると、すべてのトランザクションがローカル・トランザクションとして開始されます。 - トランザクション・プロモーションの有効化
デフォルトでは、すべてのトランザクションがグローバル・トランザクションID (GTRID)に関連付けられ、グローバル・トランザクションとして処理されます。パフォーマンスを向上させるには、トランザクション・プロモーションを有効にして特定のトランザクションを管理します。
親トピック: XAトランザクションの管理
6.4.2.1 トランザクション・プロモーションについて
トランザクション・プロモーション機能を有効にすると、すべてのトランザクションがローカル・トランザクションとして開始されます。
ノート:
この機能は、Oracle Databaseでのみ使用できます。一部のトランザクションはローカルで処理され、グローバル・トランザクションとしてプロモートされません。たとえば、トランザクション・イニシエータ・サービスが1つのリソース・マネージャのみと対話し、外部サービスと通信しない場合、トランザクションはローカルで処理されます。
次のトランザクションは、ローカルで処理できないため、グローバル・トランザクションとしてプロモートされます。
- トランザクション・イニシエータ・サービスが複数のリソース・マネージャと通信する場合。
- 複数のサービスがリソース・マネージャとともにトランザクションに参加する場合。
トランザクションがグローバル・トランザクションとしてプロモートされると、サービスはMicroTxコーディネータに登録され、コーディネータはトランザクションを処理します。
親トピック: グローバルおよびローカル・トランザクションについて
6.4.2.2 トランザクション・プロモーションの有効化
デフォルトでは、すべてのトランザクションがグローバル・トランザクションID (GTRID)に関連付けられ、グローバル・トランザクションとして処理されます。パフォーマンスを向上させるには、トランザクション・プロモーションを有効にして特定のトランザクションを管理します。
ノート:
この機能は、Oracle Databaseでのみ使用できます。- イニシエータ・サービスの
tmm.properties
ファイルで、oracle.tmm.promotable
プロパティをtrue
に設定します。トランザクション・プロモーションを有効にした場合、ローカルで処理できるトランザクションは、コーディネータを使用せずに管理されます。デフォルト値は
false
です。oracle.tmm.promotable
プロパティの値をfalse
に設定すると、すべてのトランザクションがデフォルトでグローバル・トランザクションとして開始され、GTRIDに関連付けられます。ローカル・トランザクションは開始されません。
親トピック: グローバルおよびローカル・トランザクションについて
6.4.3 XAトランザクション通知の受信の登録
トランザクション・イニシエータ・サービスおよび参加側サービスを登録して、通知を受信できます。MicroTxは、イベントの発生時(準備フェーズの前およびMicroTxがトランザクションを正常にコミットまたはロールバックしたとき)に、登録したサービスについて通知します。
MicroTxコーディネータが、登録したサービスについて通知します。イベントの発生時にビジネス・ロジックに基づいてサービスが追加のタスクを実行するようにする場合には、サービスの登録をお薦めします。登録するリソースごとに、コールバック・リソースを作成し、2つのメソッドを宣言する必要があります(MicroTxが、イベント発生時に通知を送信するためにこれらをコールします)。
ノート:
この機能は、Javaサービスでのみ使用可能です。親トピック: XAトランザクションの管理