3.15.2 XAリソースサービスのトランザクション管理

XAリソースサービスは,TP1/Client/JまたはClient .NETからのトランザクション要求種別に従って,トランザクションの管理を開始したり終了したりします。また,TP1/Client/JまたはClient .NETから渡されるXAリソースサービスで連携するアプリケーションサーバのXID(トランザクション識別子)と,OpenTP1が管理しているXIDとを対応づけて,トランザクション情報を共用メモリ上で管理します。MSDTC連携機能を使用する場合は,RI(トランザクション回復情報)も管理します。RIとは,トランザクション決着処理で障害が発生した場合にトランザクションを回復するため情報で,トランザクション決着処理時にMSDTCが作成します。これらのトランザクションの状態は,必要に応じてXARファイルに記録されます。

<この項の構成>
(1) XAリソースサービスの運用
(2) トランザクション情報の管理
(3) XARファイルの運用

(1) XAリソースサービスの運用

XAリソースサービスの運用を次の図に示します。

図3-38 XAリソースサービスの運用

[図データ]

XAリソースサービスを使用する場合で次に示すときは,トランザクションが不正に残ることがあります。

(2) トランザクション情報の管理

J2EEで動作するアプリケーションサーバと連携する場合のトランザクション情報の管理を次の表に示します。

表3-31 トランザクション情報の管理(J2EEで動作するアプリケーションサーバと連携する場合)

トランザクション要求種別トランザクション情報の管理トランザクションの状態変更(正常ケース)
開始終了ファイルのI/O
Start()なし → Active
Call()変化しない
End()Active → Idle
Prepare()Idle → Prepared
Idle → なし※1
Commit()Prepared → なし※2
Idle → なし※3
Rollback()Prepared → なし※2
Idle → なし※3
Recover()変化しない
Forget()Heuristically Completed → なし
(凡例)
○:処理を実行します。
-:処理を実行しません。
注※1
トランザクションブランチがread onlyの場合
注※2
2相コミット,またはロールバックの場合
注※3
1相コミット,またはロールバックの場合

.NET Frameworkアプリケーションと連携する場合のトランザクション情報の管理を次の表に示します。

表3-32 トランザクション情報の管理(.NET Frameworkアプリケーションと連携する場合)

トランザクション要求種別トランザクション情報の管理トランザクションの状態変更
(正常ケース)
開始終了ファイルのI/O
Call()なし → Active※1
変化しない
Prepare()Active → Idle → Prepared
Active → Idle → なし※2
Commit()Prepared → なし※3
Active → Idle → なし※4
Rollback()Prepared → なし※3
Active → Idle → なし※4
Recover()変化しない
Forget()Heuristically Completed → なし
(凡例)
○:処理を実行します。
-:処理を実行しません。
注※1
トランザクション内で最初のCall()要求の場合
注※2
トランザクションブランチがread onlyの場合
注※3
2相コミット,またはロールバックの場合
注※4
1相コミット,またはロールバックの場合

(3) XARファイルの運用

XAリソースサービスは,必要に応じてトランザクション情報をXARファイルに格納します。XARファイルは,XAリソースサービスの正常開始処理で初期化されます。

(a) XARファイルの作成

XARファイルはxarinitコマンドで作成し,xarrmコマンドで削除します。また,XARファイルのファイル情報はxarfillsコマンドで確認します。

XARファイルには,オンライン用XARファイルとバックアップ用XARファイルの二つが必要です。オンライン用XARファイルとバックアップ用XARファイルは,同一のレコード長およびレコード数にしてください。また,I/Oできるファイルにしてください。

通常はオンライン用XARファイルを使用し,オンライン用XARファイルに障害が発生した場合,バックアップ用XARファイルに自動的にスワップします。障害発生を考慮して,オンライン用XARファイルとバックアップ用XARファイルは異なるディスクボリュームに格納してください。

XARファイルは,一つのトランザクションブランチに対して1レコードを使用します。そのため,XARファイルには,同時に起動するトランザクションブランチ数(トランザクションサービス定義のtrn_tran_process_countオペランドの値)以上のレコードが必要です。

(b) XARファイルの指定

XAリソースサービス定義の定義コマンドxarfileでXARファイルを指定します。指定する前に,上記の条件に合うXARファイルをあらかじめ作成しておいてください。存在しないファイルをXARファイルに指定した場合,エラーになります。また,トランザクションサービス定義のtrn_tran_process_countオペランドの値よりもレコード数が少ないXARファイルを指定した場合もエラーになります。

定義コマンドxarfileの-t onlineオプションでオンライン用XARファイルを,-t backupオプションでバックアップ用XARファイルを指定します。必ず両方のXARファイルを指定してください。

(c) 注意事項

XARファイルの二重化機能はサポートしていません。また,次の状態ではXAリソースサービスはトランザクション情報を管理できません。

XAリソースサービスは,オンライン用XARファイルとバックアップ用XARファイルの両方に障害が発生した場合に閉塞します。閉塞を解除するには,xarrlesコマンドを実行してください。詳細については,「3.15.4 XARファイルに障害が発生した場合の運用」を参照してください。

XAリソースサービスが管理するトランザクションの状態を表示するには,xarlsコマンドを実行してください。未決着のトランザクションを決着させるには,xarforceコマンドを実行してください。