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のリターン値でエラーリターンします。
注意事項
-
設定するサービスグループ名およびサービス名は,サーバUAPの環境設定で指定しておいてください。
-
メッセージ送信時にエラーが発生した場合,高速メッセージ送信関連定義のmch_send_retry_countオペランドに従い,再送信します。再送信がエラーとなった場合は,ERRTRNSにメッセージを引き継ぐためにUDP用送信バッファ(実行系から待機系に転送されたメッセージのときはUDP用受信バッファ(UIBF))を確保し,ERRTRNSを起動します。
-
メッセージ送信は,自プロセスあてを含めUDP用送信バッファを使用します。
-
自プロセスあてのサービス要求によるサービス実行と他サービス要求(サービス要求受信やタイマトランザクション起動要求など)によるサービス実行との順序性は保証されません。
-
この関数を発行したトランザクションでは,トランザクションの最適化は行われません。
-
この関数は,トランザクションのコミット時に実行されます。したがって,トランザクションの同期点を取得する処理でエラーが起こった場合,この関数の処理は無効となります。