Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成の手引


3.6.5 同期型のメッセージ処理

MHPの処理の途中でメッセージの送信完了を確認したいときや,UAPのメッセージ送受信の処理をシステム間で同期を取りたいときに,同期型のメッセージを使います。同期型のメッセージ送受信では,送信または受信を要求して,その処理がすべて完了してから,UAPから呼び出した関数がリターンします。

〈この項の構成〉

(1) 同期型のメッセージの種類

同期型のメッセージ送受信には,送信,および受信をそれぞれ単独でする関数と,送受信を連続してする関数があります。

(2) 同期型のメッセージ処理の時間監視

同期型のメッセージ処理で,無制限に応答を待ち続けるのを避けるため,監視時間を設定できます。この監視時間は,関数の引数watchtimeに設定します。0を設定した場合は,MCFマネジャ定義のUAP共通定義で指定した同期送受信監視時間が仮定されます。UAP共通定義の監視時間に0が指定されていた場合は,無制限に応答を待ち続けます。

同期型のメッセージの処理時間は,トランザクションブランチの限界経過時間に含めるか含めないかを選択できます。この指定はユーザサービス定義,ユーザサービスデフォルト定義,トランザクションサービス定義のtrn_expiration_time_suspendで指定します。なお,非トランザクション属性のMHPの限界経過時間に含めることはできません。trn_expiration_time_suspendに指定する値とトランザクションの時間監視の詳細については,マニュアル「OpenTP1 システム定義」を参照してください。

注意事項

監視時間の精度は秒単位です。また,タイマ定義(mcfttim -t)のbtimオペランドで指定する時間監視間隔でタイムアウトが発生したかどうかを監視しています。このため,設定した監視時間と実際にタイムアウトを検出する時間には秒単位の誤差が生じます。そのため,タイミングによっては,設定した監視時間よりも短い時間でタイムアウトすることがあります。監視時間が小さくなるほど,誤差の影響を受けやすくなりますので,監視時間は3(単位:秒)以上の値の設定を推奨します。

(3) 同期型のメッセージ処理とロールバック

MHPがロールバックされた場合,同期型のメッセージは廃棄されません。ただし,dc_mcf_sendsync関数,またはdc_mcf_sendrecv関数で複数セグメントを送信した場合に,最終セグメント(EMI)を指定しないでreturn()を呼び出したときは,メッセージは廃棄されます。

同期型のメッセージ処理を次の図に示します。

図3‒10 同期型のメッセージ処理

[図データ]