Hitachi

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


3.6.6 継続問い合わせ応答の処理

問い合わせ応答の処理を連続させることで,端末とUAPが交互にメッセージをやり取りする形態です。継続問い合わせ応答は,アプリケーションの型が継続問い合わせ応答型(cont型)のMHPでだけできます。

〈この項の構成〉

(1) 継続問い合わせ応答の処理概要

継続問い合わせ応答をするMHPでは,dc_mcf_receive関数を呼び出して,端末からのメッセージを受信します。処理後dc_mcf_reply関数で応答を返します。応答を返す場合,継続して処理するMHPを変更するときは,dc_mcf_reply関数に変更後のアプリケーション名を設定します。設定しないと,前回と同じMHPが起動されます。

さらに,継続問い合わせ応答処理中のMHPから,dc_mcf_execap関数でアプリケーション起動できます。ただし,即時起動だけできます。この場合,dc_mcf_execap関数で起動できるcont型のMHPは一つだけです。また,cont型のアプリケーションを起動したMHPでは,継続応答権が移動しているので,dc_mcf_reply関数は呼び出せません。また,dc_mcf_contend関数も呼び出せません。

継続問い合わせ応答の処理中でも,端末への一方送信メッセージ(dc_mcf_send関数)は送信できます。

(2) 一時記憶データへのアクセス

継続問い合わせ応答では,続けて起動するMHPへ処理を引き継ぐ情報として,一時記憶データを使えます。一時記憶データは論理端末対応に使えるので,複数の論理端末で,同時に一つのMHPを使って継続問い合わせ応答もできます。

一時記憶データ用の領域として更新用領域と回復用領域を共有メモリに確保します。一時記憶データ格納用領域の長さは,MHPごとに,MCFアプリケーション定義で指定します。

一時記憶データは,継続問い合わせ応答の場合にだけ使えます。そのほかのメッセージ通信形態では使えません。

(a) 一時記憶データの受け取り

MHPから一時記憶データを使う場合は,dc_mcf_tempget関数【CBLDCMCF('TEMPGET ')】を呼び出します。一時記憶データ格納用領域が初期状態である場合や,一時記憶データがないときは,MCFアプリケーション属性定義のtempsizeで指定した長さの(00)16があるものと見なして,dc_mcf_tempget関数が実行されます。

dc_mcf_tempget関数に指定した受け取り領域長が,一時記憶データ長よりも小さい場合は,指定した長さ分だけ受け取って,超えた部分は切り捨てます。dc_mcf_tempget関数に指定した受け取り領域長が,一時記憶データ長よりも大きい場合は,一時記憶データだけを,受け取り領域に格納します。

(b) 一時記憶データの更新

一時記憶データを更新する場合は,dc_mcf_tempput関数【CBLDCMCF('TEMPPUT ')】を呼び出します。一時記憶データ格納用領域を更新すると,データそのものが入れ替わります。更新データ長は,MCFアプリケーション定義で指定した値を超える値は設定できません。

dc_mcf_tempput関数を呼び出す前には,dc_mcf_tempget関数を必ず呼び出しておきます。呼び出していない場合は,dc_mcf_tempput関数はエラーリターンします。

(3) 継続問い合わせ応答の終了

継続問い合わせ応答は,次のどれかの事象が実行されると終了します。継続問い合わせ応答処理が終了すると,それまで使っていた一時記憶データ格納用領域は削除されます。

継続問い合わせ応答処理をしたMHPで,dc_mcf_reply関数を呼び出さないで終了しても,異常終了します。

(4) UAPの異常終了によるエラーイベント発生時の処置

継続問い合わせ応答処理中にUAPが異常終了した場合は,ERREVT3が通知されます。このERREVT3を処理するMCFイベント処理用MHPで,次に起動するアプリケーション名を設定したdc_mcf_reply関数を呼び出していれば,継続問い合わせ応答の処理を続けられます。呼び出していない場合は,継続問い合わせ応答の処理は終了します。

継続問い合わせ応答の概要を次の図に示します。

図3‒11 継続問い合わせ応答の概要

[図データ]