MQMD の概要
使用可能: WebSphere® MQ の全システムと、それらのシステムに接続する WebSphere MQ MQI クライアント。
目的: MQMD 構造体には、送信側アプリケーションと受信側アプリケーションとの間でメッセージがやり取りされるとき、アプリケーション・データに付随する制御情報が入れられます。 この構造体は、MQGET、MQPUT、および MQPUT1 呼び出しに指定する入出力パラメーターです。
バージョン: MQMD の現行バージョンは MQMD_VERSION_2 です。 複数の環境間で移植可能にすることを意図したアプリケーションでは、必ず対象のすべての環境で、必要なバージョンの MQMD がサポートされているようにしてください。 より新しいバージョンの構造体だけに存在するフィールドについては、この後の説明でそれが分かるようにします。
サポートされるプログラミング言語に提供されるヘッダー、COPY、および INCLUDE ファイルには、その環境でサポートされる最新バージョンの MQMD が含まれますが、Version フィールドの初期値としては MQMD_VERSION_1 が設定されます。 バージョン 1 の構造体に存在しないフィールドを使用するには、アプリケーションで、必要なバージョン番号を Version フィールドに設定してください。
バージョン 1 の構造体の宣言は、MQMD1 という名前で利用可能です。
文字セットとエンコード: MQMD に入れるデータは、ローカル・キュー・マネージャーの文字セットとエンコードであることが必要です。これは、キュー・マネージャーの属性 CodedCharSetId と、MQENC_NATIVE によって指定されます。 ただし、アプリケーションが WebSphere MQ MQI クライアントとして実行される場合、この構造体は、クライアントの文字セットとエンコードであることが必要です。
送信側と受信側のキュー・マネージャーで使用する文字セットまたはエンコードが違う場合、MQMD のデータは自動的に変換されます。 アプリケーションで MQMD を変換する必要はありません。
- MQPUT 呼び出しおよび MQPUT1 呼び出しでアプリケーションからバージョン 1 の MQMD を提供する場合には、オプションとして、メッセージ・データの先頭に MQMDE を付けることができます。
その場合は、MQMD の Format フィールドに MQFMT_MD_EXTENSION を設定して、MQMDE が存在することを指定します。
アプリケーションから MQMDE が提供されない場合、キュー・マネージャーは MQMDE の各フィールドにデフォルト値が設定されたものと想定します。
注: バージョン 2 の MQMD に存在して、バージョン 1 の MQMD に存在しないフィールドのいくつかは、MQPUT 呼び出しおよび MQPUT1 呼び出しに対する入出力フィールドです。 ただし、キュー・マネージャーは、MQPUT 呼び出しおよび MQPUT1 呼び出しで出力が生成されても MQMDE の該当するフィールドに値を戻しません。出力値が必要な場合には、そのアプリケーションでバージョン 2 の MQMD を使用する必要があります。
- MQGET 呼び出しでアプリケーションからバージョン 1 の MQMD を提供した場合は、MQMDE の 1 つ以上のフィールドがデフォルト以外の値の場合に限り、キュー・マネージャーから返されるメッセージの先頭に MQMDE が付けられます。 その場合、MQMD の Format フィールドに MQFMT_MD_EXTENSION という値が設定されて、MQMDE の存在が示されます。
キュー・マネージャーが MQMDE の各フィールドに使用するデフォルト値は、 表 1 に示す各フィールドの初期値と同じです。
メッセージが伝送キュー上にある場合、MQMD 内のフィールドの一部が特定の値に設定されます。詳細については、MQXQH - 伝送キュー・ヘッダーを参照してください。
- ID コンテキストは、最初に メッセージを書き込んだアプリケーションに関連したものです。
- 発信元コンテキストは、一番最近に メッセージを書き込んだアプリケーションに関連したものです。
ID コンテキストと発信元コンテキストには一般に前述のような意味合いがありますが、MQMD 内のこの 2 つのタイプのコンテキスト・フィールドの内容は、メッセージが書き込まれた時点での MQPMO_*_CONTEXT オプションの指定によって異なります。 その結果、ID コンテキストは必ずしも最初にメッセージを書き込んだアプリケーションに関連したものではなく、発信元コンテキストは必ずしも一番最近にメッセージを書き込んだアプリケーションに関連したものではありません。その内容は、アプリケーション・スイートの設計に応じて決まります。
メッセージ・チャネル・エージェント (MCA) がメッセージ・コンテキストを変更することは一切ありません。 リモート・キュー・マネージャーからメッセージを受け取る MCA は、MQPUT または MQPUT1 呼び出しでコンテキスト・オプション MQPMO_SET_ALL_CONTEXT を使用します。 これにより、受信側 MCA で、送信側 MCA からメッセージと一緒に伝達されてきたメッセージ・コンテキストを正確に保持することが可能になります。 ただし、その結果として、起点コンテキストはメッセージの送信側の MCA および受信側の MCA のいずれにも関連付けられません。起点コンテキストは、メッセージを書き込んだ以前のアプリケーションを指します。すべての中間アプリケーションがメッセージ・コンテキストを渡している場合、起点コンテキストは発信元のアプリケーション自身を指します。
この説明の中で、コンテキスト・フィールドは、最初の説明のとおりに各フィールドが使用された場合として記述されています。 メッセージのコンテキストの詳細については、メッセージのコンテキストを参照してください。