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キューが次のどれかの状態のため,要求を受け付けられません。
|
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キューが使用できない状態です。次のどちらかの状態となっています。
|
EEDBQER_WRITE_INHIBIT |
DBキューが書き込み禁止状態です。 |
注意事項
-
DBキューサービス(ルートトランザクションブランチ)から呼び出された同一グローバルトランザクションのトランザクションブランチで,同一DBキューに対してメッセージを書き込むと,デッドロックが発生する場合があります。
-
同一グローバルトランザクション内のトランザクションブランチ間で,同一DBキューに対してメッセージを書き込んだりスキップしたりすると,デッドロックが発生する場合があります。
-
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キューグループ指定の対象外とする必要があります。
-
【TP1/FSP限定】交替用メッセージ表書き込み機能使用時に,この関数実行後の同期点処理(UAPリターン,ee_trn_chained_commit関数実行)のメッセージ表へのアクセスで障害が発生すると,トランザクションがリトライロールバックする場合があります。