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リソースサービスの運用
XAリソースサービスの運用を次の図に示します。
XAリソースサービスを使用する場合で次に示すときは,トランザクションが不正に残ることがあります。
-
rapリスナー,またはrapサーバを強制停止(dcsvstop -fコマンド実行)した場合
この場合,rapリスナーまたはrapサーバを開始(dcsvstartコマンド実行)してください。
-
リモートAPI機能で動作が保証されていない操作を行った場合
-
rapリスナーおよびrapサーバが正常終了していない状態で,rapdfgenコマンドで起動中のrapリスナー,およびrapサーバの定義を変更した場合
この場合の動作は保証できません。
(2) トランザクション情報の管理
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 → なし |
.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 → なし |
(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オペランドの値)以上のレコードが必要です。
-
J2EEで動作するアプリケーションサーバと連携する場合
XARファイルの1レコード情報は512バイトです。キャラクタ型スペシャルファイルを使用する場合,OpenTP1ファイルシステム構築時にfilmkfsコマンドの-sオプションで指定したセクタ長の単位でファイルのI/Oを行います。そのため,OpenTP1ファイルシステムのセクタ長に512バイトを指定することをお勧めします。ただし,OSによっては,セクタ長に指定できる値の最小値が512バイトよりも大きいものがあります(HP-UXの場合1,024バイト)。そのようなOSのOpenTP1ファイルシステムのセクタ長には,指定できる最小値を指定することをお勧めします。なお,指定値は512バイトの整数倍にしてください。UNIXファイルシステムを使用する場合,ファイルのI/Oの単位には512バイトが仮定されます。
-
.NET Frameworkアプリケーションと連携する場合
MSDTC連携機能を使用する場合,XARファイルのレコード長に1,024バイト以上を指定することをお勧めします。これは,RIのサイズがMSDTCが動作する環境に依存するため,環境によってはXARファイルのレコード長の不足が原因となってトランザクション決着処理に失敗することがあるためです。
XARファイルのレコード長(xarinitコマンドの-sオプションで指定)には,OpenTP1ファイルシステムのセクタ長の倍数を指定してください。XARファイルに格納できる最大RIサイズは,xarfillsコマンドまたはxarlsコマンドで確認できます。
XARファイルのレコード長の不足が原因となってトランザクションの決着処理に失敗した場合は,次に示す手順でXARファイルを再作成してください。
-
OpenTP1を停止します。
-
KFCA32045-Eメッセージの「必要なXARファイルのレコード長」に表示された値をxarinitコマンドの-sオプションに指定して,XARファイルを再作成します。
-
OpenTP1を正常開始します。
-
(b) XARファイルの指定
XAリソースサービス定義の定義コマンドxarfileでXARファイルを指定します。指定する前に,上記の条件に合うXARファイルをあらかじめ作成しておいてください。存在しないファイルをXARファイルに指定した場合,エラーになります。また,トランザクションサービス定義のtrn_tran_process_countオペランドの値よりもレコード数が少ないXARファイルを指定した場合もエラーになります。
定義コマンドxarfileの-t onlineオプションでオンライン用XARファイルを,-t backupオプションでバックアップ用XARファイルを指定します。必ず両方のXARファイルを指定してください。
(c) 注意事項
XARファイルの二重化機能はサポートしていません。また,次の状態ではXAリソースサービスはトランザクション情報を管理できません。
-
OpenTP1が未起動
-
リモートAPI機能が未起動
-
XAリソースサービスが未起動
-
XAリソースサービスが閉塞
XAリソースサービスは,オンライン用XARファイルとバックアップ用XARファイルの両方に障害が発生した場合に閉塞します。閉塞を解除するには,xarrlesコマンドを実行してください。詳細については,「3.15.4 XARファイルに障害が発生した場合の運用」を参照してください。
XAリソースサービスが管理するトランザクションの状態を表示するには,xarlsコマンドを実行してください。未決着のトランザクションを決着させるには,xarforceコマンドを実行してください。