Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 TP1/EE/Message Control Extension 使用の手引


1.2.3 同期型メッセージ

〈この項の構成〉

(1) 機能概要

同期型メッセージ送受信は,自システムからのメッセージ送信と,相手システムからの応答メッセージの受信を連続で行う形態です。この形態は,自システムのUAPと相手システムとの間でメッセージの同期合わせ,順序管理をする場合に使用します。一つのトランザクションで複数のメッセージを送信した場合は,メッセージの送信要求のたびに相手システムへメッセージが送信されます。つまり,トランザクションのコミット,ロールバックに関係なく送信要求のたびに相手システムへメッセージを送信します。

同期型メッセージの送受信機能は,TCP/IPプロトコルで使用できます。UDPプロトコルでは,同期型メッセージの送受信機能は使用できません。

UAPは,API(ee_mcp_sendrecv関数またはCBLEEMCP('SENDRECV'))を発行してMCPにメッセージの送受信を要求します。MCPは受け取ったメッセージを編集したあと,相手システムに送信処理をします。送信処理が完了したあとは,UAPにリターンしないで,引き続き受信待ち状態となります。相手システムからのメッセージを受信すると,MCPはメッセージを編集して,UAPに引き渡します。

同期型メッセージ送受信でメッセージを送受信する場合の処理の流れを次の図に示します。

図1‒5 同期型メッセージ送受信の処理の流れ

[図データ]

(2) メッセージのすれ違い

(a) 送受信要求前に相手システムからの一方送信メッセージを受信

同期送受信の送信要求時,同一コネクションですでに相手システムからの一方送信メッセージを受信し組立中の場合,同期送受信関数はエラーリターンします。

図1‒6 送信要求前に相手システムからの一方送信メッセージを受信

[図データ]

(b) 送信処理中に相手システムからの一方送信メッセージを受信

同一コネクションで,自システムからの同期送受信要求に対するメッセージ受信と,相手システムからの一方送信メッセージがネットワーク上ですれ違うことがあります。

図1‒7 送信処理中に相手システムからの一方送信メッセージを受信

[図データ]

表1‒1 受信メッセージすれ違い時のMCPの動作

図中の番号

受信したメッセージの種別

MCPの動作

1.

同期送受信の送信要求時,ネットワーク上のメッセージすれ違いで,相手システムからの一方送信メッセージを受信。

相手からの一方送信メッセージを,応答メッセージとして受信します。

2.

図中の1で示す相手システムからの一方送信メッセージ受信後,同期送受信の送信に対する応答メッセージを受信。

同期送受信の応答メッセージを,相手システムからの一方送信メッセージとして受信します。

(3) 送信処理中の論理端末に対するメッセージ送信

複数のサービスで同一の論理端末にメッセージを送信した場合,先頭のメッセージによって論理端末が送信処理中になるおそれがあります。

(a) 同期型メッセージ送受信処理中の論理端末に対する一方メッセージ送信

同期型メッセージ送受信は,メッセージの送信から応答メッセージの受信まで同じ論理端末を使用します。そのため先行した同期型メッセージの送受信が応答受信するまで,同一論理端末に対する後続の一方メッセージ送信を待ち合わせます。

図1‒8 送受信処理中の論理端末に対する一方メッセージ送信

[図データ]

(b) 送信中の論理端末に対する同期型メッセージ送受信

同期型メッセージ送受信中,または一方メッセージ送信中の論理端末に対して同期型メッセージの送受信関数を発行した場合,先行するメッセージの送受信処理が完了するまで待ち合わせて送信するか,または即時エラーリターンとするかは,同期型メッセージ送受信関数の引数で指定することができます。

図1‒9 送受信処理中の論理端末に対する同期型メッセージ送受信

[図データ]

(4) コネクションの切断抑止

同期型メッセージ送受信関数の発行時に指定した監視タイマ(引数:watchtimeで指定したメッセージ送受信完了待ち時間)がタイムアウトすると,コネクションは切断されます。

しかし,MCP構成定義の指定によって,コネクションの切断を抑止することができます。コネクションの切断抑止では,同期型メッセージ送受信関数がタイムアウトした場合,コネクションを切断しません。

コネクションの切断を抑止する場合,入力セグメント判定UOCで,セグメント未完成のときに後続メッセージ監視タイマの設定を行わないでください(UOCのパラメタ:eemcp_uoctimer_infのtimer_codeにEEMCP_TIME_NO_SETを指定してください)。後続メッセージ監視タイマでタイマ監視を行うと,監視タイマがタイムアウトしたときにコネクションは切断されます。

(5) 時間監視

(a) メッセージ送受信完了監視タイマ(TCP/IPプロトコル使用時)

同期型メッセージ送受信関数を発行してから,応答メッセージを受信するまでのタイマ監視を行います。

他スレッドで同一論理端末にメッセージを送信中の場合,メッセージ送受信の待ち合わせを行いますが,この待ち合わせ時間も送信ビジーとしてタイマ監視時間に含みます。

メッセージの送受信完了待ちをする場合の処理の流れを次の図に示します。

図1‒10 メッセージ送受信完了監視タイマ(TCP/IP)

[図データ]

項目

MCP構成定義(eemcpcn -w)の指定による動作

srtimoutオペランドにyesを指定(コネクションの切断を抑止する)

srtimoutオペランドにnoを指定(コネクションの切断を抑止しない)

コネクション

コネクションを切断しません。

コネクションを切断します。

RL(MCP後処理トランザクション)

起動しません。

起動します。

次に示す内容を通知します。

  • reason

EEMCP_RSN_SRTO

リターン値

EEMCPER_TIME(監視タイマタイムアウト)が返されます。

ステータスコード

10007(監視タイマタイムアウト)が返されます。