Hitachi

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


ee_mch_cmtsend_sync【XTC限定】

〈このページの構成〉

名称

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

形式

ANSI C,C++の形式

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

機能

トランザクションのコミットが確定したとき,トランザクション処理と同じスレッドから一方送信メッセージを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_sync関数がエラーになる場合

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

クラスタ連携関連定義のcluster_modeオペランドにYを指定している場合

ee_mch_cmtsend_sync関数はEEMCHER_CONDITIONのリターン値でエラーリターンします。その他の理由については,ee_mch_cmtsend関数の説明を参照してください。

注意事項

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

  2. メッセージ送信時にエラーが発生した場合,高速メッセージ送信関連定義のmch_send_retry_countオペランドに従い,再送信します。再送信がエラーとなった場合は,ERRTRNSを起動してメッセージを破棄します。ただし,要求元のトランザクションがエラートランザクションの場合,ERRTRNSは起動されません。

    注※

    高速メッセージ送信関連定義のmch_send_err_rollbackオペランドでYを指定した場合は,ERRTRNRが起動されます。ただし,要求元のトランザクション種別がMNまたはTM以外の場合,ERRTRNRは起動されません。

  3. CLサーバでは使用できません。

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

  5. 高速メッセージ送信関連定義のmch_send_err_rollbackオペランドでYを指定した場合は,自プロセスあて用のUDP用送信バッファは2倍必要です。

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

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