Hitachi

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


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構造体を付けます。その後,対応する転送キューにそのメッセージを登録します。そのため,転送キューにあるメッセージのデータは次の順序となります。

  1. MQXQH構造体

  2. MQDH構造体,およびMQOR構造体とMQPMR構造体の配列

  3. アプリケーションメッセージ

あて先によっては,そのようなメッセージが一つ以上,キューマネジャによって生成されて,異なる転送キューに登録されます。この場合,それらのメッセージの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構造体レコードの配列に続くメッセージデータの先頭までのバイト数です。データは次の順序で現れます。

  1. MQDH構造体

  2. MQORレコードの配列

  3. MQPMRレコードの配列

  4. メッセージデータ

MQOR構造体,MQPMR構造体レコードの配列は,MQDH構造体に含まれるオフセット値によって位置づけられます。それらのオフセットが,MQDH構造体およびレコードの配列とメッセージデータの間に使用されないバイトを生じさせた場合,使用されないバイト数もStrucLengthフィールドの値に含まれなければなりません。ただし,使用されないバイトの内容を,キューマネジャは保存しません。なお,MQPMR構造体のレコードの配列は,MQOR構造体にあるレコードの配列の前にあるとき有効です。

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

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

次の値を取ります。

MQDH_VERSION_1

配布ヘッダの構造体バージョン番号

次の値は,現在のバージョンのバージョン番号を示します。

MQDH_CURRENT_VERSION

配布ヘッダ構造体の現在のバージョン

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