現在のバージョンのメッセージ記述子の構造体バージョン番号 現在のバージョンのバージョン番号を指定します。
これは入力用のフィールドです。
このフィールドの初期値は MQMD_VERSION_1 です。
MQMDE 構造体 − メッセージ記述子の拡張
MQMDE 構造体は,次のフィールドから構成されます。
フィールド(データタイプ) 内容 初期値
StrucId(MQCHAR4 型) 構造体識別子 MQMDE_STRUC_ID
Version(MQLONG 型) 構造体バージョン番号 MQMDE_VERSION_2
StrucLength(MQLONG 型) 構造体長 MQMDE_LENGTH_2
Encoding(MQLONG 型) MQMDE 構造体に続くデータのマシン
コード形式
MQENC_NATIVE
CodedCharSetId(MQLONG 型) MQMDE 構造体に続くデータの文字セッ
ト識別子
MQCCSI_UNDEFINED
Format(MQCHAR8 型) MQMDE 構造体に続くデータのフォー
マット名
MQFMT_NONE
Flags(MQLONG 型) フラグ MQMDEF_NONE
GroupId(MQBYTE24 型) グループ識別子 MQGI_NONE
MsgSeqNumber(MQLONG 型) メッセージシーケンス番号 1
Offset(MQLONG 型) オフセット 0
MsgFlags(MQLONG 型) メッセージフラグ MQMF_NONE
OriginalLength(MQLONG 型) 登録元メッセージ長 MQOL_UNDEFINED
概要
目的
MQMDE 構造体には,アプリケーションメッセージデータに先行して発生することのあるデータを記述し ます。MQMDE 構造体には,バージョン 2 の MQMD 構造体に含まれるが,バージョン 1 の MQMD 構 造体には含まれないフィールドがあります。
フォーマット名
MQFMT_MD_EXTENSION
文字セットおよびマシンコード
MQMDE 構造体のデータは,ローカルキューマネジャの文字セットおよびマシンコードに従います。それ ぞれキューマネジャの CodedCharSetId 属性および MQENC_NATIVE で指定します。
MQMDE 構造体の文字セットとマシンコードは,次に示す構造体の CodedCharSetId および Encoding フィールドに指定します。
• MQMD 構造体(MQMDE 構造体がメッセージデータの先頭にある場合)
• MQMDE 構造体に先行するヘッダ構造体(その他の場合)
MQMDE 構造体がキューマネジャの文字セットとマシンコードでない場合,MQMDE 構造体は保存され ますが認識されません。つまり,MQMDE 構造体はメッセージデータとして扱われます。
使用方法
通常のアプリケーションでは,バージョン 2 の MQMD 構造体を使用してください。バージョン 2 の MQMD 構造体を使用する場合,MQMDE 構造体を使用する必要はありません。しかし,特殊な用途のア プリケーションおよびバージョン 1 の MQMD 構造体を引き続き使用するアプリケーションでは,特定の 場合に MQMDE 構造体を使用することがあります。次に示す場合に使用します。
• MQPUT および MQPUT1 命令で指定する場合
• MQGET 命令で返される場合
• 転送キューのメッセージに使用する場合 それぞれについて説明します。
MQPUT および MQPUT1 命令で MQMDE 構造体を指定する場合
MQPUT 命令および MQPUT1 命令でアプリケーションがバージョン 1 の MQMD 構造体を使用する場 合について説明します。この場合,アプリケーションは,メッセージデータの前に MQMD 構造体の MQMDE 構造体が存在することを示すために,Format フィールドに MQFMT_MD_EXTENSION を設 定します。アプリケーションが MQMDE 構造体を指定しない場合,キューマネジャは MQMDE 構造体の フィールドに初期値を仮定します。キューマネジャが使用する初期値は,構造体の初期値と同じです。
アプリケーションがバージョン 2 の MQMD 構造体を使用し,アプリケーションメッセージデータの前に MQMDE 構造体を置いた場合,MQMDE 構造体は次のように処理されます。
MQPUT または MQPUT1 命令で MQMDE 構造体が指定された場合のキューマネジャの処理を次に示し ます。
MQMD 構造体の バージョン
バージョン 2 の フィールドの値
MQMDE 構造体の対応するフィールド の値
キューマネジャの処理
1 − 有効 MQMDE 構造体を認識する。
2 初期値 有効 MQMDE 構造体を認識する。
2 初期値以外 有効 MQMDE 構造体をメッセージデータ
として扱う。
1 または 2 任意 無効 命令が失敗し,該当する理由コードが
戻る。
1 または 2 任意 MQMDE 構造体が無効な文字セットまた はマシンコードで記述されている。また は,サポートされていないバージョンで ある。
MQMDE 構造体をメッセージデータ として扱う。
(凡例)
−:該当しません。
例外となる場合があります。アプリケーションがセグメントである場合,つまり,MQMF_SEGMENT ま たは MQMF_LAST_SEGMENT フラグが設定されている場合,かつメッセージを登録するのにバージョ ン 2 の MQMD 構造体を使用し,MQMD 構造体のフォーマット名が
MQFMT_DEAD_LETTER_HEADER である場合,キューマネジャは MQMDE 構造体を生成し,
MQDLH 構造体とそれに続くデータの間に挿入します。キューマネジャがメッセージに関して保持する MQMD 構造体では,バージョン 2 のフィールドは初期値に設定されます。
バージョン 2 の MQMD 構造体には存在し,バージョン 1 の MQMD 構造体には存在しない幾つかのフィー ルドが,MQPUT 命令および MQPUT1 命令の入出力フィールドです。ただし,キューマネジャは,
MQPUT 命令および MQPUT1 命令の出力で,MQMDE 構造体の同等のフィールドに値を返却しませ ん。アプリケーションがその出力値を必要とする場合は,バージョン 2 の MQMD 構造体を使用しなけれ ばなりません。
MQGET 命令が返す MQMDE 構造体
MQGET 命令で,アプリケーションがバージョン 1 の MQMD 構造体を使用する場合について説明しま す。この場合,キューマネジャは,返却するメッセージの前に MQMDE 構造体を追加します。ただし,
MQMDE 構造体の一つ以上のフィールドが初期値以外の値を持つ場合です。キューマネジャは,MQMD 構造体中の Format フィールドを MQFMT_MD_EXTENSION の値に設定し,MQMDE 構造体があるこ とを示します。
アプリケーションが Buffer 引数の開始位置に MQMDE 構造体を使用する場合,MQMDE 構造体は無視 されます。MQGET 命令から返却されるとき,必要であれば,メッセージの MQMDE 構造体で置き換え られます。MQMDE 構造体が不要の場合は,アプリケーションメッセージデータで上書きされます。
MQGET 命令で MQMDE 構造体が返される場合,MQMDE 構造体のデータは通常,キューマネジャの 文字セットとマシンコードです。ただし次に示す場合,MQMDE 構造体が異なる文字セットとマシンコー ドになることがあります。
• MQMDE 構造体が MQPUT または MQPUT1 命令のデータとして扱われた場合
• TCP 接続で接続されたリモートキューマネジャからメッセージを受け取ったが,受信側のメッセージ チャネルエージェント(MCA)が正しく設定されていなかった場合。詳細については,WebSphere MQ のマニュアルを参照してください。
転送キューにあるメッセージの MQMDE 構造体
転送キューにあるメッセージには,MQXQH 構造体が前に付いています。その MQXQH 構造体にはバー ジョン 1 の MQMD 構造体が含まれています。MQMDE 構造体は一つ以上のフィールドで初期値以外の 値を持つときだけ,MQXQH 構造体とアプリケーションデータの間に存在します。
ほかの MQ ヘッダ構造体が,MQXQH 構造体とアプリケーションデータの間に現れる場合もあります。
例えば,MQDH 構造体,または MQDLH 構造体が存在し,メッセージがセグメントではない場合,現れ る順序は次のとおりです。
1. MQXQH 構造体(バージョン 1 の MQMD 構造体を含む)
2. MQDH 構造体または MQDLH 構造体 3. MQMDE 構造体
4. アプリケーションデータ
フィールド
構造体を構成するフィールドについて,アルファベット順に説明します。
● CodedCharSetId(MQLONG 型) 文字セット識別子
MQMDE 構造体に続くデータの文字セット識別子を指定します。MQMDE 構造体自身の文字データには 適用されません。
MQPUT または MQPUT1 命令では,アプリケーションはデータに合った値をこのフィールドに設定する 必要があります。キューマネジャは,このフィールドが有効であることをチェックしません。
MQCCSI_INHERIT
この構造体の文字セット識別子を引き継ぎます。
この構造体に続くデータの文字データは,この構造体と同じ文字セットです。
メッセージで送信される構造体のこの値を,キューマネジャは構造体の実際の文字セット識別子に変更 します。エラーが発生しない場合,MQGET 命令では MQCCSI_INHERIT は返されません。
MQMD 構造体の PutApplType フィールドの値が MQAT_BROKER の場合,MQCCSI_INHERIT は使用できません。
このフィールドの初期値は MQCCSI_UNDEFINED です。
● Encoding(MQLONG 型) マシンコード形式
MQMDE 構造体に続くデータのマシンコード形式を指定します。MQMDE 構造体自身の数値データには 適用されません。
MQPUT または MQPUT1 命令では,アプリケーションはデータに合った値をこのフィールドに設定する 必要があります。キューマネジャは,このフィールドが有効であることをチェックしません。データのマ シンコード形式については,この章の「MQMD 構造体 − メッセージ記述子」で Encoding フィール ドを参照してください。
このフィールドの初期値は MQENC_NATIVE です。