Hitachi

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


CBLEEMCH('CMTSND ')【XTC限定】

〈このページの構成〉

名称

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

形式

PROCEDURE DIVISIONの指定

CALL 'CBLEEMCH' USING 一意名1 一意名2

DATA DIVISIONの指定

01 一意名1.
  02 データ名A  PIC X(8) VALUE 'CMTSND  '.
  02 データ名B  PIC X(5).
  02 FILLER      PIC X(3).
  02 データ名C  PIC S9(9) COMP.
  02 データ名D  PIC X(4).
  02 データ名E  PIC X(32).
  02 データ名F  PIC X(32).
01 一意名2.
  02 データ名G  PIC 9(9) COMP.
  02 データ名H  PIC X(n).

機能

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

サービスを要求するときには,「サービスグループ名」と「サービス名」をデータ領域に設定します。この名称に該当するサービスプログラムへサービスが要求されます。

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

UAPで値を設定するデータ領域

●データ名A

サービスの要求を示す要求コードを「VALUE 'CMTSND△△'」と設定します。

●データ名C

メッセージ送信形態とオプションを数値で設定します。

0

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

1

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

65536

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

一方送信メッセージを永続属性とする場合は,「16」を加算してください。

●データ名D

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

VALUE 'HI△△'

優先的に起動します。

VALUE 'LOW△'

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

●データ名E

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

●データ名F

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

●データ名G

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

注※

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

●データ名H

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

TP1/EEから値が返されるデータ領域

●データ名B

ステータスコードが,5けたの数字で返されます。

ステータスコード

ここで示すステータスコードは,TP1/EEが返す値です。サービスプログラムが返す値ではありません。

ステータスコード

意味

00000

正常に終了しました。

00001

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

00004

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

00005

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

08001

要求コード(データ名A)が間違っています。

08002

データ名Fに設定した値が間違っています。

08003

データ名Eに設定した値が間違っています。

08004

データ名Gに設定した値が間違っています。

08005

データ名Dに設定した値が間違っています。

08006

データ名Cに設定した値が間違っています。

08008

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

08010

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

08011

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

08030

発行条件が不正です。

08040

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

08050

メモリが不足しました。

08099

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

CBLEEMCH('CMTSND ')がエラーになる場合

CBLEEMCH('CMTSND ')がエラーリターンする場合について説明します。

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

CBLEEMCH('CMTSND ')は「08030」でエラーリターンします。

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

CBLEEMCH('CMTSND ')は「08010」(「08011」)でエラーリターンします。

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

CBLEEMCH('CMTSND ')は「08050」でエラーリターンします。

注意事項

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

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

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

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

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

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