Hitachi

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


ee_mch_cmtsend【XTC限定】

〈このページの構成〉

名称

トランザクション非同期の一方送信メッセージの送信

形式

ANSI C,C++の形式

#include <eemch.h>
int ee_mch_cmtsend(char *group, char *service,
                   char *in, EEULONG *in_len,
                   EEULONG priority, EELONG flags)

機能

トランザクションのコミットが確定したとき,出力キュー(OTQ)の通番を採番して出力キューにメッセージを格納します。その後,送信用のスレッドを使用して出力キューの通番順に一方送信メッセージをUDPプロトコルで送信します。これによって,SPPに対してサービスを要求します。トランザクションがロールバックとなった場合,メッセージは破棄されます。

サービスを要求するときには,「サービスグループ名」および「サービス名」を引数に設定します。この名称に該当するサービス関数へサービスが要求されます。

この関数を使う場合,サーバUAPがあるノードのTP1/EEが稼働していることが前提です。

UAPで値を設定する引数

●group

SPPのサービスグループ名を,31バイト以内のアスキー文字列で設定します。

文字列の最後にはNULL文字を設定してください。このNULL文字は文字列の長さに数えません。

●service

SPPのサービス名を,31バイト以内のアスキー文字列で設定します。文字列の最後にはNULL文字を設定してください。このNULL文字は文字列の長さに数えません。

●in

サービスの入力パラメタを設定します。

●in_len

サービスの入力パラメタ長を設定します。1〜EEMCH_MAX_MESSAGE_SIZEの範囲の値を設定できます。EEMCH_MAX_MESSAGE_SIZEは,eemch.hで定義してあります。

注※

EEMCH_MAX_MESSAGE_SIZEの値は,将来拡張される場合があります。

●priority

メッセージ送信先で登録された処理キューの中で優先的に起動するかどうかを設定します。

EEMCH_HI

優先的に起動します。

EEMCH_LOW

優先的に起動しないで,登録した順序で起動します。

●flags

メッセージ送信形態とオプションを次に示す形式で設定します。

{EENOFLAGS|EEMCH_MULTI_CL|EEMCH_MYPROC}〔|EEMCH_PERMANENCE〕
EENOFLAGS

ユニキャストで一方送信メッセージを送信する場合に設定します。

EEMCH_MULTI_CL

マルチキャストでCLサーバに一方送信メッセージを送信する場合に設定します。

EEMCH_MYPROC

自プロセスあてに一方送信メッセージを送信する場合に設定します。

EEMCH_PERMANENCE

メッセージを永続属性とする場合に設定します。

リターン値

リターン値

意味

EE_OK

正常に終了しました。

EECOMER_CNDBPP

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

EECOMER_CNDUOC

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

EECOMER_ENVIRON

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

EEMCHER_CONDITION

発行条件が不正です。

EEMCHER_MEMORY_SHORT

メモリが不足しました。

EEMCHER_MESSAGE_TOO_BIG

in_lenに設定した入力パラメタ長が,最大値を超えています。

EEMCHER_NO_SUCH_SERVICE

serviceに設定したサービス名は,定義されていません。

EEMCHER_NO_SUCH_SERVICE_GROUP

groupに設定したサービスグループ名は,定義されていません。

EEMCHER_OTQ_SHUT_DOWN

出力キュー(OTQ)が閉塞中,または閉塞解除処理中です。

EEMCHER_PARAM_FLAGS

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

EEMCHER_PARAM_GROUP

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

EEMCHER_PARAM_IN

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

EEMCHER_PARAM_IN_LEN

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

EEMCHER_PARAM_PRIORITY

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

EEMCHER_PARAM_SERVICE

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

EEMCHER_SYSERR

システムエラーが起こりました。

ee_mch_cmtsend関数がエラーになる場合

ee_mch_cmtsend関数がエラーリターンする場合について説明します。

プロセス関連定義のxtc_useオペランドにYを指定していない場合,送信先サービス関連定義を指定していない場合,トランザクション処理でないUAPから要求された場合,終了処理中に要求された場合,初期化トランザクション(MI)もしくは終了トランザクション(ME)から要求された場合,またはee_trn_rollback_mark関数が発行済みである場合

ee_mch_cmtsend関数はEEMCHER_CONDITIONのリターン値でエラーリターンします。

flagsにEEMCH_MYPROCを設定して自プロセス送信を行う場合で,送信先サービス関連定義に自サービス名(自サービスグループ名)が設定されていないとき

ee_mch_cmtsend関数はEEMCHER_NO_SUCH_SERVICE(EEMCHER_NO_SUCH_SERVICE_GROUP)のリターン値でエラーリターンします。

メモリ関連定義のudp_send_message_buf_cntオペランドで指定したUDP用送信バッファ面数(UOBF)が不足した場合,またはflagsにEEMCH_MYPROCを設定して自プロセス送信を行う場合にメモリ関連定義のpce_noオペランドで指定する処理キュー数が不足したとき

ee_mch_cmtsend関数はEEMCHER_MEMORY_SHORTのリターン値でエラーリターンします。

注意事項

  1. 設定するサービスグループ名およびサービス名は,サーバUAPの環境設定で指定しておいてください。

  2. メッセージ送信時にエラーが発生した場合,高速メッセージ送信関連定義のmch_send_retry_countオペランドに従い,再送信します。再送信がエラーとなった場合は,ERRTRNSにメッセージを引き継ぐためにUDP用送信バッファ(実行系から待機系に転送されたメッセージのときはUDP用受信バッファ(UIBF))を確保し,ERRTRNSを起動します。

  3. メッセージ送信は,自プロセスあてを含めUDP用送信バッファを使用します。

  4. 自プロセスあてのサービス要求によるサービス実行と他サービス要求(サービス要求受信やタイマトランザクション起動要求など)によるサービス実行との順序性は保証されません。

  5. この関数を発行したトランザクションでは,トランザクションの最適化は行われません。

  6. この関数は,トランザクションのコミット時に実行されます。したがって,トランザクションの同期点を取得する処理でエラーが起こった場合,この関数の処理は無効となります。