Hitachi

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


CBLEEDBQ('MSGPUT ')

〈このページの構成〉

名称

メッセージの書き込み

形式

PROCEDURE DIVISIONの指定

CALL 'CBLEEDBQ' USING 一意名1 一意名2 一意名3 一意名4

DATA DIVISIONの指定

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

機能

送信メッセージをDBキューへ書き込みます。

DBキューに書き込むためのSQLの実行は,トランザクションの同期点処理内で行います。1トランザクションで複数のDBキューに対してこの関数を実行した場合は,API関数の実行順序に関係なく,DBキュー名の昇順にSQLを実行します。そのため,複数のDBキューに対してこの関数を実行するトランザクション間でこの関数の実行順序が異なっても,実行順序が原因でデッドロックすることはありません。

同一グローバルトランザクションのトランザクションブランチ間でこのAPI関数を実行すると,デッドロックが発生する場合があります。詳細は「注意事項」を参照してください。

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

●データ名A

メッセージの書き込みを示す要求コードを「VALUE 'MSGPUT△△'」と設定します。

●データ名C

要求種別を設定します。

0

データ名DにDBキュー名を設定してメッセージを書き込みます。

1

データ名DにDBキューグループ名を設定してメッセージを書き込みます。

●データ名D

DBキュー名またはDBキューグループ名を設定します。

  • データ名Cに0を設定する場合,DBキュー名を27バイト以内のアスキー文字列で設定します。

  • データ名Cに1を設定する場合,DBキューグループ名を31バイト以内のアスキー文字列で設定します。

文字列の末尾には空白を付けてください。この空白は文字列の長さに数えません。

●データ名E

メッセージを格納する領域の長さを設定します(単位:バイト)。1〜メモリ関連定義のdbq_max_message_sizeオペランドの値の範囲の値を指定できます。

●データ名F

メッセージを格納する領域のアドレスを設定します。

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

●データ名B

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

ステータスコード

ステータスコード

意味

00000

正常に終了しました。

00001

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

00004

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

00005

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

05601

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

05602

DBキュー機能は使用できません。

05604

要求されたDBキューは存在しません。

05605

該当するスレッドではリソースマネジャに接続されていません。

05606

バッファ長が指定範囲外です。

05607

DBキューが使用できない状態です。次のどれかの状態となっています。

  • DB構成不正による使用不可

  • リソースマネジャ未接続で使用不可

05608

メモリが不足しました。

05621

関数の呼び出し条件が不正です。

05623

DBキュー機能のライブラリがリンケージされていません。

05624

要求されたDBキューグループは存在しません。

05625

要求されたDBキューグループ内のすべてのDBキューが次のどれかの状態のため,要求を受け付けられません。

  • DB構成不正またはDBキューの内容矛盾による使用不可

  • リソースマネジャ未接続で使用不可

  • 縮退中

  • 書き込み禁止状態

05629

DBキューが書き込み禁止状態です。

注意事項

  1. DBキューサービス(ルートトランザクションブランチ)から呼び出された同一グローバルトランザクションのトランザクションブランチで,同一DBキューに対してメッセージを書き込むと,デッドロックが発生する場合があります。

  2. 同一グローバルトランザクション内のトランザクションブランチ間で,同一DBキューに対してメッセージを書き込んだりスキップしたりすると,デッドロックが発生する場合があります。

  3. eedbqwtprコマンドで書き込みを抑止しているDBキューに対して,CBLEEDBQ('MSGPUT ')でDBキューまたはDBキューグループを指定してメッセージの書き込み要求を行った場合,CBLEEDBQ('MSGPUT ')は正常に終了し,メッセージ書き込み要求を行ったトランザクションをロールバックしてからエラートランザクション(ERRTRNR)を起動します。ただし,CBLEETRN('C-COMMIT')を呼び出して連鎖モードのコミット要求をした場合,CBLEETRN('C-COMMIT')はエラーリターンし,エラートランザクション(ERRTRNR)を起動しません。

    また,DBキューグループを指定してメッセージの書き込み要求を行った場合は,eedbqwtprコマンドで書き込みを抑止しているDBキューに対してeedbqisltコマンドを実行して縮退させることによって,DBキューグループ指定の対象外とする必要があります。

  4. 【TP1/FSP限定】交替用メッセージ表書き込み機能使用時に,この関数実行後の同期点処理(UAPリターン,CBLEETRN('C-COMMIT')関数実行)のメッセージ表へのアクセスで障害が発生すると,トランザクションがロールバックする場合があります。