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)が正しく設定されていなかった場合。詳細については,IBM MQのマニュアルを参照してください。
転送キューにあるメッセージのMQMDE構造体
転送キューにあるメッセージには,MQXQH構造体が前に付いています。そのMQXQH構造体にはバージョン1のMQMD構造体が含まれています。MQMDE構造体は一つ以上のフィールドで初期値以外の値を持つときだけ,MQXQH構造体とアプリケーションデータの間に存在します。
ほかのMQヘッダ構造体が,MQXQH構造体とアプリケーションデータの間に現れる場合もあります。例えば,MQDH構造体,またはMQDLH構造体が存在し,メッセージがセグメントではない場合,現れる順序は次のとおりです。
-
MQXQH構造体(バージョン1のMQMD構造体を含む)
-
MQDH構造体またはMQDLH構造体
-
MQMDE構造体
-
アプリケーションデータ
フィールド
構造体を構成するフィールドについて,アルファベット順に説明します。
● 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です。
● Format(MQCHAR8型) フォーマット名
MQMDE構造体に続くデータのフォーマット名を表すフィールドです。
MQPUTまたはMQPUT1命令では,アプリケーションはデータに合った値をこのフィールドに設定する必要があります。キューマネジャはこのフィールドが有効であることをチェックしません。データのフォーマット名については,この章の「MQMD構造体 − メッセージ記述子」でFormatフィールドを参照してください。
このフィールドの初期値はMQFMT_NONEです。
● GroupId(MQBYTE24型) グループ識別子
グループ識別子については,この章の「MQMD構造体 − メッセージ記述子」でGroupIdフィールドを参照してください。
このフィールドの初期値はMQGI_NONEです。
● MsgFlags(MQLONG型) メッセージフラグ
メッセージフラグについては,この章の「MQMD構造体 − メッセージ記述子」でMsgFlagsフィールドを参照してください。
このフィールドの初期値はMQMF_NONEです。
● MsgSeqNumber(MQLONG型) メッセージシーケンス番号
グループ内の論理メッセージのシーケンス番号を表すフィールドです。メッセージシーケンス番号については,この章の「MQMD構造体 − メッセージ記述子」でMsgSeqNumberフィールドを参照してください。
このフィールドの初期値は1です。
● Offset(MQLONG型) オフセット
論理メッセージの先頭からの物理メッセージのデータオフセットを表すフィールドです。オフセットについては,この章の「MQMD構造体 − メッセージ記述子」でOffsetフィールドを参照してください。
このフィールドの初期値は0です。
● OriginalLength(MQLONG型) 登録元メッセージ長
登録元メッセージ長については,この章の「MQMD構造体 − メッセージ記述子」でOriginalLengthフィールドを参照してください。
このフィールドの初期値はMQOL_UNDEFINEDです。
● StrucId(MQCHAR4型) 構造体識別子
次の値を取ります。
- MQMDE_STRUC_ID
-
メッセージ記述子拡張構造体の識別子
C言語では,MQMDE_STRUC_ID_ARRAYも定義されています。これは,MQMDE_STRUC_IDと同じ値です。ただし,文字列ではなく文字の配列として定義されています。
このフィールドの初期値はMQMDE_STRUC_IDです。