無制限に待ち合わせをします。無制限に待ち合わせ中に,アプリケーションまたは OpenTP1 が終了 した場合,MQGET 命令は MQRC_Q_MGR_STOPPING の理由コードで完了します。
このフィールドの初期値は 0 です。TP1/Message Queue では待ち合わせ最大時間の精度を MQA サー ビス定義の mqa_getwait_timeout オペランドで指定できます。指定を省略した場合,秒単位の精度で待 ち合わせます。
MQMD 構造体 − メッセージ記述子
MQMD 構造体は,次のフィールドから構成されます。
フィールド(データタイプ) 内容 初期値
StrucId(MQCHAR4 型) 構造体識別子 MQMD_STRUC_ID
Version(MQLONG 型) 構造体バージョン番号 MQMD_VERSION_1
Report(MQLONG 型) 報告メッセージオプション MQRO_NONE
MsgType(MQLONG 型) メッセージタイプ MQMT_DATAGRAM
Expiry(MQLONG 型) メッセージ保持時間 MQEI_UNLIMITED
Feedback(MQLONG 型) 報告メッセージ返答コード MQFB_NONE
Encoding(MQLONG 型) メッセージデータのマシンコード形式 MQENC_NATIVE
CodedCharSetId(MQLONG 型) メッセージデータの文字セット識別子 MQCCSI_Q_MGR
Format(MQCHAR8 型) メッセージデータのフォーマット名 MQFMT_NONE
Priority(MQLONG 型) メッセージ優先度 MQPRI_PRIORITY_AS_Q_DEF
Persistence(MQLONG 型) メッセージ永続性 MQPER_PERSISTENCE_AS_Q
_DEF
MsgId(MQBYTE24 型) メッセージ識別子 MQMI_NONE
CorrelId(MQBYTE24 型) 相関識別子 MQCI_NONE
BackoutCount(MQLONG 型) ロールバック回数 0
ReplyToQ(MQCHAR48 型) 応答キュー名 ヌル文字列/空白
ReplyToQMgr(MQCHAR48 型) 応答キューマネジャ名 ヌル文字列/空白
UserIdentifier(MQCHAR12 型) ユーザ識別子 ヌル文字列/空白
AccountingToken(MQBYTE32 型) 課金トークン MQACT_NONE
ApplIdentityData(MQCHAR32 型) アプリケーション識別データ ヌル文字列/空白
PutApplType(MQLONG 型) 登録アプリケーションタイプ MQAT_NO_CONTEXT
PutApplName(MQCHAR28 型) 登録アプリケーション名 ヌル文字列/空白
PutDate(MQCHAR8 型) 登録日付 ヌル文字列/空白
PutTime(MQCHAR8 型) 登録時刻 ヌル文字列/空白
ApplOriginData(MQCHAR4 型) 登録元データ ヌル文字列/空白
GroupId(MQBYTE24 型)※ グループ識別子 MQGI_NONE
MsgSeqNumber(MQLONG 型)※ メッセージシーケンス番号 1
Offset(MQLONG 型)※ オフセット 0
フィールド(データタイプ) 内容 初期値
MsgFlags(MQLONG 型)※ メッセージフラグ MQMF_NONE
OriginalLength(MQLONG 型)※ 登録元メッセージ長 MQOL_UNDEFINED
注※
Version フィールドの値が MQMD_VERSION_2 以降の場合だけ存在するフィールドです。
概要
目的
MQMD 構造体には,アプリケーション間でデータをやり取りするために必要な制御情報を記述します。
この構造体は MQGET,MQPUT および MQPUT1 命令の入出力用の引数です。
バージョン
MQMD 構造体のバージョンには 1 および 2 があります。しかし,すべての環境で MQMD_VERSION_2 がサポートされているわけではありません。複数の環境にアプリケーションを移植する場合は,使用する バージョンの MQMD 構造体が,すべての環境でサポートされている必要があります。
MQMD_VERSION_2 以降の構造体にだけ存在するフィールドについては,そのことがフィールドの説明 に記載されています。
サポートするプログラミング言語の COPY ファイルと INCLUDE ファイルでは,最新バージョンの MQMD 構造体が提供されます。ただし,Version フィールドの初期値は MQMD_VERSION_1 です。
バージョン 1 の構造体にないフィールドを使用する場合は,アプリケーションで使用したいバージョンの 番号を Version フィールドに設定してください。
バージョン 1 の構造体宣言には,MQMD1 型を使用できます。
文字セットおよびマシンコード
MQMD 構造体のデータは,ローカルキューマネジャの文字セットおよびマシンコードに従います。それ ぞれ,キューマネジャの CodedCharSetId 属性および MQENC_NATIVE で指定します。TP1/Message Queue - Access のクライアントアプリケーションの場合,MQMD 構造体はクライアントの文字セット およびマシンコードにします。
送信側および受信側キューマネジャが使用する文字セットまたはマシンコードが異なる場合,MQMD 構 造体の中のデータは自動的に変換されます。アプリケーションが MQMD 構造体を変換する必要はありま せん。
異なるバージョンの MQMD 構造体の使用
バージョン 1 の MQMD 構造体のアプリケーションデータの前に MQMDE 構造体を追加すると,バージョ ン 2 の MQMD 構造体と同じ機能になります。ただし,MQMDE 構造体の全フィールドが初期値の場合,
MQMDE 構造体は省略できます。バージョン 1 の MQMD 構造体と MQMDE 構造体は次のように使用 されます。
• MQPUT 命令および MQPUT1 命令で,アプリケーションがバージョン 1 の MQMD 構造体を使用す る場合,アプリケーションは,MQMDE 構造体があることを示すために,MQMD 構造体の Format フィールドに MQFMT_MD_EXTENSION を設定します。これによって,メッセージデータの前に,
MQMDE 構造体をオプションで追加できます。
注意事項
バージョン 2 の MQMD 構造体に存在し,バージョン 1 の MQMD 構造体に存在しない幾つか のフィールドは,MQPUT 命令および MQPUT1 命令の入出力フィールドです。ただし,キュー マネジャは,MQPUT 命令および MQPUT1 命令からの出力では,MQMDE 構造体の対応す るフィールドへ値を返しません。アプリケーションが出力された値を必要とする場合は,バー ジョン 2 の MQMD 構造体を使用しなければなりません。
• MQGET 命令でアプリケーションがバージョン 1 の MQMD 構造体を指定すると,キューマネジャは 返すメッセージの前に MQMDE 構造体を追加します。ただし,MQMDE 構造体の一つ以上のフィー ルドが初期値以外の値を持つ場合だけです。MQMD 構造体の Format フィールドは MQMDE 構造体 が存在することを示すために,MQFMT_MD_EXTENSION となります。
この構造体は,MQGET 命令,MQPUT 命令,および MQPUT1 命令の入出力用の引数です。
サポートされるすべてのプログラム言語について,MQMD 構造体のデフォルト値はバージョン 1 構造体 のデフォルト値と同じです。また,明示的な MQMD1 構造体を利用できます(COBOL 言語では COPY ファイルの CMQMD1 と CMQMD1V)。この構造体は,バージョン 1 の MQMD 構造体とバージョン 2 の MQMD 構造体を扱う必要があるアプリケーションのために提供されています。
メッセージが転送キュー上にある場合,MQMD 構造体内のフィールドの一部が特定の値に設定されます。
詳細については,この章の「MQXQH 構造体 − 転送キューヘッダ」を参照してください。
メッセージコンテキスト
MQMD 構造体の特定のフィールドには,メッセージコンテキストが含まれます。メッセージテキストに は,識別コンテキストと登録元コンテキストがあります。
識別コンテキスト
該当するメッセージを最初に登録したアプリケーションに関係します。
登録元コンテキスト
該当するメッセージを最後に登録したアプリケーションに関係します。
これらの二つのアプリケーションは,同一のアプリケーションである場合と,同一のアプリケーションで ない場合(例えば,メッセージがアプリケーションからアプリケーションへ転送される場合)があります。
識別コンテキストと登録元コンテキストには通常,上記のような意味があります。しかし実際には,MQMD 構造体のコンテキストフィールドの内容は,メッセージ登録時に指定された MQPMO_*_CONTEXT オ プションによって決定されます。そのため,必ずしも上記のとおりではありません。アプリケーションの 設計に依存します。
メッセージのコンテキストをまったく変更しないアプリケーションのクラスには,メッセージチャネルエー ジェント(MCA)があります。リモートキューマネジャからメッセージを受信する MCA は,MQPUT または MQPUT1 命令にコンテキストオプション MQPMO_SET_ALL_CONTEXT を使用します。これ によって受信側の MCA は,送信側の MCA からメッセージとともに送信されたメッセージコンテキスト を,そのままの状態で保存できます。ただし,その結果として,登録元コンテキストはメッセージを最後 に登録したアプリケーション(受信側 MCA)に関係づけられないで,それ以前にメッセージを登録した アプリケーション(送信側アプリケーション自身を含む)に関係づけられます。
以降の説明では,上記に示した通常の方法でコンテキストフィールドが使用されている場合について説明 します。メッセージのコンテキストの詳細については,マニュアル「TP1/Message Queue プログラム作 成の手引」を参照してください。
フィールド
構造体を構成するフィールドについて,アルファベット順に説明します。
● AccountingToken(MQBYTE32 型) 課金トークン
メッセージの識別コンテキストの一部です。メッセージコンテキストについては,この章の「MQMD 構 造体 − メッセージ記述子」の「概要」,およびマニュアル「TP1/Message Queue プログラム作成の 手引」を参照してください。
アプリケーションが課金情報を必要とするときに使用できます。
この情報は,キューマネジャではビット列として扱われます。内容はチェックされません。キューマネジャ によってこの情報が生成されるとき,次の値が設定されます。
• 1 バイト目に,2 バイト目以降に格納する課金情報の長さが設定されます。長さの範囲は 0〜31 で,2 進数として格納されます。
• 2 バイト目以降に,上記に示された長さで環境に応じた課金情報が設定されます。
• 上記以降のバイトには,2 進数の 0 が設定されます。
MQPUT 命令および MQPUT1 命令の PutMsgOpts 引数で MQPMO_SET_IDENTITY_CONTEXT ま たは MQPMO_SET_ALL_CONTEXT を指定した場合,入出力用フィールドとなります。
MQPMO_SET_IDENTITY_CONTEXT も MQPMO_SET_ALL_CONTEXT も指定しなかった場合,
このフィールドは入力時に無視されて出力専用のフィールドとなり,このフィールドは「\0」で埋められ ます。メッセージコンテキストおよびコンテキスト情報の制御については,マニュアル「TP1/Message Queue プログラム作成の手引」を参照してください。
MQPUT 命令または MQPUT1 命令が成功すると,このフィールドには,転送されたメッセージの AccountingToken が設定されます。メッセージにコンテキストがなかった場合,このフィールドは 0 と なります。
MQGET 命令では,出力用フィールドとなります。