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構造体が存在し,メッセージがセグメントではない場合,現れる順序は次のとおりです。
フィールド
構造体を構成するフィールドについて,アルファベット順に説明します。
● CodedCharSetId(MQLONG型) 文字セット識別子
MQMDE構造体に続くデータの文字セット識別子を指定します。MQMDE構造体自身の文字データには適用されません。
MQPUTまたはMQPUT1命令では,アプリケーションはデータに合った値をこのフィールドに設定する必要があります。キューマネジャは,このフィールドが有効であることをチェックしません。
このフィールドの初期値はMQCCSI_UNDEFINEDです。
● Encoding(MQLONG型) マシンコード形式
MQMDE構造体に続くデータのマシンコード形式を指定します。MQMDE構造体自身の数値データには適用されません。
MQPUTまたはMQPUT1命令では,アプリケーションはデータに合った値をこのフィールドに設定する必要があります。キューマネジャは,このフィールドが有効であることをチェックしません。データのマシンコード形式については,この章の「MQMD構造体 - メッセージ記述子」でEncodingフィールドを参照してください。
このフィールドの初期値はMQENC_NATIVEです。
● Flags(MQLONG型) フラグ
次のフラグを指定できます。
このフィールドの初期値は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です。
● StrucLength(MQLONG型) 構造体長
次の値を取ります。
このフィールドの初期値はMQMDE_LENGTH_2です。
● Version(MQLONG型) 構造体バージョン番号
次の値を取ります。
次に示す値には,現在のバージョンのバージョン番号を指定してください。
このフィールドの初期値はMQMDE_VERSION_2です。