MQDH構造体 − 配布ヘッダ
MQDH構造体は,次のフィールドから構成されます。
フィールド(データタイプ) |
内容 |
初期値 |
---|---|---|
StrucId(MQCHAR4型) |
構造体識別子 |
MQDH_STRUC_ID |
Version(MQLONG型) |
構造体バージョン番号 |
MQDH_VERSION_1 |
StrucLength(MQLONG型) |
構造体長 |
0 |
Encoding(MQLONG型) |
MQPMR構造体の配列に続くデータのマシンコード形式 |
0 |
CodedCharSetId(MQLONG型) |
MQPMR構造体の配列に続くデータの文字セット識別子 |
MQCCSI_UNDEFINED |
Format(MQCHAR8型) |
MQPMR構造体の配列に続くデータのフォーマット名 |
MQFMT_NONE |
Flags(MQLONG型) |
フラグ |
MQDHF_NONE |
PutMsgRecFields(MQLONG型) |
MQPMR構造体フィールドの存在 |
MQPMRF_NONE |
RecsPresent(MQLONG型) |
オブジェクトレコード数 |
0 |
ObjectRecOffset(MQLONG型) |
最初のオブジェクトレコードまでのオフセット |
0 |
PutMsgRecOffset(MQLONG型) |
最初の登録メッセージレコードまでのオフセット |
0 |
概要
目的
MQDH構造体には,転送キューに存在する配布リストメッセージ中の,追加データを記述します。配布リストメッセージは,複数のあて先キューに送信されるメッセージです。追加データは,MQDH構造体,MQOR構造体の配列およびMQPMR構造体の配列の順序で構成されます。
この構造体は,転送キューに直接メッセージを登録したり,転送キューからメッセージを取り出したりする特別なアプリケーション(例:MCA)で使用されます。
MQDH構造体は,配布リストにメッセージを登録するだけの通常のアプリケーションで使用しないでください。通常のアプリケーションを使用する場合,配布リストのあて先を指定するにはMQOD構造体を使用してください。また,メッセージの属性や,それぞれのあて先に送信されたメッセージに関する情報を指定するには,MQPMO構造体を使用してください。
フォーマット名
MQFMT_DIST_HEADER
文字セットおよびマシンコード
MQDH構造体のデータは,ローカルキューマネジャの文字セットとマシンコードに従います。それぞれ,キューマネジャのCodedCharSetId属性およびMQENC_NATIVEオプションで指定します。
MQDH構造体の文字セットとマシンコードは,次に示す構造体のCodedCharSetIdおよびEncodingフィールドに指定します。
-
MQMD構造体(MQDH構造体がメッセージデータの先頭にある場合)
-
MQDH構造体に先行するヘッダ構造体(その他の場合)
使用方法
アプリケーションがメッセージを配布リストに登録する場合,その幾つかまたはすべてのあて先がリモートであるとき,キューマネジャはアプリケーションデータの前にMQXQH構造体とMQDH構造体を付けます。その後,対応する転送キューにそのメッセージを登録します。そのため,転送キューにあるメッセージのデータは次の順序となります。
-
MQXQH構造体
-
MQDH構造体,およびMQOR構造体とMQPMR構造体の配列
-
アプリケーションメッセージ
あて先によっては,そのようなメッセージが一つ以上,キューマネジャによって生成されて,異なる転送キューに登録されます。この場合,それらのメッセージのMQDH構造体は,アプリケーションがオープンした配布リストによって指定したあて先の中で異なる組み合わせを示します。
配布リストメッセージを直接転送キューに登録するアプリケーションは,上記の順序や,そのMQDH構造体が正しいことを保証しなければなりません。MQDH構造体が誤っている場合,キューマネジャは,MQPUT命令またはMQPUT1命令をMQRC_DH_ERRORの理由コードで失敗させることがあります。
メッセージは,キューが配布リストメッセージをサポートすると定義してある場合だけ,配布リスト形式でキューに登録されます。配布リストをサポートしていないキューに,アプリケーションが直接配布リストメッセージを登録した場合,キューマネジャは配布リストメッセージを個々のメッセージに分解し,キューに登録します。
フィールド
構造体を構成するフィールドについて,アルファベット順に説明します。
● CodedCharSetId(MQLONG型) 文字セット識別子
MQORおよびMQPMR構造体の配列に続くデータの文字セット識別子です。
MQORおよびMQPMR構造体の配列に続くデータの文字セット識別子を指定します。MQDH構造体自身の文字データには適用されません。
MQPUTまたはMQPUT1命令では,アプリケーションはデータに合った値をこのフィールドに設定する必要があります。
- MQCCSI_INHERIT
-
この構造体の文字セット識別子を引き継ぎます。
この構造体に続くデータの文字データは,この構造体と同じ文字セットです。
メッセージで送信される構造体のこの値を,キューマネジャは構造体の実際の文字セット識別子に変更します。エラーが発生しない場合,MQGET命令ではMQCCSI_INHERITは返されません。
MQMD構造体のPutApplTypeフィールドの値がMQAT_BROKERの場合,MQCCSI_INHERITは使用できません。
このフィールドの初期値はMQCCSI_UNDEFINEDです。
● Encoding(MQLONG型) マシンコード形式
MQORおよびMQPMR構造体の配列に続くデータのマシンコード形式です。
MQORおよびMQPMR構造体の配列に続くデータのマシンコード形式を指定します。MQDH構造体自身の数値データには適用されません。
MQPUTまたはMQPUT1命令では,アプリケーションはデータに合った値をこのフィールドに設定する必要があります。
このフィールドの初期値は0です。
● Flags(MQLONG型) フラグ
次に示すフラグが指定できます。
- MQDHF_NEW_MSG_IDS
-
新しいメッセージ識別子を生成します。
このフラグは,新しいメッセージ識別子が配布リストのあて先ごとに生成されることを示しています。登録メッセージレコードが存在しない場合,またはレコードは存在するがレコードにMQMD構造体のMsgIdフィールドが含まれない場合にだけ,フラグを指定できます。
このフラグを使用した場合,メッセージ記述子の生成は配布リストメッセージがおのおののメッセージに分割されるときまで延期されます。これによって,配布リストメッセージと伝達されなければならない制御情報を最小にできます。
アプリケーションが配布リストにメッセージを登録した場合,次に示す両方が成り立つときに,キューマネジャは生成したMQDH構造体にMQDHF_NEW_MSG_IDSを設定します。
-
アプリケーションによって生成された登録メッセージレコードが存在しない場合,または生成されたレコードにMsgIdフィールドが含まれない場合
-
MQMD構造体のMsgIdフィールドがMQMI_NONEである場合,またはMQPMO構造体のOptionsフィールドにMQPMO_NEW_MSG_IDが指定されている場合
-
フラグが必要ない場合は,次の指定ができます。
- MQDHF_NONE
-
フラグなし。
この定数は,フラグが指定されなかったことを示しています。
MQDHF_NONEはプログラムの文書化のために定義されています。値としては0が定義されていますが,プログラムを文書化する以外の目的はありません。
このフィールドの初期値はMQDHF_NONEです。
● Format(MQCHAR8型) フォーマット名
MQORおよびMQPMR構造体の配列に続くデータのフォーマット名です。
MQORおよびMQPMR構造体の配列に続くデータのフォーマット名を指定します。どちらが最後になるかは関係しません。
MQPUTまたはMQPUT1命令では,アプリケーションはデータに合った値をこのフィールドに設定する必要があります。このフィールドの設定規則はMQMD構造体のFormatフィールドと同じです。
このフィールドの初期値はMQFMT_NONEです。
● ObjectRecOffset(MQLONG型) 最初のオブジェクトレコードまでのオフセット
あて先キューの名称を含む,MQOR構造体オブジェクトレコード配列にある最初のレコードのバイト位置を示します。この配列にRecsPresentフィールドのレコードがあります。これらのレコード(最初のオブジェクトレコードとその前のフィールドの間とのスキップされたバイトを加えて)は,StrucLengthフィールドの長さに含まれます。
配布リストは少なくとも一つのあて先を持つ必要があり,ObjectRecOffsetフィールドは常に0より大きくなければなりません。
このフィールドの初期値は0です。
● PutMsgRecFields(MQLONG型) MQPMR構造体フィールドの存在
0または次に示すフラグが指定できます。
- MQPMRF_MSG_ID
-
メッセージ記述子フィールドが存在します。
- MQPMRF_CORREL_ID
-
相関識別子フィールドが存在します。
- MQPMRF_GROUP_ID
-
グループ識別子フィールドが存在します。
- MQPMRF_FEEDBACK
-
フィードバックフィールドが存在します。
- MQPMRF_ACCOUNTING_TOKEN
-
課金トークンフィールドが存在します。
MQPMR構造体フィールドが存在しない場合,次のフラグが指定できます。
- MQPMRF_NONE
-
登録メッセージレコードが存在しません。
MQPMRF_NONEはプログラムの文書化のために定義されています。値としては0が定義されていますが,プログラムを文書化する以外の目的はありません。
このフィールドの初期値はMQPMRF_NONEです。
● PutMsgRecOffset(MQLONG型) 最初のMQPMR構造体までのオフセット
メッセージ属性を含む,MQPMR登録メッセージレコード配列にある最初のレコードのバイト位置を示します。存在する場合は,この配列にRecsPresentフィールドのレコードがあります。
これらのレコード(最初のオブジェクトレコードとその前のフィールドの間とのスキップされたバイトを加えたレコード)は,StrucLengthフィールドの長さに含まれます。
登録メッセージレコードはオプションです。レコードがない場合,PutMsgRecOffsetフィールドは0となります。なお,PutMsgRecFieldsフィールドはMQPMRF_NONEの値になります。
このフィールドの初期値は0です。
● RecsPresent(MQLONG型) MQOR構造体の数
あて先の数を定義します。配布リストは必ず最低一つのあて先を含まなければなりません。したがって,RecsPresentフィールドは常に0より大きくなければなりません。
このフィールドの初期値は0です。
● StrucId(MQCHAR4型) 構造体識別子
次の値を取ります。
- MQDH_STRUC_ID
-
配布ヘッダ構造体の識別子
C言語では,MQDH_STRUC_ID_ARRAY定数も定義されています。これは,MQDH_STRUC_IDと同じ値です。ただし,文字列ではなく文字の配列として定義されています。
このフィールドの初期値はMQDH_STRUC_IDです。
● StrucLength(MQLONG型) MQDH構造体とそれに続くMQOR構造体およびMQPMR構造体を足した長さ
MQDH構造体長とそれに続くレコードを足した長さです。
これは,MQDH構造体の先頭から,MQOR構造体,またはMQPMR構造体レコードの配列に続くメッセージデータの先頭までのバイト数です。データは次の順序で現れます。
-
MQDH構造体
-
MQORレコードの配列
-
MQPMRレコードの配列
-
メッセージデータ
MQOR構造体,MQPMR構造体レコードの配列は,MQDH構造体に含まれるオフセット値によって位置づけられます。それらのオフセットが,MQDH構造体およびレコードの配列とメッセージデータの間に使用されないバイトを生じさせた場合,使用されないバイト数もStrucLengthフィールドの値に含まれなければなりません。ただし,使用されないバイトの内容を,キューマネジャは保存しません。なお,MQPMR構造体のレコードの配列は,MQOR構造体にあるレコードの配列の前にあるとき有効です。
このフィールドの初期値は0です。