Hitachi

OpenTP1 Version 7 OpenTP1 メッセージキューイング機能 TP1/Message Queue プログラム作成リファレンス


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構造体が存在し,メッセージがセグメントではない場合,現れる順序は次のとおりです。

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