Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プロトコル TP1/NET/TCP/IP編


2.3.1 一方送信メッセージ

相手システムから一方送信メッセージを受信したり,自システムから一方送信メッセージを送信したりする形態です。UAP(SPP,MHP)のトランザクションの決着と連動してメッセージを送受信します。非トランザクションのMHPの場合は,サービスの終了と連動してメッセージを送受信します。論理端末の端末タイプはany,アプリケーションの型は非応答型です。なお,一方送信メッセージの送信は,応答型または継続問い合わせ応答型のアプリケーションでもできます。

UAPがAPI(dc_mcf_send関数またはCBLDCMCF('SEND△△△△'))で送信要求すると,メッセージが出力キューに登録されます。TP1/NET/TCP/IPは出力キューからメッセージを読み出し,出力メッセージ編集UOCで編集されたメッセージを相手システムに送信します。一方送信メッセージをTCP/IPの送信バッファに書き込み完了した時点で,送信完了として送信完了通知イベント(SCMPEVT)を通知します。ただし,SCMPEVTを通知するのは,MCFアプリケーション定義でSCMPEVTを定義して,かつ,UAPが送信完了通知イベントを要求していた場合だけです。その後,TP1/NET/TCP/IPは出力キューにある送信済みメッセージのデータを消去します。

また,相手システムからのメッセージを受信すると,TP1/NET/TCP/IPは入力メッセージ編集UOCで編集されたメッセージを入力キューに登録します。同時に,非応答型のアプリケーションに対応するUAP(MHP)を起動して,メッセージを引き渡します。

非応答型のアプリケーションからの問い合わせ応答をする(UAP共通定義(mcfmuap)の-cオプションのnoansreplyオペランドにyesを指定)場合,非応答型のアプリケーションからdc_mcf_reply関数またはCBLDCMCF('REPLY△△△')を発行して一方送信メッセージを送信できます。この一方送信メッセージは,出力通番を付けない一般の一方送信メッセージとして扱います。

出力キューまたは入力キューの割り当て先としてディスクキューを使用する場合,入力キューおよび出力キューに蓄えられた一方送信メッセージは,オンラインシステムが異常終了した場合などの再開始時に,引き継ぐことができます。

一方送信メッセージの受信と送信を,dc_mcf_send関数およびdc_mcf_receive関数を使用する場合を例に,次の図に示します。

図2‒30 一方送信メッセージの送信と受信

[図データ]

  1. UAPは一方送信メッセージの送信を要求します。

  2. TP1/NET/TCP/IPは一方送信メッセージを送信します。

  3. TP1/NET/TCP/IPは送信完了通知イベント(SCMPEVT)をMHPに通知します。

  4. 出力キューにある一方送信メッセージのデータを消去します。

  5. 相手システムからメッセージを受信します。

  6. TP1/NET/TCP/IPは相手システムからのメッセージを入力キューに書き込み,MHPを起動します。

  7. MHPはメッセージを受け取ります。

メッセージを送受信するときのデータの流れ,およびジャーナルの取得タイミングについては,「付録D メッセージ送受信の処理の流れ」を参照してください。

なお,TP1/NET/TCP/IPの通信プロセスが,一方送信メッセージの送信完了を認識する前に運用コマンド(mcftdctcn)を入力,またはAPI(dc_mcf_tdctcn関数もしくはCBLDCMCF('TDCTCN△△'))を発行した場合,TP1/NET/TCP/IPはコネクションを解放し,KFCA10608-Wを出力することがあります。このとき,論理端末は閉塞され,状態通知イベント(CCLSEVT)を通知します。