Hitachi

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


ee_dbq_msgput

〈このページの構成〉

名称

メッセージの書き込み

形式

ANSI C,C++の形式

#include <eedbq.h>
int ee_dbq_msgput(char *dbque_name, char *msg_pt, EEULONG msg_len,
                  EELONG flags)

機能

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

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

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

UAPで値を設定する引数

●dbque_name

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

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

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

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

●msg_pt

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

●msg_len

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

●flags

次のフラグを設定します。

EEDBQ_MSGPUT_FLAGS_DBQGRP

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

EENOFLAGS

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

リターン値

リターン値

意味

EE_OK

正常に終了しました。

EECOMER_CNDBPP

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

EECOMER_CNDUOC

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

EECOMER_ENVIRON

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

EEDBQER_ARGUMENT

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

EEDBQER_BUF_LEN

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

EEDBQER_CONDITION

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

EEDBQER_DBQGRP_ALLSTOP

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

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

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

  • 縮退中

  • 書き込み禁止状態

EEDBQER_MEMORY_SHORT

メモリが不足しました。

EEDBQER_NO_DBQGRP

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

EEDBQER_NO_DBQUE

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

EEDBQER_NO_LIBRARY

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

EEDBQER_NO_OPTION

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

EEDBQER_RM_CONNECT

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

EEDBQER_STOP

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

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

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

EEDBQER_WRITE_INHIBIT

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

注意事項

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

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

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

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

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