• 検索結果がありません。

無制限に待ち合わせをします。無制限に待ち合わせ中に,アプリケーションまたは 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 命令では,出力用フィールドとなります。

ドキュメント内 TP1/Message Queue プログラム作成リファレンス (ページ 72-77)