Hitachi

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


ee_scd_msg_receive【XTC限定】

〈このページの構成〉

名称

滞留メッセージの受信

形式

ANSI C,C++の形式

#include <eescd.h>
int  ee_scd_msg_receive(char **in,EEULONG *in_len,char **msg_inf,
                        EEULONG *msg_no, EELONG flags)

機能

入力キュー(ITQ)に滞留しているメッセージを受信します。

UAPで値を設定する引数

●in

入力メッセージ引き渡しエリアのアドレスを格納する領域アドレスです。

●in_len

入力メッセージ長を格納する領域アドレスです。

●msg_no

メッセージ通番を格納する領域アドレスです。

●flags

EENOFLAGSを設定します。

TP1/EEから値が返される引数

●in

入力メッセージ引き渡しエリアのアドレスが返されます。

●in_len

入力メッセージ長が返されます。

●msg_no

受信したメッセージのメッセージ通番が返されます。

●msg_inf

入力メッセージ情報が返されます。

ただし,受信メッセージがMCPメッセージの場合だけアドレスが返されます。

メッセージ情報を参照する場合はTRNINF_SERVICE_MCPにキャストしてください。

また,トランザクション起動時に通知するTRNINF_SERVICE_MCPの領域を使用するため,以前の情報は参照できなくなります。

リターン値

リターン値

意味

EE_OK

正常に終了しました。

EECOMER_CNDBPP

オフラインバッチプロセスから発行しているため,この機能は使用できません。

EECOMER_CNDUOC

UOCから発行しているため,この機能は使用できません。

EECOMER_ENVIRON

TP1/EEの環境下にありません。

EESCDER_ARGUMENT

引数に設定した値が間違っています。

EESCDER_CONDITION

発行条件が不正です(プロセス関連定義のxtc_useオペランドにNを指定してこの関数を発行)。

EESCDER_INVALID_MESSAGE

トランザクション起動時のメッセージが滞留メッセージ読み出し対象メッセージではありません。

EESCDER_INVALID_TRNTYPE

この関数を発行できるサービスではありません(サービス属性定義でservice_attr -e serialを指定していないサービスでこの関数を発行)。または,トランザクション種別がMNまたはTMではありません。

EESCDER_NO_DATA

滞留メッセージはありません。※1

EESCDER_NO_MESSAGE

滞留メッセージ中に同種のメッセージがありません。

EESCDER_OVERFLOW

入力メッセージ引き渡しエリア(IMA)がオーバフローしました。※2

EESCDER_TIMING

スキップ処理中のため読み出せません。

EESCDER_TRN_CHANGE

中間同期点処理を行ったため,滞留メッセージの受信はできません。

EESCDER_UPPER_LIMIT

読み出し上限を超えました。

注※1

受信処理中の入力キュー(優先/通常)には滞留メッセージがない場合に設定されます。優先メッセージキューの受信処理中に優先メッセージをすべて受信処理した場合,通常メッセージキューに滞留メッセージがあってもEESCDER_NO_DATAとなります。

注※2

メッセージ格納領域に格納できるサイズ分のメッセージは格納されています。

in_lenには格納されているメッセージサイズが設定されています。

注意事項

  1. 滞留メッセージを受信できるのは,次のメッセージ種別がトランザクション起動時に渡されたメッセージ種別と同じメッセージの場合です。

    なお,タイマトランザクションの場合は,永続タイマと非永続タイマは同じメッセージ種別とは見なされません。

  2. トランザクション起動時に渡されたメッセージ種別がRPC受信メッセージであり,かつ応答型RPCまたはトランザクショナルRPCの場合は,滞留しているメッセージを受信できません。

    また,リモートAPI機能(RAP)で送信されたメッセージも受信できません。

  3. トランザクション起動時に引き出したキュー(優先キューまたは通常キュー)に滞留しているメッセージだけ受信できます。

    例えば最初に引き出したキューが優先キューの場合,通常キューにメッセージが滞留していてもこの関数では受信できません。

  4. 入力メッセージ引き渡しエリアおよび入力メッセージサイズ格納領域はトランザクション起動時に使用した領域を再使用します。この関数発行後に前のメッセージおよびメッセージサイズを参照する場合は領域の内容を退避したあと,この関数を発行してください。

  5. トランザクション起動時のトランザクション種別がMNまたはTMの場合だけ,この関数を発行できます。

  6. 該当サービスの同時引き出しの可否(service_attr -e)にserialを指定した場合だけ,この関数を発行できます。

  7. 滞留メッセージを受信できる最大数は,トランザクション起動時に滞留していたメッセージ数です。

  8. 中間同期点処理(ee_trn_chained_rollback関数発行)を行ったあとは,この関数を発行できません。