3.6.5 同期型のメッセージ処理
MHPの処理の途中でメッセージの送信完了を確認したいときや,UAPのメッセージ送受信の処理をシステム間で同期を取りたいときに,同期型のメッセージを使います。同期型のメッセージ送受信では,送信または受信を要求して,その処理がすべて完了してから,UAPから呼び出した関数がリターンします。
(1) 同期型のメッセージの種類
同期型のメッセージ送受信には,送信,および受信をそれぞれ単独でする関数と,送受信を連続してする関数があります。
-
同期型のメッセージ送信をするときはdc_mcf_sendsync関数【CBLDCMCF('SENDSYNC')】を使います。UAPがdc_mcf_sendsync関数を呼び出すと,MCFはメッセージを出力用のバッファ(メモリ上の出力キュー)に書き込んで,相手システムへ送信します。相手システムへのメッセージ送信が完了したことをMCFで確認したあと,dc_mcf_sendsync関数はリターンします。
-
相手システムからのメッセージを受信すると,MCFはメッセージを入力用のバッファに格納します。MHPでは,このメッセージを受け取るためにdc_mcf_recvsync関数【CBLDCMCF('RECVSYNC')】を呼び出します。
相手システムからのメッセージを受信していた場合は,dc_mcf_recvsync関数にメッセージを渡します。相手システムからのメッセージをまだ受信していない場合は,受信するまでdc_mcf_recvsync関数は待ち続けます。相手システムからメッセージを受信した時点で,dc_mcf_recvsync関数にメッセージを渡します。
-
同期型のメッセージの送信と受信を一つの関数でする形態です。MHPは,dc_mcf_sendrecv関数【CBLDCMCF('SENDRECV')】でMCFにメッセージの送信要求をします。MCFはメッセージを出力キューに書き込んで,相手システムへ送信します。送信処理が完了したあとも,dc_mcf_sendrecv関数はリターンしないで,引き続き受信処理をします。受信までの処理が完了した時点でdc_mcf_sendrecv関数はリターンします。
(2) 同期型のメッセージ処理の時間監視
同期型のメッセージ処理で,無制限に応答を待ち続けるのを避けるため,監視時間を設定できます。この監視時間は,関数の引数watchtimeに設定します。0を設定した場合は,MCFマネジャ定義のUAP共通定義で指定した同期送受信監視時間が仮定されます。UAP共通定義の監視時間に0が指定されていた場合は,無制限に応答を待ち続けます。
同期型のメッセージの処理時間は,トランザクションブランチの限界経過時間に含めるか含めないかを選択できます。この指定はユーザサービス定義,ユーザサービスデフォルト定義,トランザクションサービス定義のtrn_expiration_time_suspendで指定します。なお,非トランザクション属性のMHPの限界経過時間に含めることはできません。trn_expiration_time_suspendに指定する値とトランザクションの時間監視の詳細については,マニュアル「OpenTP1 システム定義」を参照してください。
- 注意事項
-
監視時間の精度は秒単位です。また,タイマ定義(mcfttim -t)のbtimオペランドで指定する時間監視間隔でタイムアウトが発生したかどうかを監視しています。このため,設定した監視時間と実際にタイムアウトを検出する時間には秒単位の誤差が生じます。そのため,タイミングによっては,設定した監視時間よりも短い時間でタイムアウトすることがあります。監視時間が小さくなるほど,誤差の影響を受けやすくなりますので,監視時間は3(単位:秒)以上の値の設定を推奨します。