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フィールドに指定します。

MQMDE構造体がキューマネジャの文字セットとマシンコードでない場合,MQMDE構造体は保存されますが認識されません。つまり,MQMDE構造体はメッセージデータとして扱われます。

使用方法

通常のアプリケーションでは,バージョン2のMQMD構造体を使用してください。バージョン2のMQMD構造体を使用する場合,MQMDE構造体を使用する必要はありません。しかし,特殊な用途のアプリケーションおよびバージョン1のMQMD構造体を引き続き使用するアプリケーションでは,特定の場合にMQMDE構造体を使用することがあります。次に示す場合に使用します。

それぞれについて説明します。

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構造体

転送キューにあるメッセージには,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です。

● Flags(MQLONG型) フラグ

次のフラグを指定できます。

MQMDEF_NONE
フラグなし。

このフィールドの初期値はMQMDEF_NONEです。

● 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です。

● StrucLength(MQLONG型) 構造体長

次の値を取ります。

MQMDE_LENGTH_2
バージョン2のメッセージ記述子拡張構造体の長さ

このフィールドの初期値はMQMDE_LENGTH_2です。

● Version(MQLONG型) 構造体バージョン番号

次の値を取ります。

MQMDE_VERSION_2
バージョン2のメッセージ記述子拡張構造体

次に示す値には,現在のバージョンのバージョン番号を指定してください。

MQMDE_CURRENT_VERSION
メッセージ記述子拡張構造体の現在のバージョン

このフィールドの初期値はMQMDE_VERSION_2です。