[IBM i]

IBM i での MQMD (メッセージ記述子)

概要

目的: MQMD 構造体には、送信側アプリケーションと受信側アプリケーションとの間でメッセージがやり取りされるとき、アプリケーション・データに付随する制御情報が入れられます。 この構造体は、MQGET、MQPUT、および MQPUT1 呼び出しに指定する入出力パラメーターです。

バージョン: MQMD の現行バージョンは MDVER2 です。 これより新しいバージョンの構造体にのみ存在するフィールドについては、そのフィールドの説明にその旨を記載しています。

提供される COPY ファイルには環境によってサポートされている 最新バージョンの MQMD が含まれます。ただし、MDVER フィールドの初期値は MDVER1 に設定されています。 version-1 構造体に存在しないフィールドを使用するには、アプリケーションで、MDVERフィールドを必要なバージョンのバージョン番号に設定する必要があります。

バージョン 1 の構造体の宣言は、MQMD1 という名前で使用できます。

文字セットおよびエンコード: MQMD のデータは、CodedCharSetId キュー・マネージャー属性で指定された文字セットと、ENNAT で指定されたローカル・キュー・マネージャーのエンコードになっていなければなりません。 ただし、アプリケーションが IBM® MQ MQI clientとして実行されている場合、構造体はクライアントの文字セットとエンコードになっている必要があります。

送信側と受信側のキュー・マネージャーで使用する文字セットまたはエンコードが違う場合、MQMD のデータは自動的に変換されます。 アプリケーションで MQMD を変換する必要はありません。

MQMD の異なるバージョンの使用

一般的には、バージョン 1 の MQMD でメッセージ・データの前に MQMDE 構造体を付けると、バージョン 2 の MQMD と同等になります。 ただし、MQMDE 構造体のすべてのフィールドにデフォルト値が設定されている場合には MQMDE を省略できます。 バージョン 1 の MQMD に MQMDE を加えた場合は、このセクションで後述するように使用します。
  • MQPUT 呼び出しおよび MQPUT1 呼び出しでアプリケーションからバージョン 1 の MQMD を提供する場合には、オプションとして、メッセージ・データに接頭部 MQMDE を付けることができます。 その場合は、MQMD の MDFMT フィールドに FMMDE を設定して、MQMDE が存在することを示します。 アプリケーションが MQMDE を提供しない場合、キュー・マネージャーは MQMDE の各フィールドにデフォルト値が設定されたものと見なします。
    注: version-2 MQMD には存在するが、 version-1 MQMD には存在しないいくつかのフィールドは、MQPUT 呼び出しおよび MQPUT1 呼び出しの入出力フィールドです。 ただし、キュー・マネージャーは、MQPUT 呼び出しおよび MQPUT1 呼び出しで出力が生成されても MQMDE の該当するフィールドに値を戻しません。出力値が必要な場合には、そのアプリケーションでバージョン 2 の MQMD を使用する必要があります。
  • MQGET 呼び出しでアプリケーションからバージョン 1 の MQMD を提供した場合は、MQMDE の 1 つ以上のフィールドがデフォルト以外の値の場合に限り、キュー・マネージャーから返されるメッセージの先頭に MQMDE が付けられます。 MQMD の MDFMT フィールドには、MQMDE が存在することを示す FMMDE という値が設定されます。
キュー・マネージャーが MQMDE のフィールドに使用したデフォルト値は、 表 1に示されているそれらのフィールドの初期値と同じです。

メッセージが伝送キューにある場合、MQMD 内の一部のフィールドは特定の値に設定されます。詳しくは、 IBM i での MQXQH (伝送キュー・ヘッダー) を参照してください。

メッセージ・コンテキスト

MQMD の特定のフィールドにはメッセージ・コンテキストが含まれます。 一般に、
  • 識別コンテキストは、そのメッセージを最初に 入れたアプリケーションに関係しています。
  • 起点コンテキストは、そのメッセージを最後に 入れたアプリケーションに関係しています。
  • ユーザー・コンテキストは、そのメッセージを最初に 書き込んだアプリケーションに関係しています。
これら 2 つのアプリケーションは同じアプリケーションのこともありますが、異なるアプリケーションであるというケースもあります (例えば、メッセージが 1 つのアプリケーションから別のアプリケーションに転送された場合)。

識別コンテキストと起点コンテキストには通常、前述のような意味がありますが、実際には MQMD 内のいずれのタイプのコンテキスト・フィールドの内容も、メッセージが入れられるときに指定された PM* オプションによって決まります。 そのため、識別コンテキストは必ずしもメッセージを最初に入れたアプリケーションに関係しているわけではなく、起点コンテキストも必ずしもメッセージを最後に入れたアプリケーションに関係しているわけではありません。むしろこれは、アプリケーション群の設計によって決まります。

アプリケーションのクラスには、メッセージのコンテキストをまったく変更しない、メッセージ・チャネル・エージェント (MCA) があります。 リモート・キュー・マネージャーからメッセージを受け取る MCA は、MQPUT または MQPUT1 呼び出しでコンテキスト・オプション PMSETA を使用します。 これによって受信側の MCA は、メッセージとともに送信側の MCA から送られてきたメッセージ・コンテキストを、変更が加えられていない状態で保存できます。 ただし、その結果として、起点コンテキストはメッセージを最後に入れたアプリケーション (受信側の MCA) には関係付けられず、それ以前にメッセージを入れたアプリケーション (発信側のアプリケーション自身であることが多い) に関係付けられることになります。

詳しくは、 メッセージ・コンテキストを参照してください。

メッセージ有効期限

ロードされたキュー (オープンされていたキュー) で満了したメッセージは、満了から妥当な時間内に自動的にキューから除去されます。 このリリースの IBM MQ の他の新機能では、ロードされたキューのスキャン頻度が前の製品バージョンより少なくなる可能性がありますが、ロードされたキューの有効期限切れメッセージは常に妥当な期間内に削除されます。

フィールド

MQMD 構造体には、以下のフィールドが含まれます。フィールドはアルファベット順に説明されています。

MDACC (32 バイトのビット・ストリング)

アカウンティング・トークン。

これは、メッセージの ID コンテキスト の一部です。 メッセージ・コンテキストについて詳しくは、 メッセージ・コンテキスト および コンテキスト情報の制御を参照してください。

MDACC を指定すると、アプリケーションは、メッセージの結果として行われた作業に適切な課金を行うことができます。 キュー・マネージャーはこの情報をビット・ストリングとして処理し、その内容は検査しません。

キュー・マネージャーは、この情報を生成するときに、以下のように設定します。
  • このフィールドの最初のバイトを、フィールドの後続バイトにある会計情報の長さに設定します。長さは 0 から 30 までの範囲であり、2 進整数として最初のバイトに保管されます。
  • 2 番目以降のバイト (長さフィールドに指定) を、環境に応じた会計情報に設定します。
    • z/OS® では、アカウンティング情報は次のように設定されます。
      • z/OS バッチの場合は、JES JOB カードからの会計情報、または EXEC カードの JES ACCT 文からの会計情報 (コンマ・セパレーターは X'FF' に変更されます)。 この情報は、必要に応じて 31 バイトに切り捨てられます。
      • TSO の場合は、ユーザーのアカウント番号。
      • CICS®の場合、LU 6.2 作業単位 ID (UEPUOWDS) (26 バイト)。
      • IMS の場合は、16 文字の IMS リカバリー・トークンに連結されている 8 文字の PSB 名。
    • IBM iでは、アカウンティング情報はジョブのアカウンティング・コードに設定されます。
    • UNIXでは、アカウンティング情報は ASCII 文字の数値ユーザー ID に設定されます。
    • Windowsでは、アカウンティング情報は圧縮形式の Windows NT セキュリティー ID (SID) に設定されます。 SID は、MDUID フィールドに保管されたユーザー ID を一意的に識別します。 SID が MDACC フィールドに格納されている場合、6 バイトの Identifier Authority (SID の 3 バイト目以降にあります) は省略されます。 例えば、 Windows NT SID の長さが 28 バイトの場合、22 バイトの SID 情報が MDACC フィールドに保管されます。
  • 最後のバイトを、会計トークン・タイプ (以下の値のいずれか) に設定します。
    ATTCIC
    CICS LUOW ID。
    ATTDOS
    PC DOS のデフォルトの会計トークン。
    ATTWNT
    Windows セキュリティー ID。
    ATT400
    IBM i アカウンティング・トークン。
    ATTUNX
    UNIX 数値 ID。
    ATTUSR
    ユーザー定義の会計トークン。
    ATTUNK
    不明な会計トークン・タイプ。
    アカウンティング・トークン・タイプは、 AIX®HP-UXIBM iSolarisWindows、およびこれらのシステムに接続された IBM MQ MQI clients の各環境でのみ、明示的な値に設定されます。 これ以外の環境では、会計トークン・タイプは値 ATTUNK に設定されます。 これらの環境では、MDPAT フィールドを使用して、受け取った会計トークンのタイプを推測できます。
  • その他のすべてのバイトを 2 進ゼロに設定します。

MQPUT および MQPUT1 呼び出しの場合、PMO パラメーターに PMSETI または PMSETA が指定されていれば、これは入出力フィールドです。 PMSETI または PMSETA が指定されていない場合、入力においてこのフィールドは無視され、出力専用フィールドになります。 メッセージ・コンテキストについて詳しくは、 メッセージ・コンテキスト および コンテキスト情報の制御を参照してください。

MQPUT または MQPUT1 呼び出しが正常に完了すると、メッセージがキューに書き込まれた場合、このフィールドには、そのメッセージと共に送信された MDACC が入ります。 これは、メッセージが保存される場合に保持される MDACC の値です (保存パブリケーションについて詳しくは、 IBM i での MQPMO (メッセージ書き込みオプション) の PMRET の説明を参照してください) が、メッセージがサブスクライバーにパブリケーションとして送信されるときに MDACC として使用されることはありません。サブスクライバーに送信されるすべてのパブリケーションで MDACC をオーバーライドする値を提供するためです。 メッセージにコンテキストがない場合、フィールドは完全に 2 進ゼロになります。

これは、MQGET 呼び出しの出力フィールドです。

このフィールドは、キュー・マネージャーの文字セットに基づいた変換の対象ではありません。このフィールドは、文字ストリングとしてではなく、ビット・ストリングとして扱われます。

キュー・マネージャーは、フィールドにある情報については、何も処理しません。 アプリケーションは、会計の目的で情報を使用する場合に、情報を解釈する必要があります。

MDACC フィールドには、以下に示す特別な値が使用されることがあります。
ACNONE
アカウンティング・トークンが指定されていません。

値は、フィールドの長さについては 2 進ゼロです。

このフィールドの長さは、LNACCT で指定されます。 このフィールドの初期値は ACNONE です。

MDAID (32 バイトの文字ストリング)

ID に関連するアプリケーション・データ。

これは、メッセージの ID コンテキスト の一部です。 メッセージ・コンテキストについて詳しくは、 メッセージ・コンテキスト および コンテキスト情報の制御を参照してください。

MDAID は、アプリケーション・スイートによって定義される情報で、メッセージやその発信元に関する追加の情報を提供するために使用することができます。 キュー・マネージャーはこの情報を文字データとして扱いますが、そのフォーマットの定義はしません。 キュー・マネージャーは、この情報を生成するときに、全体をブランクにします。

MQPUT および MQPUT1 呼び出しの場合、PMO パラメーターに PMSETI または PMSETA が指定されていれば、これは入出力フィールドです。 ヌル文字がある場合は、ヌル文字およびその後に続く文字は、キュー・マネージャーによってブランクに変換されます。 PMSETI または PMSETA が指定されていない場合、入力においてこのフィールドは無視され、出力専用フィールドになります。 メッセージ・コンテキストについて詳しくは、 メッセージ・コンテキスト および コンテキスト情報の制御を参照してください。

MQPUT または MQPUT1 呼び出しが正常に完了すると、メッセージがキューに書き込まれた場合、このフィールドには、そのメッセージと共に送信された MDAID が入ります。 これは、メッセージが保存された場合 (保存パブリケーションについて詳しくは、PMRET の説明を参照してください)、そのメッセージと共に保持された MDAID の値になりますが、メッセージがパブリケーションとしてサブスクライバーに送信された場合には MDAID として使用されません。これは、サブスクライバーが提供する値が、サブスクライバーに送信されるすべてのパブリケーションにおいて MDAID をオーバーライドするためです。 メッセージがコンテキストを持っていない場合、フィールドは完全にブランクになります。

これは、MQGET 呼び出しの出力フィールドです。 このフィールドの長さは LNAIDD によって指定されます。 このフィールドの初期値は 32 個のブランク文字です。

MDAOD (4 バイトの文字ストリング)

発生元に関係するアプリケーション・データ。

これは、メッセージの起点コンテキストの一部です。 メッセージ・コンテキストについて詳しくは、 メッセージ・コンテキスト および コンテキスト情報の制御を参照してください。

MDAOD は、アプリケーション・スイートにより定義される情報で、メッセージの発信元についての追加情報を提供するのに使用できます。 例えば、ID データが信頼 できるかどうかを示すために、適切なユーザー権限で実行されているアプリケーションにより設定 が可能です。

キュー・マネージャーはこの情報を文字データとして扱いますが、そのフォーマットの定義はしません。 キュー・マネージャーは、この情報を生成するときに、全体をブランクにします。

MQPUT および MQPUT1 呼び出しの場合、PMO パラメーターに または PMSETA が指定されていれば、これは入出力フィールドです。 フィールド内でヌル文字より後の情報はすべて破棄されます。 ヌル文字およびその後に続く文字は、キュー・マネージャーによってブランクに変換されます。 PMSETA が指定されていない場合、入力においてこのフィールドは無視され、出力専用フィールドになります。

MQPUT または MQPUT1 呼び出しが正常に完了すると、メッセージがキューに書き込まれた場合、このフィールドには、そのメッセージと共に送信された MDAOD が入ります。 これは、メッセージが保存された場合 (保存パブリケーションについて詳しくは、PMRET の説明を参照してください)、そのメッセージと共に保持された MDAOD の値になりますが、メッセージがパブリケーションとしてサブスクライバーに送信された場合には MDAOD として使用されません。これは、サブスクライバーが提供する値が、サブスクライバーに送信されるすべてのパブリケーションにおいて MDAOD をオーバーライドするためです。 メッセージがコンテキストを持っていない場合、フィールドは完全にブランクになります。

これは、MQGET 呼び出しの出力フィールドです。 このフィールドの長さは LNAORD によって指定されます。 このフィールドの初期値は 4 個のブランク文字です。

MDBOC (10 桁の符号付き整数)

バックアウトのカウンター。

これは、メッセージが、作業単位の一部として MQGET 呼び出しから事前に戻されて、その後バックアウトされた回数のカウントです。 メッセージの内容に基づいて処理エラーを検出する際に、アプリケーションへの補助機能として提供されます。 カウントには、GMBRW* オプションのいずれかを指定する MQGET 呼び出しは含まれません。

このカウントの正確度は、 HardenGetBackout キュー属性の影響を受けます。 キューの属性を参照してください。

これは、MQGET 呼び出しの出力フィールドです。 MQPUT および MQPUT1 呼び出しでは、無視されます。 このフィールドの初期値は 0 です。

MDCID (24 バイトのビット・ストリング)

相関 ID。

これは、バイト・ストリングで、1 つのメッセージを別のメッセージと関連付けたり、メッセージをアプリケーションが実行している他の作業と関連付けたりするために、アプリケーションによって使用できます。 相関 ID はメッセージの永続的なプロパティーであり、キュー・マネージャーを再始動しても保持されます。 相関 ID は文字ストリングではなくバイト・ストリングであるため、あるキュー・マネージャーから別のキュー・マネージャーにメッセージが転送され、文字セットが異なっていても、相関 ID は変換されません。

MQPUT 呼び出しおよび MQPUT1 呼び出しの場合、アプリケーションは任意の値を指定できます。 キュー・マネージャーはこの値をメッセージと一緒に送信し、メッセージの取得要求を出したアプリケーションに配信します。

アプリケーションで PMNCID を指定した場合、キュー・マネージャーは固有の相関 ID を生成します。この相関 ID は、メッセージと共に送信されるほか、MQPUT 呼び出しまたは MQPUT1 呼び出しからの出力で送信側アプリケーションに返されます。

生成されたこの相関 ID がメッセージと共に保持されるのは、MQSUB 呼び出しで渡される MQSD の SDCID フィールドで CINONE を指定するサブスクライバーに、メッセージがパブリケーションとして送信されるときに、メッセージが保存され、相関 ID として使用される場合です。

保存パブリケーションについて詳しくは、 IBM i を参照してください。

キュー・マネージャーまたはメッセージ・チャネル・エージェントは、レポート・メッセージを生成するとき、元のメッセージの MDREP フィールド、すなわち、ROCMTC または ROPCI のいずれかによって指定された方法で MDCID フィールドを設定します。 レポート・メッセージを生成するアプリケーションも、上記の指定を行います。

MQGET 呼び出しの場合、MDCID は、キューから取得する特定のメッセージを選択するために使用できる 5 つのフィールドの 1 つです。 このフィールドに値を指定する方法の詳細については、MDMID フィールドを参照してください。

相関 ID として CINONE を指定すると、MOCORI を指定しなかった場合と同じ結果になります。つまり、すべての相関 ID が一致することになります。

GMMUC オプションが MQGET 呼び出しの GMO パラメーターで指定されている場合、このフィールドは無視されます。

MQGET 呼び出しから戻った時点で、MDCID フィールドには、返されたメッセージ (それがある場合) の相関 ID が設定されます。

次の特別な値を使用できます。
CINONE
相関 ID は指定されません。

値は、フィールドの長さについては 2 進ゼロです。

CINEWS
メッセージは、新しいセッションの先頭です。

この値は、新規セッションの開始、つまりメッセージの新規シーケンスの開始を示すものとして、 CICS bridge によって認識されます。

MQGET 呼び出しの場合、これは入出力フィールドです。 MQPUT および MQPUT1 呼び出しでは、PMNCID を指定しなかった場合は入力フィールド、PMNCID を指定した場合は出力フィールドです。 このフィールドの長さは、LNCID で指定されます。 このフィールドの初期値は CINONE です。

MDCSI (10 桁の符号付き整数)

これは、メッセージにある文字データの文字セット ID を指定します。

注: MQMD 内の文字データ、および呼び出しのパラメーターであるその他の IBM MQ データ構造体は、キュー・マネージャーの文字セットでなければなりません。 これは、キュー・マネージャーの CodedCharSetId 属性によって定義されます。この属性の詳細については、 IBM i を参照してください。
以下のような特別な値を使用することができます。
CSQM
キュー・マネージャーの文字セット ID。

メッセージ内の文字データは、キュー・マネージャーの文字セットになります。

MQPUT および MQPUT1 呼び出しで、キュー・マネージャーは、メッセージで送信された MQMD 内のこの値を、キュー・マネージャーの実際の文字セット ID に変更します。 したがって、値 CSQM が MQGET 呼び出しによって戻されることはありません。

CSINHT
この構造体の文字セット ID を継承する。

メッセージ内の文字データは、この構造体と同じ文字セットです。つまり、キュー・マネージャーの文字セットです。 (MQMD の場合のみ、CSINHT は CSQM と同じ意味を持ちます。)

キュー・マネージャーは、メッセージで送信された MQMD 内のこの値を、MQMD の実際の文字セット ID に変更します。 エラーが発生しない限り、値 CSINHT が MQGET 呼び出しによって返されることはありません。

MQMD の MDPAT フィールドの値が ATBRKR の場合、CSINHT は使用できません。

CSEMBD
組み込み文字セット ID。

メッセージ内の文字データの文字セットは、メッセージ・データそのものに ID が含まれている文字セットになります。 メッセージのデータに組み込まれていて、そのデータの別の部分に適用される文字セット ID はいくつあっても構いません。 この値は、いくつかの文字セットによるデータが混在した PCF メッセージでは必ず使用します。 PCF メッセージの形式名は FMPCF です。

この値は、MQPUT 呼び出しおよび MQPUT1 呼び出しに対してのみ指定してください。 この値を MQGET 呼び出しに指定すると、メッセージが変換されなくなります。

MQPUT 呼び出しおよび MQPUT1 呼び出しで、キュー・マネージャーは、メッセージと一緒に送信された MQMD 内の値 CSQM および CSINHT を前述のように変更しますが、MQPUT 呼び出しまたは MQPUT1 呼び出しで指定された MQMD は変更しません。 指定された値について、それ以外の検査は行われません。

メッセージを検索するアプリケーションは、このフィールドとアプリケーションの予期する値とを比較することが必要です。値が異なる場合、アプリケーションは、メッセージ内の文字データを変換することが必要になる場合があります。

GMCONV オプションが MQGET 呼び出しで指定されている場合、このフィールドは入出力フィールドです。 アプリケーションが指定した値は、必要に応じてメッセージ・データを変換しなければならないコード化文字セット ID の値です。 変換が正しく行われるか、変換が不要であれば、この値は変更されません (ただし、値 CSQM または CSINHT は、実際の値に変換されます)。 変換が失敗したときは、MQGET 呼び出しの後の値は、アプリケーションに戻されるメッセージのうち変換されなかったメッセージのコード化文字セット ID を表しています。

それ以外の場合、MQGET 呼び出しでは出力フィールド、MQPUT および MQPUT1 呼び出しでは入力フィールドです。 このフィールドの初期値は CSQM です。

MDENC (10 桁の符号付き整数)

メッセージ・データの数値エンコード。

ここでは、メッセージ内の数値データの数値エンコードを指定します。これは、MQMD 構造体自体の数値データには適用されません。 数値エンコード方式では、2 進整数、パック 10 進整数、および浮動小数点数の表記が定義されています。

MQPUT または MQPUT1 呼び出しでは、アプリケーションは、このフィールドをデータに適切な値に設定する必要があります。 キュー・マネージャーは、フィールドが有効かどうかをチェックしません。 以下のような特殊値が定義されます。
ENNAT
マシン固有のエンコード。

このコード・エンコードは、アプリケーションが実行されているプログラミング言語およびマシンのデフォルトになります。

注: この定数の値は、プログラミング言語と環境によって異なります。 このため、アプリケーションは、実行する環境に適したヘッダー・ファイル、マクロ・ファイル、COPY ファイル、および INCLUDE ファイルを使用してコンパイルする必要があります。

メッセージを書き込んだアプリケーションは、通常 ENNAT を指定する必要があります。 メッセージを検索するアプリケーションは、このフィールドと値 ENNAT を比較することが必要です。値が異なる場合、アプリケーションは、メッセージ内の数値データを変換することが必要になる場合があります。 GMCONV オプションを使用すると、MQGET 呼び出しの処理の一部としてメッセージを変換することを キュー・マネージャーに要求できます。

GMCONV オプションが MQGET 呼び出しで指定されている場合、このフィールドは入出力フィールドです。 アプリケーションで指定する値は、必要に応じてメッセージ・データが変換された後のコードです。 変換が成功したか不要の場合、値は変化しません。 変換が失敗したときは、MQGET 呼び出しの後の値は、アプリケーションに戻された未変換メッセージのエンコードを表しています。

それ以外の場合、MQGET 呼び出しでは出力フィールド、MQPUT および MQPUT1 呼び出しでは入力フィールドです。 このフィールドの初期値は ENNAT です。

MDEXP (10 桁の符号付き整数)

メッセージ存続期間。

これは、メッセージを書き込むアプリケーションで設定される時間で、10 分の 1 秒単位で表されます。 この時間が経過するまでに宛先キューからメッセージが除去されなかった場合、そのメッセージは廃棄の対象となります。

メッセージが宛先キューに存在した時間に応じて値は減少します。書き込みがリモート・キューに対するものであるとき、値は中間の伝送キューに存在した時間に対応します。 伝送にかなりの時間がかかった場合は、メッセージ・チャネル・エージェントがその時間に応じて減算する可能性もあります。 同様に、このメッセージを別のキューに送るアプリケーションも、長時間にわたってメッセージを保持した場合には、必要に応じて値を減分することがあります。 しかし、満了時間は概数として扱われるので、短い時間間隔の調節のためにこの値を減分する必要はありません。

アプリケーションが MQGET 呼び出しを用いてメッセージを取り出したとき、MDEXP フィールドは、元の有効期限の残りの時間を表します。

メッセージの有効期限を過ぎると、メッセージはキュー・マネージャーによって廃棄される対象となります。 このメッセージは、現在の実装では、ブラウズまたは非ブラウズ MQGET 呼び出しが行われると廃棄されます (まだ満了していなければメッセージが返されます)。 例えば、MQGMO の GMMO フィールドが MONONE に設定された 非ブラウズ MQGET 呼び出しが FIFO 方式のキューから読み取りを行う場合、満了していないメッセージが最初に出現するまで、満了したメッセージはすべて削除されます。 優先順位方式のキューで同じ呼び出しを発行した場合は、満了していない最初のメッセージより先にキューに到着した満了したメッセージのうち、優先順位が等しいメッセージとそれより優先順位が高いメッセージが廃棄されます。

ブラウズまたは非ブラウズのどちらの MQGET 呼び出しでも、満了したメッセージがアプリケーションに返されることはないので、MQGET 呼び出しが正常に終了した後、メッセージ記述子の MDEXP フィールドの値はゼロより大きいか、特殊値 EIULIM になります。

メッセージをリモート・キューに書き込む場合、メッセージは、宛先キューに到達する前の中間伝送キューにある間に満了してしまう (そして廃棄される) 可能性もあります。

メッセージが ROEXP* レポート・オプションのうちいずれかを指定した場合は、満了したメッセージが廃棄されるときにレポートが生成されます。 オプションがまったく指定されていない場合、そうしたレポートは生成されません。指定時間の経過後は、このメッセージは関係がなくなったと見なされます (後のメッセージに置き換わったと考えられるため)。

有効期限に基づいてメッセージを廃棄する他のプログラムはいずれも、要求に応じて、該当のレポート・メッセージを送らなければなりません。
注:
  1. メッセージがゼロの MDEXP 時間を指定して書き込まれる場合、MQPUT または MQPUT1 呼び出しは、理由コード RC2013 を戻して失敗します。この場合、レポート・メッセージは生成されません。
  2. 有効期限を過ぎたメッセージが、実際に廃棄されないこともあるので、有効期限を過ぎても取り出しの対象にならないメッセージがキューに入っている可能性もあります。 それにもかかわらず、これらのメッセージがキュー内のメッセージとしてカウントされる目的は、キュー・サイズによるトリガーなどです。
  3. 満了レポートは、廃棄の対象となったときでなく、要求に応じてメッセージが実際に廃棄されるときに生成されます。
  4. 要求に応じて、満了メッセージの廃棄および満了レポートを生成するのは、アプリケーションの作業単位の一部ではありません。メッセージが、作業単位で操作される MQGET 呼び出しの結果、廃棄されるようにスケジュールされていたとしても同じです。
  5. ほとんど満了しているメッセージが作業単位の中で MQGET 呼び出しによって取り出され、その後でその作業単位がバックアウトされると、メッセージが廃棄の対象になり、再び取り出すことができないようになることもあります。
  6. ほぼ満了したメッセージが GMLK を指定した MQGET 呼び出しによりロックされる場合、そのメッセージは、GMMUC を指定した MQGET 呼び出しにより検索される前に廃棄対象にすることができます。これが起きる場合は、その後の MQGET 呼び出しにおいて、理由コード RC2034 が戻されます。
  7. 有効期限時刻がゼロよりも大きい要求メッセージを取り出す場合、アプリケーションは応答メッセージを送信するときに以下のいずれかのアクションを実行できます。
    • 有効期限までの残り時間を、要求メッセージから応答メッセージにコピーする。
    • 応答メッセージ中の有効期限を、ゼロより大きい明示的な値に設定する。
    • 応答メッセージ中の満了時間を EIULIM に設定する。
    実行されるアクションは、アプリケーション群の設計によって決まります。 ただし、送達不能 (未配布メッセージ) キューにメッセージを書き込むときのデフォルト・アクションは、メッセージの残りの満了期間から引き続き減算することです。
  8. トリガー・メッセージは常に EIULIM で生成されます。
  9. FMXQH の MDFMT 名があるメッセージ (通常は伝送キュー上) には、MQXQH 内に 2 番目のメッセージ記述子があります。 したがって、メッセージと関連した 2 つの MDEXP フィールドがあります。 この場合、以下の点に注意してください。
    • アプリケーションがリモート・キューにメッセージを書き込む場合、キュー・マネージャーは、メッセージを最初にローカル伝送キューに入れ、MQXQH 構造を用いてアプリケーション・メッセージ・データに接頭部を付加します。 キュー・マネージャーは、2 つの MDEXP フィールドを、アプリケーションによる指定値と同じ値に設定します。

      アプリケーションがローカル伝送キューにメッセージを直接書き込む場合は、メッセージ・データは常に MQXQH 構造体で始まり、形式名は FMXQH でなければなりません (ただし、キュー・マネージャーがこの設定を実行するわけではありません)。 この場合、アプリケーションは 2 つの MDEXP フィールドを同じ値に設定する必要はありません。 (キュー・マネージャーは、MQXQH 内の MDEXP フィールドに有効な値が含まれているかどうか、またはメッセージ・データの長さがそれを含むのに十分な長さであるかどうかを検査しません。)

    • MDFMT 名が FMXQH のメッセージがキュー (これが通常キューであるか伝送キューであるかにかかわらず) から取り出されると、キュー・マネージャーは、キューでの待機に費やされた時間とともに 両方MDEXP フィールドを減らします。 メッセージ・データに MQXQH の MDEXP フィールドを入れるのに十分な長さがない場合、エラーは発生しません。
    • キュー・マネージャーは、別個のメッセージ記述子 (つまり、MQXQH 構造体内部に埋め込まれているメッセージ記述子以外のもの) の MDEXP フィールドを使用して、メッセージが廃棄するものとして適格かどうかをテストします。
    • 2 つの MDEXP フィールドの初期値が異なっていた場合、別個のメッセージが取り出された時点でそのメッセージ記述子の内 MDEXP 時間は、ゼロより大きい (したがってメッセージは廃棄の対象にならない) 可能性があります。ただし MQXQH 内の MDEXP フィールドで規定された時間は経過しています。 この場合、MQXQH の MDEXP フィールドはゼロに設定されます。
以下のような特殊値が認識されます。
EIULIM
制限なしの存続時間。

メッセージは、無制限の満了時間を指定されています。

これは、MQGET 呼び出しでは出力フィールド、MQPUT および MQPUT1 呼び出しでは入力フィールドです。 このフィールドの初期値は EIULIM です。

MDFB (10 桁の符号付き整数)

フィードバックまたは理由コード。

これは、レポートの性質を示すためにメッセージのタイプ MTRPRT と共に使用されるもので、そのタイプのメッセージと共に使用する場合にのみ意味をなします。 このフィールドには、値 FB* のいずれか、または値 RC* のいずれかを指定できます。 フィードバック・コードは、以下のようにグループ化されています。
FBNONE
フィードバックが提供されていない。
FBSFST
システム生成のフィードバックの最低値。
FBSLST
システム生成のフィードバックの最高値。

システム生成のフィードバック・コードの範囲 FBSFST から FBSLST には、このセクションで後述する一般的なフィードバック・コード (FB*) および、メッセージを宛先キューに書き込めないときに戻る可能性のある理由コード (RC*) も含まれています。

FBAFST
アプリケーション生成のフィードバックの最低値。
FBALST
アプリケーション生成のフィードバックの最高値。

レポート・メッセージを生成するアプリケーションでは、キュー・マネージャーまたはメッセージ・チャネル・エージェントが生成するレポート・メッセージをシミュレートしない場合は、システム範囲 (FBQUIT 以外) のフィードバック・コードを使用しないでください。

MQPUT または MQPUT1 呼び出しでは、指定される値は FBNONE であるか、またはその値がシステム範囲かアプリケーション範囲のいずれかになければなりません。 これは、MDMT の値には関係なく検査されます。

一般的なフィードバック・コード:
FBCOA
宛先キューでの到達の確認 (ROCOA 参照)。
FBCOD
受信側アプリケーションへの送達確認 (ROCOD 参照)。
FBEXP
メッセージが満了しました。

メッセージは、有効期限が切れる前に宛先キューから除去されなかったため、廃棄されました。

FBPAN
アクションの正常終了通知 (ROPAN 参照)。
FBNAN
アクションの異常終了通知 (RONAN 参照)。
FBQUIT
アプリケーションを終了してください。

実行中のアプリケーション・プログラムのインスタンス数を制御するために、ワークロード・スケジューリング・プログラムによってのみ使用されます。 このフィードバック・コードと共に MTRPRT メッセージをアプリケーション・プログラムのインスタンスに送信することにより、そのインスタンスに処理を停止する必要があることを指示します。 しかし、この規則の順守はアプリケーション側の問題であり、キュー・マネージャーでは強制しません。

IMSブリッジ・フィードバック・コード: IMS ブリッジがゼロ以外の IMS-OTMA センス・コードを受け取ると、 IMS ブリッジはセンス・コードを 16 進数から 10 進数に変換し、値 FBIERR (300) を追加して、結果を応答メッセージの MDFB フィールドに入れます。 これにより、 IMS-OTMA エラーが発生したときに、フィードバック・コードの値が FBIFST (301) から FBILST (399) の範囲になります。

IMS ブリッジが生成するフィードバック・コードは次のとおりです。
FBDLZ
データ長がゼロ。

セグメント長が、メッセージのアプリケーション・データにおいてゼロであった。

FBDLN
データ長が負の値。

セグメント長が、メッセージのアプリケーション・データにおいて負であった。

FBDLTB
データ長が大きすぎます。

メッセージのアプリケーション・データのセグメント長が大きすぎます。

FBBUFO
バッファー・オーバーフロー。

長さフィールドのどれか 1 つの値が原因で、データがメッセージ・バッファーからオーバーフローしました。

FBLOB1
1 バイト分の長さエラー。

長さフィールドのどれか 1 つの値が、1 バイト短すぎます。

FBIIH
MQIIH 構造体が無効、または欠落しています。

MQMD の MDFMT フィールドには FMIMSが指定されていますが、メッセージは有効な MQIIH 構造体で始まっていません。

FBNAFI
ユーザー ID が IMSでの使用を許可されていません。

メッセージ記述子 MQMD に含まれているユーザー ID、または MQIIH 構造体の IIAUT フィールドに含まれているパスワードが、IMS ブリッジで実行された検証に失敗しました。 その結果、メッセージは IMS に渡されませんでした。

FBIERR
IMSから予期しないエラーが返されました。

予期しないエラーが IMS から戻されました。 エラーの詳細については、 IMS ブリッジが存在するシステムの IBM MQ エラー・ログを参照してください。

FBIFST
IMS生成のフィードバックの最小値。

IMS生成のフィードバック・コードは、FBIFST (300) から FBILST (399) の範囲を占めます。 IMS-OTMA センス・コード自体は、 MDFB から FBIERR を引いた値です。

FBILST
IMS生成のフィードバックの最高値。
CICSブリッジ・フィードバック・コード: CICS bridgeは、以下のフィードバック・コードを生成できます。
FBCAAB
アプリケーションが異常終了しました。

メッセージ内で指定したアプリケーション・プログラムが異常終了しました。 このフィードバック・コードは、MQDLH 構造体の DLREA フィールドのみに戻されます。

FBCANS
アプリケーションを開始できません。

メッセージ内で指定したアプリケーション・プログラムに関する EXEC CICS LINK が失敗しました。 このフィードバック・コードは、MQDLH 構造体の DLREA フィールドのみに戻されます。

FBCBRF
CICS bridge は、通常のエラー処理を完了せずに異常終了しました。
FBCCSE
文字セット ID が無効です。
FBCIHE
CICS 情報ヘッダー構造が欠落している、または無効です。
FBCCAE
CICS COMMAREA の長さが無効です。
FBCCIE
相関 ID が無効です。
FBCDLQ
送達不能キューが使用不可です。

CICS bridge タスクは、この要求に対する応答を送達不能キューにコピーできなかった。 要求はバックアウトされました。

FBCENE
エンコードが無効です。
FBCINE
CICS bridge が予期しないエラーを検出しました。

このフィードバック・コードは、MQDLH 構造体の DLREA フィールドのみに戻されます。

FBCNTA
ユーザー ID が許可されないか、パスワードが無効です。

このフィードバック・コードは、MQDLH 構造体の DLREA フィールドのみに戻されます。

FBCUBO
作業単位がバックアウトされました。
以下のいずれかの理由により、作業単位がバックアウトされました。
  • 同じ作業単位内の他の要求の処理中に障害が検出された。
  • 作業単位の処理中に CICS の異常終了が発生した。
FBCUWE
作業単位制御フィールド CIUOW が無効です。
MQ 理由コード: 例外レポート・メッセージの場合は、MDFB に MQ 理由コードが格納されます。 代表的な理由コードは次のとおりです。
RC2051
(2051, X'803') このキューでは書き込み呼び出しが使用禁止になっています。
RC2053
(2053, X'805') キューには既に最大数のメッセージが入っています。
RC2035
(2035, X'7F3') アクセスは許可されません。
RC2056
(2056, X'808') ディスク上にキューのためのスペースがありません。
RC2048
(2048, X'800') キューは永続的なメッセージをサポートしていません。
RC2031
(2031, X'7EF') メッセージ長がキュー・マネージャーの最大許容長より大きいです。
RC2030
(2030, X'7EE') メッセージの長さが、キューの最大許容数より大きいです。

これは、MQGET 呼び出しでは出力フィールド、MQPUT および MQPUT1 呼び出しでは入力フィールドです。 このフィールドの初期値は FBNONE です。

MDFMT (8 バイトの文字ストリング)

メッセージ・データの形式名。

これは、メッセージの送信側が受信側に対してメッセージ内のデータの性質を示すために使用できる名前です。 この名前には、キュー・マネージャーの文字セットにある文字はすべて指定できますが、指定する名前を次のものに制限することをお勧めします。
  • A から Z までの英大文字
  • 0 から 9 までの数字
上記以外の文字が使用されている場合は、送信側および受信側のキュー・マネージャーの文字セットの間で名前を変換できないこともあります。

名前は、フィールドの長さまでブランクを埋め込む必要があります。あるいは、フィールドの終わりになる前に名前を終了させるためにヌル文字を使用します。ヌル文字およびそれに続く文字は、ブランクと見なされます。 名前の前または途中にはブランクを指定しないでください。 MQGET 呼び出しの場合は、キュー・マネージャーは、フィールドの長さまでブランクを埋め込んだ名前を戻します。

キュー・マネージャーは、名前が上述の推奨事項に準じているかどうかは検査しません。

大文字、小文字、および大文字小文字混合の「MQ」で始まる名前には、キュー・マネージャーで定義された意味があるため、ユーザー独自の形式にはこの文字で始まる名前を使用しないでください。 キュー・マネージャーの組み込み形式は次のとおりです。
FMNONE
形式名がありません。

データの性質が未定義です。 これは、GMCONV オプションを使用してメッセージをキューから取り出すときにデータを 変換できないことを意味します。

GMCONV が MQGET 呼び出しで指定されており、メッセージ内のデータの文字セットまたはエンコード が MSGDSC パラメーターで指定されているものと異なる場合、メッセージは次の完了コードと理由コードで戻されます (その他のエラーが発生しないと想定します)。
  • FMNONE データがメッセージの先頭にある場合は、完了コード CCWARN および理由コード RC2110。
  • FMNONE データがメッセージの終わりにある (つまり、1 つ以上の MQ ヘッダー構造体が 前にある) 場合は、完了コード CCOK および理由コード RCNONE。 この場合、MQ ヘッダー構造体は、要求されている文字セットとエンコード方式に変換されます。
FMADMN
コマンド・サーバー要求/応答メッセージ。

メッセージは、プログラマブル・コマンド・フォーマット (PCF) のコマンド・サーバー要求または応答メッセージです。 GMCONV オプションを MQGET 呼び出しに指定している場合は、この形式のメッセージを変換することができます。 プログラマブル・コマンド・フォーマット・メッセージの使用について詳しくは、「 プログラマブル・コマンド・フォーマットの使用」を参照してください。

FMCICS
CICS 情報ヘッダー。

メッセージ・データは、 CICS 情報ヘッダー MQCIH で始まり、その後にアプリケーション・データが続きます。 アプリケーション・データの形式名は、MQCIH 構造体の CIFMT フィールドに指定されています。

FMCMD1
タイプ 1 のコマンド応答メッセージ。

このメッセージは、オブジェクト・カウント、完了コード、および理由コードが入っている MQSC コマンド・サーバー応答メッセージです。 GMCONV オプションを MQGET 呼び出しに指定している場合は、この形式のメッセージを変換することができます。

FMCMD2
タイプ 2 のコマンド応答メッセージ。

このメッセージは、要求されたオブジェクト (複数も可) についての情報が入っている MQSC コマンド・サーバー応答メッセージです。 GMCONV オプションを MQGET 呼び出しに指定している場合は、この形式のメッセージを変換することができます。

FMDLH
送達不能ヘッダー。

メッセージ・データは送達不能ヘッダー MQDLH で始まります。 元のメッセージからのデータは、MQDLH 構造体のすぐ後に続きます。 元のメッセージ・データの形式名は、MQDLH 構造体の DLFMT フィールドで指定します。この構造体の詳細については、 IBM i での MQDLH (送達不能ヘッダー) を参照してください。 GMCONV オプションを MQGET 呼び出しに指定している場合は、この形式のメッセージを変換することができます。

FMDLH の MDFMT を持つメッセージの場合、COA および COD レポートは生成されません。

FMDH
配布リスト・ヘッダー。

メッセージ・データは、配布リスト・ヘッダー MQDH で始まります。このデータの中には、MQOR レコードおよび MQPMR レコードの配列などがあります。 配布リスト・ヘッダーの後に補足データが続くこともあります。 追加データ (ある場合) の形式は、MQDH 構造体の DHFMT フィールドで指定します。この構造体の詳細については、 IBM i を参照してください。 MQGET 呼び出しで GMCONV オプションが指定されていれば、FMDH 形式のメッセージを変換することができます。

FMEVNT
イベント・メッセージ。

メッセージは、発生したイベントを報告する MQ イベント・メッセージです。 イベント・メッセージの構造は、プログラマブル・コマンドと同じです。この構造について詳しくは、 コマンドと応答の構造を参照してください。 イベントについては、 イベント・モニターを参照してください。

GMCONV オプションが MQGET 呼び出しで指定されていれば、バージョン 1 のイベント・メッセージを変換することができます。

FMIMS
IMS 情報ヘッダー。

メッセージ・データは、IMS 情報ヘッダー MQIIH で始まり、アプリケーション・データが後に続きます。 アプリケーション・データの形式名は、MQIIH 構造体の IIFMT フィールドに指定されています。 GMCONV オプションを MQGET 呼び出しに指定している場合は、この形式のメッセージを変換することができます。

FMIMVS
IMS 変数ストリング。
メッセージは IMS 可変長ストリングで、形式は llzzccc です。各部分の詳細は次のとおりです。
ll
IMS 可変長ストリング項目の合計長を指定する長さ 2 バイトのフィールドです。 合計長は、「ll (2 バイト) + zz (2 バイト) + 文字ストリングの長さ」となります。 ll は、MDENC フィールドに指定されたエンコードで表された 2 バイトの 2 進整数を示します。
zz
IMS にとって有効なフラグを含む 2 バイト・フィールドです。 zz は 2 つの 1 バイトのビット・ストリング・フィールドから成るバイト・ストリングを示し、送信しても送信側と受信側の間でその内容が変わることはありません (つまり、zz は変換の影響を受けません)。
ccc
可変長文字ストリングを示します。長さは ll-4 文字です。 ccc は、MDCSI フィールドで指定された文字セットで表されます。

GMCONV オプションを MQGET 呼び出しに指定している場合は、この形式のメッセージを変換することができます。

FMMDE
拡張メッセージ記述子。

メッセージ・データは、拡張メッセージ記述子 MQMDE で始まります。このデータの後に他のデータ (通常はアプリケーション・メッセージ・データ) が続くこともあります。 MQMDE の後に続くデータの形式名、文字セット、およびエンコードは、MQMDE の MEFMT フィールド、MECSI フィールド、および MEENC フィールドでそれぞれ与えられます。 この構造体の詳細については、 IBM i での MQMDE (メッセージ記述子拡張) を参照してください。 GMCONV オプションを MQGET 呼び出しに指定している場合は、この形式のメッセージを変換することができます。

FMPCF
プログラマブル・コマンド・フォーマット (PCF) でのユーザー定義のメッセージ。

このメッセージは、プログラマブル・コマンド・フォーマット (PCF) メッセージの構造体に適合するユーザー定義のメッセージです。 GMCONV オプションを MQGET 呼び出しに指定している場合は、この形式のメッセージを変換することができます。 プログラマブル・コマンド・フォーマット・メッセージの使用について詳しくは、「 プログラマブル・コマンド・フォーマットの使用 」を参照してください。

FMRMH
参照メッセージ・ヘッダー。

メッセージ・データは、参照メッセージ・ヘッダー MQRMH で始まります。このデータの後に他のデータが続くこともあります。 データの形式名、文字セット、およびエンコードは、MQRMH の RMFMTRMCSI、および RMENC の各フィールドで指定されます。 この構造体の詳細については、 IBM i での MQRMH (参照メッセージ・ヘッダー) を参照してください。 GMCONV オプションを MQGET 呼び出しに指定している場合は、この形式のメッセージを変換することができます。

FMRFH
規則およびフォーマット・ヘッダー。

メッセージ・データは、規則およびフォーマット・ヘッダー MQRFH で始まります。このデータの後に他のデータが続くこともあります。 データの形式名、文字セット、およびエンコードは、MQRFH の RFFMTRFCSI、および RFENC フィールドでそれぞれ与えられます。 GMCONV オプションを MQGET 呼び出しに指定している場合は、この形式のメッセージを変換することができます。

FMRFH2
規則およびフォーマット・ヘッダー・バージョン 2。

メッセージ・データは、バージョン 2 の規則およびフォーマット・ヘッダー MQRFH2 で始まります。このデータの後に他のデータが続くこともあります。 オプションのデータの形式名、文字セット、およびエンコードは、MQRFH2 の RF2FMTRF2CSI、および RF2ENC フィールドで指定されます。 GMCONV オプションを MQGET 呼び出しに指定している場合は、この形式のメッセージを変換することができます。

FMSTR
全体が文字で構成されているメッセージ。

アプリケーション・メッセージ・データは SBCS ストリング (1 バイト文字セット)、または DBCS ストリング (2 バイト文字セット) のいずれかにすることができます。 GMCONV オプションを MQGET 呼び出しに指定している場合は、この形式のメッセージを変換することができます。

FMTM
トリガー・メッセージ。

メッセージは、MQTM 構造体によって記述されるトリガー・メッセージです。この構造体の詳細については、 MQTM-トリガー・メッセージ を参照してください。 GMCONV オプションを MQGET 呼び出しに指定している場合は、この形式のメッセージを変換することができます。

FMWIH
作業情報ヘッダー。

メッセージ・データは、作業情報ヘッダー MQWIH で始まり、その後にアプリケーション・データが続きます。 アプリケーション・データの形式名は、MQWIH 構造体の WIFMT フィールドで指定します。

FMXQH
伝送キュー・ヘッダー。

メッセージ・データは伝送キュー・ヘッダー MQXQH で始まります。 元のメッセージからのデータは、MQXQH 構造体のすぐ後に続きます。 元のメッセージ・データの形式名は、伝送キュー・ヘッダー MDFMT の一部である MQMD 構造体の MDFMT フィールドによって指定されます。 この構造体の詳細については、 IBM i での MQXQH (伝送キュー・ヘッダー) を参照してください。

FMXQH の MDFMT を持つメッセージには、COA および COD レポートは生成されません。

これは、MQGET 呼び出しでは出力フィールド、MQPUT および MQPUT1 呼び出しでは入力フィールドです。 このフィールドの長さは LNFMT によって指定されます。 このフィールドの初期値は FMNONE です。

MDGID (24 バイトのビット・ストリング)

グループ ID。

物理メッセージが属する特定のメッセージ・グループまたは論理メッセージを識別するために使用されるバイト・ストリングです。 MDGID フィールドは、メッセージのセグメント化が許可されている場合にも使用します。 いずれの場合についても、MDGID フィールドにはヌル以外の値を設定し、MDMFL フィールドには以下に示すフラグのうち 1 つ以上を設定します。
  • MFMIG
  • MFLMIG
  • MFSEG
  • MFLSEG
  • MFSEGA
上記のフラグを設定しなかった場合、MDGID の値は特殊なヌル値である GINONE となります。
MQPUT または MQGET 呼び出しでは、以下の場合には、アプリケーションがこのフィールドを設定する必要はありません。
  • MQPUT 呼び出しで、PMLOGO を指定した場合
  • MQGET 呼び出しで、MOGRPI が指定されていない場合。
これらの呼び出しをレポート・メッセージ以外のメッセージに使用する場合について考えてみます。 ただし、アプリケーションがさらに制御を要求する場合、または呼び出しが MQPUT1 の場合、アプリケーションは、MDGID に適切な値が設定されていることを確認する必要があります。
メッセージ・グループおよびメッセージ・セグメントは、グループ ID が重複していない場合にのみ正しく処理できます。 そのため、アプリケーションごとに固有のグループ ID を生成しないでください。 アプリケーションでは次のいずれかの処理を行ってください。
  • PMLOGO を指定した場合は、キュー・マネージャーが、グループにまとめられているメッセージまたは論理メッセージのセグメントであるメッセージの中の最初のメッセージに対して固有のグループ ID を自動的に生成し、残りのメッセージにそのグループ ID を使用します。したがって、アプリケーションで特別なアクションをとる必要はありません。 この手順を使用することを検討してください。
  • PMLOGO を指定しなかった場合は、アプリケーションからキュー・マネージャーにグループ ID を生成するよう要求してください。要求するには、グループにまとめられているメッセージまたは論理メッセージのセグメントであるメッセージに対して発行する最初の MQPUT または MQPUT1 呼び出しで MDGID に GINONE を設定してください。 そして、その呼び出しの出力時にキュー・マネージャーから戻されるグループ ID をグループの残りのメッセージ、あるいは論理メッセージのセグメントに使用してください。 メッセージ・グループの中にセグメント分割されたメッセージがある場合は、そのグループのすべてのセグメントおよびメッセージに、同じグループ ID を使用する必要があります。

    PMLOGO を指定しなかった場合は、グループに属するメッセージおよび論理メッセージのセグメントであるメッセージを任意の順序 (逆順など) で書き込むことができますが、このようなメッセージに対して発行する最初 の MQPUT 呼び出しまたは MQPUT1 呼び出しでグループ ID を割り振る必要があります。

MQPUT 呼び出しおよび MQPUT1 呼び出しへの入力時に、キュー・マネージャーは PMOPTで詳述されている値を使用します。 MQPUT 呼び出しおよび MQPUT1 呼び出しの出力時に、オープンされたオブジェクトが単一キューであり、配布リストではない場合、キュー・マネージャーはこのフィールドに、メッセージと共に送信された値を設定します。オープンされたオブジェクトが配布リストである場合、このフィールドの値は変わりません。 後者の場合、生成されたグループ ID をアプリケーションで認識するには、アプリケーションは PRGID フィールドのある MQPMR レコードを提供する必要があります。

MQGET 呼び出しへの入力では、キュー・マネージャーは 表 1 で詳述されている値を使用します。 MQGET 呼び出しの出力時に、キュー・マネージャーは、このフィールドに、取り出されたメッセージの値を設定します。

以下のような特殊値が定義されます。
GINONE
グループ ID は指定されません。

値は、フィールドの長さについては 2 進ゼロです。 この値は、グループに含まれていないメッセージ (論理メッセージのセグメントではない) で、かつセグメント化が許可されていないメッセージに使用されます。

このフィールドの長さは、LNGID で指定されます。 このフィールドの初期値は GINONE です。 MDVER 値が MDVER2 未満の場合、このフィールドは無視されます。

MDMFL (10 桁の符号付き整数)

メッセージ・フラグ。

メッセージの属性を指定したり、メッセージの処理を制御したりするフラグを指定します。 フラグには次の 2 種類があります。
  • セグメント化フラグ
  • 状況フラグ
以降に、これらのフラグについて説明します。

セグメント化フラグ: メッセージが大きすぎてキューに入らない場合、メッセージをキューに書き込もうとすると通常は失敗します。 セグメント化とは、キュー・マネージャーまたはアプリケーションがメッセージをセグメントといういくつかの小さな単位に分割して、各セグメントを別個の物理メッセージとしてキューに入れるための手法を指します。 メッセージを取り出すアプリケーションは、セグメントを 1 つずつ取り出すか、またはキュー・マネージャーに対してセグメントを再組み立てして 1 つのメッセージにするよう要求することができます。後者の場合、メッセージは MQGET 呼び出しで返されます。 後者の方法を行うには、MQGET 呼び出しで GMCMPM オプションを指定して、メッセージ全体を収容できるだけの長さのバッファーを提供します。 (GMCMPM オプションについて詳しくは、 IBM i を参照してください。) メッセージのセグメント化は、送信側のキュー・マネージャー、中間キュー・マネージャー、または宛先キュー・マネージャーで実行できます。

以下のいずれかのオプションを指定すると、メッセージのセグメント化を制御できます。
MFSEGI
セグメント化を禁止します。

このオプションを指定した場合、キュー・マネージャーはメッセージをセグメントに分割することはできません。 すでにセグメントになっているメッセージに対して、このオプション指定すると、そのセグメントはさらに小さいセグメントに分割されることはありません。

このフラグの値は 2 進ゼロです。 これはデフォルトです。

MFSEGA
セグメント化できます。

このオプションを指定した場合、キュー・マネージャーはメッセージをセグメントに分割することができます。 すでにセグメントになっているメッセージにこのオプションを指定した場合は、そのセグメントをさらにいくつかの小さなセグメントに分割することができます。 MFSEGA は、MFSEG または MFLSEG を設定していなくても設定できます。

キュー・マネージャーは、メッセージをセグメント化するときに、各セグメントとともに送信される MQMD のコピーの MFSEG フラグをオンにします。ただし、アプリケーションが MQPUT または MQPUT1 呼び出しで提供する MQMD 内のこれらのフラグの設定は変更しません。 論理メッセージ内の最後のセグメントである場合には、キュー・マネージャーは、セグメントとともに送信される MQMD 内の MFLSEG フラグもオンにします。

注: PMLOGO を指定せずに MFSEGA を使用してメッセージを書き込む場合は、注意が必要です。 メッセージが次の条件に該当する場合、
  • セグメントではない
  • グループに属していない
  • 転送されない
アプリケーションは、各メッセージごとにキュー・マネージャーによって固有のグループ ID が生成されるようにするために、 それぞれの MQPUT または MQPUT1 呼び出しの前に、 MDGID フィールドを GINONE にリセットする必要があります。 この操作を行わないと、互いに関連のないメッセージに誤って同じグループ ID が割り当てられ、それ以降の処理で問題が発生することがあります。 MDGID フィールドをリセットしなければならない場合の詳細については、MDGID フィールドおよび PMLOGO オプションを参照してください。
キュー・マネージャーは、セグメント (必要な場合はセグメントにヘッダー・データを加えたもの) がキューに収まるように、必要に応じてメッセージをいくつかのセグメントに分割します。 ただし、キュー・マネージャーが生成する 1 つのセグメントのサイズには下限があり、この下限より小さくできるのは、あるメッセージから作成された最後のセグメントのみです。 アプリケーションが生成するセグメントのサイズの下限は 1 バイトです。 キュー・マネージャーが生成する各セグメントのサイズは、均等にならないことがあります。 キュー・マネージャーは、メッセージを次のように処理します。
  • ユーザー定義の形式の場合は、16 バイトの倍数の境界で分割する。 つまり、キュー・マネージャーでは、(最後のセグメントを除いて) 16 バイトより小さいセグメントは生成されません。
  • 組み込み形式の場合は、FMSTR 形式を除き、存在するデータの性質に合った箇所で分割する。 ただし、MQ ヘッダー構造体の途中ではメッセージを分割しません。 つまり、MQ ヘッダー構造体が 1 つ含まれているセグメントは、それ以上分割されず、結果として、そのメッセージの最小セグメント・サイズは 16 バイトより大きくなります。
    キュー・マネージャーが生成する 2 番目以降のセグメントは、次のいずれかで開始されます。
    • MQ ヘッダー構造
    • アプリケーション・メッセージ・データの先頭
    • アプリケーション・メッセージ・データの途中
  • FMSTR 形式の場合は、存在するデータの性質 (SBCS、DBCS、またはこれらが混在した SBCS/DBCS) に関係なく分割します。 ストリングが DBCS または SBCS/DBCS である場合は、文字セットの変換ができないセグメントになることがあります。 キュー・マネージャーは、(最後のセグメントを除いて) FMSTR メッセージを 16 バイトより小さいセグメントに分割することはありません。
  • 各セグメントの MQMD 内の MDFMTMDCSI、および MDENC フィールドは、セグメントの 開始 時に存在するデータを正しく記述するためにキュー・マネージャーによって設定されます。形式名は、組み込み形式の名前またはユーザー定義形式の名前のいずれかになります。
  • MDOFF の値がゼロより大きいセグメントについて、MQMD の MDREP フィールドを以下のように変更します。
    • 各レポート・タイプについて、レポート・オプションが RO*D であるのに、セグメント内にユーザー・データ (MQ ヘッダー構造体が存在する場合にそのあとに続くデータ) の最初の 100 バイトが入っていない場合は、レポート・オプションを RO* に変更します。
キュー・マネージャーは上記の規則に従いますが、それ以外でも予期せずにメッセージを分割することがあります。そのため、メッセージがどこで分割されるかについては推測しないでください。
持続 メッセージの場合、キュー・マネージャーは作業単位の範囲内でのみセグメント化を実行できます。ただし、次のような点に注意してください。
  • MQPUT または MQPUT1 呼び出しがユーザー定義の作業単位内で実行されていれば、その作業単位が使用されます。 セグメント分割の処理中に呼び出しが失敗した場合、キュー・マネージャーはその呼び出しによりキューに入れられたセグメントを除去します。 ただし、このように失敗しても、作業単位は正常にコミットされます。
  • 呼び出しがユーザー定義の作業単位以外で実行されていて、またユーザー定義の作業単位が存在していない場合、キュー・マネージャーは、この呼び出しの間だけの作業単位を作成します。 呼び出しが成功すると、キュー・マネージャーは作業単位を自動的にコミットします (アプリケーションでこれを行う必要はありません)。 呼び出しが失敗すると、キュー・マネージャーは作業単位をバックアウトします。
  • 呼び出しがユーザー定義の作業単位の範囲外で動作しているときに、ユーザー定義の作業単位が存在する 場合、キュー・マネージャーはセグメント化を実行できません。 メッセージをセグメントに分割する必要がない場合には、呼び出しは成功します。 しかし、メッセージをセグメントに分割する必要がある 場合には、理由コード RC2255 を戻して、呼び出しは失敗します。

非持続 メッセージの場合、キュー・マネージャーはセグメント化を実行するために作業単位を使用できるようにする必要はありません。

セグメントに分割するメッセージのデータ変換に関して、以下に示す特別な考慮事項を定める必要があります。
  • MQGET 呼び出しで受信側のアプリケーションのみがデータ変換を実行し、かつそのアプリケーションで GMCMPM オプションを指定した場合は、データ変換出口で変換を行うために、データ変換出口に完全なメッセージが渡されます。しかし、メッセージがセグメントに分割されたことはデータ変換出口では認識しません。
  • 受信側のアプリケーションが 1 回につき 1 つのセグメントを取り出す場合は、データ変換出口を呼び出して 1 回につき 1 つのセグメントを変換します。 したがって、データ変換出口は各セグメント内のデータを他のセグメント内のデータと関係なく変換できることが必要となります。

    メッセージのデータの性質上、16 バイト境界でデータをセグメントに分割すると、データ変換出口で変換できないセグメントになるような場合、または形式が FMSTR で文字セットが DBCS または SBCS/DBCS である場合は、送信側のアプリケーション自体がセグメントを作成して書き込み、MFSEGI を指定してこれらのセグメントがさらにいくつかのセグメントに分割されないようにします。 これにより、送信側のアプリケーションでは、データ変換出口が各セグメントを正常に変換できるだけの十分な情報が各セグメントに含まれるようにすることができます。

  • 送信側のメッセージ・チャネル・エージェント (MCA) に対して送信側での変換を指定した場合、MCA は論理メッセージのセグメントでないメッセージのみを変換し、論理メッセージのセグメントであるメッセージは変換しません。

このフラグは、MQPUT 呼び出しおよび MQPUT1 呼び出しでは入力フラグであり、MQGET 呼び出しでは出力フラグです。 後者の呼び出しの場合、キュー・マネージャーはこのフラグの値を MQGMO の GMSEG フィールドにも反映します。

このフラグの初期値は MFSEGI です。

状況フラグ: 物理メッセージの状況を示すフラグです。この状況は、メッセージ・グループに属する、論理メッセージのセグメントである、メッセージ・グループに属し、かつ論理メッセージのセグメントである、メッセージ・グループに属さず、かつ論理メッセージのセグメントでもない、のいずれかです。 MQPUT 呼び出し、または MQPUT1 呼び出しでは、以下のオプションのうち 1 つ以上を指定できます。MQGET 呼び出しでは以下のオプションのうち 1 つ以上が戻されます。
MFMIG
メッセージは特定のグループのメンバーである。
MFLMIG
メッセージはグループ内の最後の論理メッセージです。

このフラグを設定すると、キュー・マネージャーはメッセージで送信される MQMD のコピーの MFMIG をオンにしますが、MQPUT または MQPUT1 呼び出しでアプリケーションで提供される MQMD のフラグの設定は変更しません。

このフラグは 1 つの論理メッセージのみで構成されるグループにも有効です。 この場合にも、このフラグは設定されますが、MDSEQ フィールドの値は 1 になります。

MFSEG
メッセージは論理メッセージのセグメントです。

MFSEG を指定して MFLSEG を指定しなかった場合、セグメント内のアプリケーション・メッセージ・データの長さ (MQ ヘッダー構造体が存在する場合にはその長さを除く ) は 1 以上でなければなりません。 長さがゼロの場合、MQPUT または MQPUT1 呼び出しは、理由コード RC2253 で失敗します。

MFLSEG
メッセージは論理メッセージの最後のセグメントです。

このフラグを設定すると、キュー・マネージャーはメッセージで送信される MQMD のコピーの MFSEG をオンにしますが、MQPUT または MQPUT1 呼び出しでアプリケーションで提供される MQMD のフラグの設定は変更しません。

このフラグは 1 つのセグメントのみで構成される論理メッセージにも有効です。 この場合にも、このフラグは設定されますが、MDOFF フィールドの値はゼロになります。

MFLSEG を指定した場合、セグメント内のアプリケーション・メッセージ・データの長さ (ヘッダー構造体が存在する場合にはその長さを 除く) がゼロでも構いません。

アプリケーションでは、メッセージの書き込み時にこれらのフラグが正しく設定されるようにする必要があります。 PMLOGO を指定した場合、または前に行ったキュー・ハンドルに対する MQPUT 呼び出しで MQPMO_LOGICAL_ORDER を指定した場合は、このフラグの設定値はキュー・マネージャーがキュー・ハンドル用に保存するグループ情報およびセグメント情報が矛盾してはなりません。 PMLOGO を指定した場合、キュー・ハンドルに対して連続した MQPUT 呼び出しを行うときには以下の条件があります。
  • 現行のグループおよび論理メッセージがない場合は、上記のすべてのフラグ (およびこれらのフラグを組み合わせたもの) が有効です。
  • MFMIG を指定した場合には、MFLMIG を指定するまで MFMIG をオンにしておいてください。 この条件が満たされないと、呼び出しは失敗し理由コード RC2241 が戻ります。
  • MFSEG を指定した場合には、MFLSEG を指定するまで MFMIG をオンにしておいてください。 この条件が満たされないと、呼び出しは失敗し理由コード RC2242 が戻ります。
  • MFMIG を指定しないで MFSEG を指定した場合には、MFLSEG が指定されるまで MFMIG をオフ にしておいてください。 この条件が満たされないと、呼び出しは失敗し理由コード RC2242 が戻ります。
表 1 に、フラグの有効な組み合わせと、各種フィールドに使用される値を示します。

これらのフラグは、MQPUT 呼び出し、および MQPUT1 呼び出しでは入力フラグであり、MQGET 呼び出しでは出力フラグです。 後者の呼び出しの場合、キュー・マネージャーはフラグの値を MQGMO の GMGST フィールドおよび GMSST フィールドにも反映します。

デフォルト・フラグ : メッセージにデフォルト属性が設定されていることを示すために、以下のフラグを指定できます。
MFNONE
メッセージ・フラグはありません (デフォルトのメッセージ属性)。

これはセグメンテーションを禁止し、メッセージがグループに属していないこと、およびメッセージが論理メッセージのセグメントではないことを示します。 MFNONE は、プログラムの文書化を支援するために定義されています。 このフラグを他の目的で使用することは意図されていませんが、値がゼロであるため、そのように使用しても検出されることはありません。

MDMFL フィールドはサブフィールドに分割されます。詳しくは、 IBM iを参照してください。

このフィールドの初期値は MFNONE です。 MDVER 値が MDVER2 未満の場合、このフィールドは無視されます。

MDMID (24 バイトのビット・ストリング)

メッセージ ID。

あるメッセージを他のメッセージと区別するために使用されるバイト・ストリングです。 2 つのメッセージが同じメッセージ ID を持つことは、キュー・マネージャーによって禁止されませんが、通常は避けてください。 メッセージ ID は、メッセージの永続的なプロパティーであり、キュー・マネージャーを再始動しても存続します。 メッセージ ID は、文字ストリングではなくバイト・ストリングなので、あるキュー・マネージャーから別のキュー・マネージャーへメッセージが流れても、文字セット間の変換は行われません。

MQPUT 呼び出しおよび MQPUT1 呼び出しの場合、MINONE または PMNMID がアプリケーションによって指定されていると、キュー・マネージャーは、メッセージが書き込まれるときに固有のメッセージ ID 1 を生成し、それをメッセージと一緒に送信されるメッセージ記述子に入れます。 また、キュー・マネージャーは、送信側のアプリケーションに属するメッセージ記述子の中にこのメッセージ ID を返します。 アプリケーションは、この値を使用して、特定のメッセージに関する情報を記録し、アプリケーションの他の部分からの照会に応答することができます。

メッセージをトピックに書き込む場合、キュー・マネージャーは、パブリッシュされるメッセージごとに必要に応じて固有のメッセージ ID を生成します。 PMNMID がアプリケーションによって指定されている場合、キュー・マネージャーは固有のメッセージ ID を生成して出力に戻します。 MINONE がアプリケーションによって指定される場合、MQMD 内の MDMID フィールドの値は呼び出しからの戻り時に変更されません。

保存パブリケーションの詳細については、 PMOPT の PMRET の説明を参照してください。

メッセージを配布リストに書き込む場合は、キュー・マネージャーが必要に応じて固有のメッセージ ID を生成しますが、MINONE または PMNMID を指定したとしても、呼び出しからの戻り時に、MQMD の MDMID フィールドの値が変更されることはありません。 キュー・マネージャーが生成するメッセージ ID をアプリケーションで認識するには、アプリケーションは PRMID フィールドのある MQPMR レコードを提供する必要があります。

また、送信側のアプリケーションは、MINONE 以外の特定の値をメッセージ ID に指定することができます。これによって、キュー・マネージャーは固有のメッセージ ID の生成を停止します。 メッセージを転送するアプリケーションでは、この機能を使用して元のメッセージのメッセージ ID を伝搬することができます。

キュー・マネージャー自体は、以下の目的以外に、このフィールドを使用することはありません。
  • 要求があれば、上述のように固有値を生成する。
  • メッセージの取得要求を発行したアプリケーションに値を配布する。
  • このメッセージについて生成されたレポート・メッセージがあれば、(MDREP オプションに応じて) そのレポート・メッセージの MDCID フィールドに値をコピーする。

キュー・マネージャーまたはメッセージ・チャネル・エージェントは、レポート・メッセージを生成するとき、元のメッセージの MDREP フィールド、すなわち RONMI または ROPMI のいずれかによって指定された方法で MDMID フィールドを設定します。 レポート・メッセージを生成するアプリケーションも、上記の指定を行います。

MQGET 呼び出しの場合、MDMID は、キューから取得する特定のメッセージを選択するために使用できる 5 つのフィールドの 1 つです。 通常、MQGET 呼び出しでは、キューにある次のメッセージを取り出しますが、特定のメッセージが必要な場合には、5 つの選択基準の 1 つ以上を任意の組み合わせで指定することによって目的のメッセージを取得できます。このメッセージの選択には、次のフィールドを使用できます。
  • MDMID
  • MDCID
  • MDGID
  • MDSEQ
  • MDOFF
アプリケーションでは、これらのフィールドの 1 つ以上を必要な値に設定した上で、MQGMO の GMMO フィールドに対応する MO* 一致オプションを設定して、これらのフィールドを選択基準として使用するように指定します。 これらのフィールドに値が指定されたメッセージだけが取り出しの対象になります。 (アプリケーション側で変更しない場合は) GMMO フィールドのデフォルトでは、メッセージ ID および相関 ID の 2 つが選択基準として使用されます。

通常は、選択基準を満たす最初 のメッセージがキューから戻されます。 ただし、GMBRWN を指定した場合は、選択基準を満たす次の メッセージが戻されます。このメッセージの走査は、現行カーソル位置の から開始されます。

注: キューは、選択基準を満たすメッセージについて順次スキャンされます。したがって、特に適切なメッセージが見つかる前に多数のメッセージをスキャンする必要がある場合は、選択基準が指定されていない場合よりも検索時間が遅くなります。

さまざまな状況で選択基準がどのように使用されるかについて詳しくは、 表 1 を参照してください。

メッセージ ID として MINONE を指定すると、MOMSGI を指定しなかった場合と同じ結果になります。つまり、すべてのメッセージ ID が一致することになります。

GMMUC オプションが、MQGET 呼び出しの GMO パラメーターで指定されている場合、このフィールドは無視されます。

MQGET 呼び出しから戻ったとき、MDMID フィールドは、戻されたメッセージ (それがある場合) のメッセージ ID に設定されます。

以下に示す特別な値が使用されることがあります。
MINONE
メッセージ ID が指定されていません。

値は、フィールドの長さについては 2 進ゼロです。

これは、MQGET、MQPUT、および MQPUT1 呼び出しの入出力フィールドです。 このフィールドの長さは LNMID によって指定されます。 このフィールドの初期値は MINONE です。

MDMT (10 桁の符号付き整数)

メッセージ・タイプ。

これは、メッセージ・タイプを示します。 メッセージ・タイプは、以下のようにグループ化されています。
MTSFST
システム定義のメッセージ・タイプに関する最低値。
MTSLST
システム定義のメッセージ・タイプに関する最高値。
現在、以下の値がシステム範囲内で定義されています。
MTDGRM
応答を必要としないメッセージ。

メッセージは、応答が不要なメッセージです。

MTRQST
応答を必要とするメッセージ。

メッセージは、応答が必要なメッセージです。

応答の送信先のキューの名前が MDRQ フィールドで指定されていることが必要です。 MDREP フィールドは、応答の MDMID および MDCID が設定される方法を示すものです。

MTRPLY
以前の要求メッセージに対する応答。

このメッセージは、以前の要求メッセージ (MTRQST) に対する応答です。 このメッセージは、要求メッセージの MDRQ フィールドが示すキューに送信される必要があります。 要求の MDREP フィールドを使用して、応答の MDMID および MDCID の設定方法を制御することが必要です。

注: キュー・マネージャーは要求と応答の関係を強制しません。これはアプリケーションの責任です。
MTRPRT
レポート・メッセージ。

このメッセージは何らかの予期したオカレンスまたは予期しないオカレンスについて報告するもので、通常は一部のその他のメッセージと関連します (例えば、無効なデータの入った要求メッセージを受信した、など)。 このメッセージは、元のメッセージのメッセージ記述子の MDRQ フィールドが示すキューに送信される必要があります。 レポートの性質を示すために MDFB フィールドの設定が必要です。 元のメッセージの MDREP フィールドを使用して、レポートの MDMID および MDCID の設定方法を制御することが必要です。

キュー・マネージャーまたはメッセージ・チャネル・エージェントによって生成されたレポート・メッセージは、前述のように MDFB および MDCID フィールドが設定された状態で、常に MDRQ キューに送信されます。

システム範囲内にあるその他の値も、MQI の将来のバージョンで定義される可能性があります。定義後は、MQPUT および MQPUT1 呼び出しによって、エラーなしで受け入れられます。

アプリケーション定義の値を使用することもできます。 ただし、以下の範囲内でなければなりません。
MTAFST
アプリケーション定義のメッセージ・タイプに関する最低値。
MTALST
アプリケーション定義のメッセージ・タイプに関する最高値。

MQPUT 呼び出しおよび MQPUT1 呼び出しでは、MDMT 値は、システム定義の範囲かアプリケーション定義の範囲内でなければなりません。この範囲内でない場合、呼び出しは理由コード RC2029 で失敗します。

これは、MQGET 呼び出しでは出力フィールド、MQPUT および MQPUT1 呼び出しでは入力フィールドです。 このフィールドの初期値は MTDGRM です。

MDOFF (10 桁の符号付き整数)

論理メッセージの先頭を起点とする、物理メッセージ中のデータのオフセット。

物理メッセージのデータの (そのデータを一部として含んでいる) 論理メッセージの先頭からのオフセットをバイト単位で指定します。 このようなデータをセグメント といいます。 オフセットは、0 から 999 999 999 までの範囲です。 論理メッセージのセグメントでない物理メッセージのオフセット値は 0 です。

MQPUT または MQGET 呼び出しでは、以下の場合には、アプリケーションがこのフィールドを設定する必要はありません。
  • MQPUT 呼び出しで、PMLOGO を指定した場合
  • MQGET 呼び出しで、MOOFFS を指定しなかった場合。
以下、これらの呼び出しをレポート・メッセージ以外のメッセージに使用する場合の推奨方法について説明します。 ただし、アプリケーションがそれらの設定を行わなかった場合、または呼び出しが MQPUT1 の場合、アプリケーションは、MDOFF に適切な値が設定されていることを確認する必要があります。
MQPUT 呼び出しおよび MQPUT1 呼び出しへの入力では、キュー・マネージャーは 表 1で詳述されている値を使用します。 MQPUT および MQPUT1 呼び出しの出力時に、キュー・マネージャーは、このフィールドにメッセージと共に送信された値を設定します。

論理メッセージのセグメントに関するレポート・メッセージの場合は、MDOLN フィールドを使用して (OLUNDF 以外の値であること)、キュー・マネージャーが保存するセグメント情報の中のオフセット値を更新します。

MQGET 呼び出しへの入力では、キュー・マネージャーは 表 1 で詳述されている値を使用します。 MQGET 呼び出しの出力時に、キュー・マネージャーは、このフィールドに、取り出されたメッセージの値を設定します。

フィールドの初期値は、0 です。 MDVER 値が MDVER2 未満の場合、このフィールドは無視されます。

MDOLN (10 桁の符号付き整数)

元のメッセージの長さ。

これは、セグメントとしての レポート・メッセージにのみ関連するフィールドです。 これは、レポート・メッセージが関連するメッセージ・セグメントの長さを指定します。セグメントが属する論理メッセージの長さやレポート・メッセージ内のデータの長さは指定しません。

注: セグメントであるメッセージのレポート・メッセージを生成する場合、キュー・マネージャーおよびメッセージ・チャネル・エージェントは、元のメッセージの MDGIDMDSEQMDOFF、および MDMFLフィールドをレポート・メッセージの MQMD にコピーします。 その結果、そのレポート・メッセージも 1 つのセグメントです。 レポート・メッセージを生成するアプリケーションで、同じことを実行し、MDOLN フィールドが正しく設定されていることを確認することを推奨します。
以下のような特殊値が定義されます。
OLUNDF
元のメッセージの長さが定義されていません。
MDOLN は、MQPUT 呼び出しおよび MQPUT1 呼び出しの入力フィールドですが、アプリケーションが提供する値は、以下に示す特定の場合にのみ受け入れられます。
  • 書き込んでいるメッセージがセグメントであると同時にレポート・メッセージでもある場合、キュー・マネージャーは指定された値を受け入れます。 値は次のものでなければなりません。
    • セグメントが最後のセグメントではない場合は、ゼロより大きい値
    • セグメントが最後のセグメントである場合は、ゼロ以上の値
    • メッセージに含まれるデータの長さ以上の値
    これらの条件を満たさない場合は、理由コード RC2252 が戻り、呼び出しは失敗します。
  • 書き込んでいるメッセージがセグメントであるが、レポート・メッセージではない場合、キュー・マネージャーはこのフィールドを無視して、アプリケーション・メッセージ・データの長さを使用します。
  • 上記以外の場合、キュー・マネージャーはこのフィールドを無視して、OLUNDF を使用します。

これは、MQGET 呼び出し用の出力フィールドです。

このフィールドの初期値は OLUNDF です。 MDVER 値が MDVER2 未満の場合、このフィールドは無視されます。

MDPAN (28 バイトの文字ストリング)

メッセージを書き込むアプリケーションの名前。

これは、メッセージの起点コンテキストの一部です。 メッセージ・コンテキストについて詳しくは、 メッセージ・コンテキスト および コンテキスト情報の制御を参照してください。

MDPAN の形式は、MDPAT の値によって決まります。

このフィールドがキュー・マネージャーにより設定されると (つまり、PMSETA を除くすべてのオプションについて設定されると)、環境によって決定される値に設定されます。
  • z/OS では、キュー・マネージャーは次のものを使用します。
    • z/OS バッチの場合は、JES JOB カードからの 8 文字のジョブ名
    • TSO の場合は、7 文字の TSO ユーザー ID
    • CICS の場合は、8 文字のアプリケーション ID とそれに続く 4 文字のトランザクション ID
    • IMS の場合は、8 文字の IMS システム ID とそれに続く 8 文字の PSB 名
    • XCF の場合は、8 文字の XCF グループ名とそれに続く 16 文字の XCF メンバー名
    • キュー・マネージャーが生成したメッセージの場合は、キュー・マネージャー名の最初の 28 文字
    • CICS のない分散キューイングの場合は、チャネル・イニシエーターの 8 文字のジョブ名とそれに続く送達不能キューに書き込まれた 8 文字のモジュール名、およびそれに続く 8 文字のタスク ID。
    • IBM MQ for z/OS UNIX システム・サービス環境用に作成されたアドレス・スペースの 8 文字のジョブ名を使用した MQSeries® Java 言語バインディング処理の場合。 通常、これは単一の数字が付加された TSO ユーザー ID です。
    それぞれの名前について、フィールドの残り部分にスペースがあれば右側にブランクが埋め込まれます。 複数の名前がある場合、名前と名前の間に区切り文字はありません。
  • PC DOS および Windows システムでは、キュー・マネージャーは以下を使用します。
    • CICS アプリケーションの場合は、CICS トランザクション名
    • CICS 以外のアプリケーションの場合は、実行可能ファイルの完全修飾名の右端の 28 文字
  • IBM iでは、キュー・マネージャーは完全修飾ジョブ名を使用します。
  • HP Integrity NonStop Serverでは、キュー・マネージャーは実行可能ファイルの完全修飾名の右端の 28 文字 (キュー・マネージャーが使用可能な場合) を使用し、それ以外の場合はブランクを使用します。
  • UNIX では、キュー・マネージャーは次のものを使用します。
    • CICS アプリケーションの場合は、CICS トランザクション名
    • CICS 以外のアプリケーションの場合、実行可能ファイルの完全修飾名の右端の 14 文字 (キュー・マネージャーで使用可能な場合)。それ以外の場合はブランク ( AIX の場合)。
  • VSE/ESA では、キュー・マネージャーは、8 文字のアプリケーション ID とそれに続く 4 文字の tranid を使用します。

MQPUT および MQPUT1 呼び出しの場合、PMO パラメーターに または PMSETA が指定されていれば、これは入出力フィールドです。 フィールド内でヌル文字より後の情報はすべて破棄されます。 ヌル文字およびその後に続く文字は、キュー・マネージャーによってブランクに変換されます。 PMSETA が指定されていない場合、入力においてこのフィールドは無視され、出力専用フィールドになります。

これは、MQGET 呼び出しの出力フィールドです。 このフィールドの長さは LNPAN によって指定されます。 このフィールドの初期値は 28 個のブランク文字です。

MDPAT (10 桁の符号付き整数)

メッセージを書き込むアプリケーションのタイプ。

これは、メッセージの起点コンテキストの一部です。 メッセージ・コンテキストについて詳しくは、 メッセージ・コンテキスト および コンテキスト情報の制御を参照してください。

MDPAT は、以下の標準タイプのいずれかにすることができます。 ユーザー定義のタイプを使用することもできますが、値は ATUFST から ATULST までの範囲内に制限する必要があります。
ATAIX
AIX アプリケーション (ATUNIXと同じ値)。
ATBRKR
ブローカー。
ATCICS
CICSトランザクション。
ATCICB
CICS bridge.
ATVSE
CICS/VSEトランザクション。
ATDOS
PC DOS 上の IBM MQ MQI client アプリケーション。
ATDQM
分散キュー・マネージャー・エージェント。
ATGUAR
Tandem Guardian アプリケーション (ATNSK と同じ値)。
ATIMS
IMS アプリケーション。
ATIMSB
IMS ブリッジ。
ATJAVA
Java.
ATMVS
MVS または TSO アプリケーション (ATZOS と同じ値)。
ATNOTE
Lotus Notes Agent アプリケーション。
ATNSK
Tandem NonStop Kernel アプリケーション。
AT390
OS/390® アプリケーション (ATZOS と同じ値)。
AT400
IBM i アプリケーション。
ATQM
キュー・マネージャー。
ATUNIX
UNIX アプリケーション。
ATVOS
Stratus VOS アプリケーション。
ATWIN
16 ビット Windows アプリケーション。
ATWINT
32 ビット Windows アプリケーション。
ATXCF
XCF。
ATZOS
z/OS アプリケーション。
ATDEF
デフォルトのアプリケーション・タイプ。

この値は、アプリケーションが実行中のプラットフォームの、デフォルト・アプリケーション・タイプです。

注: この定数の値は環境によって異なります。
ATUNK
アプリケーション・タイプが不明。

この値は、他のコンテキスト情報が存在しているのに、アプリケーション・タイプが分からないことを示すために使用することができます。

ATUFST
ユーザー定義のアプリケーション・タイプの最低値。
ATULST
ユーザー定義のアプリケーション・タイプの最高値。
以下のような特殊値が出されることもあります。
ATNCON
メッセージの中にコンテキスト情報がありません。

メッセージがコンテキストを伴わずに書き込まれる場合 (つまり、PMNOC コンテキスト・オプションが指定される場合)、キュー・マネージャーによってこの値が設定されます。

メッセージが検索されると、MDPAT がこの値かどうかがテストされ、メッセージにコンテキストがあるかどうかを調べます (その他のコンテキスト・フィールドの中にブランクでないものがある場合、PMSETA を使用するアプリケーションでは、MDPAT を ATNCON には決して設定しないようにしてください)。

ATSIB
別の IBM MQ メッセージング製品で発信され、SIB (サービス Integration Bus) ブリッジ経由で到着したメッセージを示します。

アプリケーションの書き込みの結果として、キュー・マネージャーがこの情報を生成するとき、フィールドは、環境により求められる値に設定されます。 IBM iでは、 AT400; に設定されます。 IBM iでは、キュー・マネージャーが ATCICS を使用することはありません。

MQPUT および MQPUT1 呼び出しの場合、PMO パラメーターに または PMSETA が指定されていれば、これは入出力フィールドです。 PMSETA が指定されていない場合、入力においてこのフィールドは無視され、出力専用フィールドになります。

MQPUT または MQPUT1 呼び出しが正常に完了すると、メッセージがキューに書き込まれた場合、このフィールドには、そのメッセージと共に送信された MDPAT が入ります。 これは、メッセージが保存された場合 (保存パブリケーションについて詳しくは、PMRET の説明を参照してください)、そのメッセージと共に保持された MDPAT の値になりますが、メッセージがパブリケーションとしてサブスクライバーに送信された場合には MDPAT として使用されません。これは、サブスクライバーが提供する値が、サブスクライバーに送信されるすべてのパブリケーションにおいて MDPAT をオーバーライドするためです。 メッセージにコンテキストがない場合、このフィールドは ATNCON に設定されます。

これは、MQGET 呼び出しの出力フィールドです。 このフィールドの初期値は ATNCON です。

MDPD (8 バイトの文字ストリング)

メッセージが書き込まれた日付。

これは、メッセージの起点コンテキストの一部です。 メッセージ・コンテキストについて詳しくは、 メッセージ・コンテキスト および コンテキスト情報の制御を参照してください。

キュー・マネージャーがこのフィールドを生成する際に使用する日付の形式は、以下のとおりです。
  • YYYYMMDD
文字は、以下のものを表します。
YYYY
年 (4 桁の数字)
MM
月 (01 から 12 まで)
DD
日 (01 から 31 まで)

MDPDMDPT フィールドでは、グリニッジ標準時 (GMT) に正確に設定されているシステム・クロックに従って、GMT が使用されます。

メッセージが作業単位の一部として書き込まれた場合は、作業単位がコミットされた日付ではなく、メッセージが書き込まれた日付です。

MQPUT および MQPUT1 呼び出しの場合、PMO パラメーターに または PMSETA が指定されていれば、これは入出力フィールドです。 フィールドの内容は、キュー・マネージャーによって検査されませんが、フィールド内のヌル文字のあとにある情報はいずれも廃棄されます。 ヌル文字およびその後に続く文字は、キュー・マネージャーによってブランクに変換されます。 PMSETA が指定されていない場合、入力においてこのフィールドは無視され、出力専用フィールドになります。

MQPUT または MQPUT1 呼び出しが正常に完了すると、メッセージがキューに書き込まれた場合、このフィールドには、そのメッセージと共に送信された MDPD が入ります。 これは、メッセージが保存された場合 (保存パブリケーションについて詳しくは、PMRET の説明を参照してください)、そのメッセージと共に保持された MDPD の値になりますが、メッセージがパブリケーションとしてサブスクライバーに送信された場合には MDPD として使用されません。これは、サブスクライバーが提供する値が、サブスクライバーに送信されるすべてのパブリケーションにおいて MDPD をオーバーライドするためです。 メッセージがコンテキストを持っていない場合、フィールドは完全にブランクになります。

これは、MQGET 呼び出しの出力フィールドです。 このフィールドの長さは LNPDAT によって指定されます。 このフィールドの初期値は 8 個のブランク文字です。

MDPER (10 桁の符号付き整数)

メッセージの持続性。

このフィールドは、システム障害が発生してキュー・マネージャーを再始動してもメッセージが残るかどうかを示します。 MQPUT および MQPUT1 呼び出しでは、値は次のいずれかでなければなりません。
PEPER
メッセージは持続します。

これは、システム障害が発生して キュー・マネージャーを再始動してもメッセージが残ることを意味します。 メッセージが書き込まれ、その書き込みの作業単位がコミットされると (つまり、メッセージが作業単位の一部として書き込まれると)、メッセージは補助記憶域に保存されます。 メッセージがキューから除去され、受信者の作業単位がコミットされるまで (つまり、メッセージが作業単位の一部として取り出されるまで)、そのメッセージは補助記憶域に残ります。

持続メッセージがリモート・キューに送信される場合は、蓄積交換機能が使用されて、宛先への経路にそって各キュー・マネージャーでメッセージが保持されます。これは、次のキュー・マネージャーにメッセージが到達したことが分かるまで続きます。

持続メッセージを以下に書き込むことはできません。
  • 一時動的キュー
  • カップリング・ファシリティー構造体レベルが 3 未満の場合や カップリング・ファシリティー構造体がリカバリー不能である場合の共有キュー
持続メッセージは、永続動的キュー、事前定義キュー、およびカップリング・ファシリティー構造体がレベル 3 で リカバリー可能である場合の共用キューに書き込むことができます。
PENPER
メッセージは持続しません。

これは、システム障害が発生してキュー・マネージャーを再始動すると、通常はメッセージが残らないことを意味します。 これは、キュー・マネージャーの再始動中にメッセージの完全なコピーが補助記憶域で 見つかった場合でも、適用されます。

共有キューの特殊な事例として、キュー共有グループでキュー・マネージャーを再始動しても非永続メッセージが残る が、共有キューでメッセージの保管に使用したカップリング・ファシリティーに障害が発生するとメッセージは残らないという場合があります。

PEQDEF
メッセージの持続性はデフォルト時のものです。
  • キューがクラスター・キューである場合、メッセージの持続性は、メッセージが書き込まれるキューの特定のインスタンスを所有する宛先キュー・マネージャーで定義された DefPersistence 属性から取られます。 通常、クラスター・キューのインスタンスの DefPersistence 属性の値はすべて同じですが、これは必須ではありません。

    DefPersistenceの値は、メッセージが宛先キューに置かれるときにMDPERフィールドにコピーされます。 その後、DefPersistenceが変更されても、既にキューに置かれているメッセージは影響を受けません。

  • キューがクラスター・キューではない場合、メッセージの持続性は、ローカルのキュー・マネージャーで定義された DefPersistence 属性から取られます。これは、宛先キュー・マネージャーがリモートの場合も同じです。
    キュー名の解決パスに複数の定義がある場合、デフォルトの持続性は、パスの最初の定義にあるこの属性の値から取られます。 これには以下のものが考えられます。
    • 別名キュー
    • ローカル・キュー
    • リモート・キューのローカル定義
    • キュー・マネージャーの別名
    • 伝送キュー (例えば、DefXmitQNameキューなど)

    DefPersistenceの値は、メッセージが書き込まれるときにMDPERフィールドにコピーされます。 その後、DefPersistenceが変更されても、既に書き込まれているメッセージは影響を受けません。

持続メッセージと非持続メッセージが同一キューにあっても構いません。

メッセージに応答する場合、アプリケーションは通常、応答メッセージに対して、要求メッセージの持続性を使用します。

MQGET 呼び出しの場合、戻り値は PEPER または PENPER のいずれかです。

これは、MQGET 呼び出しでは出力フィールド、MQPUT および MQPUT1 呼び出しでは入力フィールドです。 このフィールドの初期値は PEQDEF です。

MDPRI (10 桁の符号付き整数)

メッセージの優先度。

MQPUT および MQPUT1 呼び出しでは、値はゼロ以上でなければなりません。ゼロは、最低の優先順位です。 以下のような特殊値も使用することができます。
PRQDEF
キューのデフォルト優先順位。
  • キューがクラスター・キューの場合、メッセージの優先順位は、メッセージが書き込まれたキューの特定のインスタンスを所有する宛先キュー・マネージャーで定義された DefPriority 属性から取られます。 通常、クラスター・キューのインスタンスの DefPriority 属性の値はすべて同じですが、これは必須ではありません。

    DefPriorityの値は、メッセージが宛先キューに置かれるときにMDPRIフィールドにコピーされます。 その後、DefPriorityが変更されても、既にキューに置かれているメッセージは影響を受けません。

  • キューがクラスター・キューではない場合、メッセージの優先順位は、ローカルのキュー・マネージャーで定義された DefPriority 属性から取られます。これは、宛先キュー・マネージャーがリモートの場合も同じです。
    キュー名の解決パスに複数の定義がある場合、デフォルトの優先順位は、パスの最初の定義にあるこの属性の値から取られます。 これには以下のものが考えられます。
    • 別名キュー
    • ローカル・キュー
    • リモート・キューのローカル定義
    • キュー・マネージャーの別名
    • 伝送キュー (例えば、DefXmitQNameキューなど)

    DefPriorityの値は、メッセージが書き込まれるときにMDPRIフィールドにコピーされます。 その後、DefPriorityが変更されても、既に書き込まれているメッセージは影響を受けません。

MQGET 呼び出しの戻り値は、常にゼロ以上です。値 PRQDEF が返されることはありません。

ローカル・キュー・マネージャーでサポートされている最大の優先順位 (この最大値は MaxPriority キュー・マネージャー属性で指定される) より高い優先順位でメッセージが書き込まれた場合、メッセージはキュー・マネージャーで受け入れられますが、キュー・マネージャーの最大優先順位でキューに入れられます。MQPUT 呼び出しまたは MQPUT1 呼び出しの完了時には、CCWARN および理由コード RC2049 が出されます。 しかし、MDPRI フィールドの値は、メッセージを書き込んだアプリケーションが指定した値のままです。

メッセージに応答する場合は、アプリケーションは通常、応答メッセージに対して、要求メッセージの優先順位を使用します。 他の状況では、PRQDEF を設定しても、アプリケーションを変更することなく優先順位の調整を行うことができます。

これは、MQGET 呼び出しでは出力フィールド、MQPUT および MQPUT1 呼び出しでは入力フィールドです。 このフィールドの初期値は PRQDEF です。

MDPT (8 バイトの文字ストリング)

メッセージが書き込まれた時間。

これは、メッセージの起点コンテキストの一部です。 メッセージ・コンテキストについて詳しくは、 メッセージ・コンテキスト および コンテキスト情報の制御を参照してください。

キュー・マネージャーがこのフィールドを生成する際に使用する時刻の形式は、以下のとおりです。
  • HHMMSSTH
文字は、順に以下のものを表します。
HH
時間 (00 から 23 まで)
MM
分 (00 から 59 まで)
SS
秒 (00 から 59。 を参照)
T
10 分の 1 秒 (0 から 9 まで)
H
100 分の 1 秒 (0 から 9 まで)
注: システム・クロックが非常に正確な時刻標準に同期している場合、 MDPTの秒数として 60 または 61 が返されることがまれにあります。 これは、グローバル時間標準にうるう秒が挿入されたときに発生します。

MDPDMDPT フィールドでは、グリニッジ標準時 (GMT) に正確に設定されているシステム・クロックに従って、GMT が使用されます。

メッセージが作業単位の一部として書き込まれた場合は、作業単位がコミットされた時刻ではなく、メッセージが書き込まれた時刻です。

MQPUT および MQPUT1 呼び出しの場合、PMO パラメーターに または PMSETA が指定されていれば、これは入出力フィールドです。 フィールドの内容は、キュー・マネージャーによって検査されませんが、フィールド内のヌル文字のあとにある情報はいずれも廃棄されます。 ヌル文字およびその後に続く文字は、キュー・マネージャーによってブランクに変換されます。 PMSETA が指定されていない場合、入力においてこのフィールドは無視され、出力専用フィールドになります。

MQPUT または MQPUT1 呼び出しが正常に完了すると、メッセージがキューに書き込まれた場合、このフィールドには、そのメッセージと共に送信された MDPT 値が入ります。 これは、メッセージが保存された場合 (保存パブリケーションについて詳しくは、PMRET の説明を参照してください)、そのメッセージと共に保持された MDPT の値になりますが、メッセージがパブリケーションとしてサブスクライバーに送信された場合には MDPT として使用されません。これは、サブスクライバーが提供する値が、サブスクライバーに送信されるすべてのパブリケーションにおいて MDPT をオーバーライドするためです。 メッセージがコンテキストを持っていない場合、フィールドは完全にブランクになります。

これは、MQGET 呼び出しの出力フィールドです。 このフィールドの長さは LNPTIM によって指定されます。 このフィールドの初期値は 8 個のブランク文字です。

MDREP (10 桁の符号付き整数)

レポート・メッセージのオプション。

レポート・メッセージは、他のメッセージに関するメッセージであり、元のメッセージに関係する予定されたイベントまたは予定されていないイベントについてアプリケーションに知らせるために使用されます。 MDREP フィールドにより、元のメッセージを送信したアプリケーションが、どのレポートが必要か、そのレポートにアプリケーション・メッセージ・データを含めるかどうか、また、(レポートおよび応答の両方に関して) レポート・メッセージまたは応答メッセージの内のメッセージおよび相関 ID を設定する方法について指定することができます。 以下のタイプのレポート・メッセージのいずれかまたはすべてを要求する (またはどれも要求しない) ことができます。
  • 例外
  • 有効期限
  • 到着確認 (COA)
  • 送達時に確認 (COD)
  • 肯定アクション通知 (PAN)
  • 否定アクション通知 (NAN)
複数のタイプのレポート・メッセージが必要な場合、またはその他のレポート・オプションが必要な場合、値を全部加えることができます (同じ定数は 2 回以上加えないでください)。

レポート・メッセージを受け取ったアプリケーションでは、MQMD の MDFB フィールドを調べることにより、報告が生成された理由を判別できます。詳細については、MDFB フィールドを参照してください。

メッセージをトピックに書き込むときにレポート・オプションを使用すると、ゼロ個以上のレポート・メッセージが生成され、アプリケーションに送信される可能性があります。 これは、パブリケーション・メッセージが、ゼロ個以上のサブスクライブ・アプリケーションに送信される可能性があるためです。

例外オプション: 次のオプションのいずれかを指定して、例外レポート・メッセージを要求することができます。
ROACTIVITY

必要なアクティビティー報告書

このレポート・オプションを使用すると、サポートされるアプリケーションがこのレポート・オプションが設定されたメッセージを処理する場合に、アクティビティー報告書を生成することが可能になります。

このレポート・オプションが設定されたメッセージは、そのオプションが「認識」されない場合でも、任意のキュー・マネージャーによって受け入れられる必要があります。 これによって、従来のキュー・マネージャーによって処理される場合でも、レポート・オプションを任意のユーザー・メッセージで設定することが可能となります。 これを行うため、レポート・オプションは ROAUM サブフィールドに置かれます。

ROACT が設定されたメッセージでプロセス (キュー・マネージャーまたはユーザー・プロセスのいずれか) がアクティビティーを実行する場合、プロセスはアクティビティー報告書を生成して書き込むよう選択することができます。

アクティビティー報告書オプションを使用すると、キュー・マネージャー・ネットワークを通して任意のメッセージの経路をトレースできるようになります。 レポート・オプションは、任意の現行ユーザー・メッセージで指定でき、メッセージのネットワーク経路の計算を即時に開始できるようになります。 メッセージを生成するアプリケーションがアクティビティー・レポートの生成を使用可能にすることができない場合は、キュー・マネージャー管理者が提供する API 交差出口を使用することにより、それを使用可能にすることができます。

以下のいくつかの条件がアクティビティー報告書に適用されます。
  1. ネットワーク内でアクティビティー報告書を生成できるキュー・マネージャーが少ない場合、経路は大まかになります。
  2. 取られる経路を判別するために、アクティビティー報告書を簡単に「オーダーできない」可能性があります。
  3. アクティビティー報告書は、その要求された宛先への経路を検索できない可能性があります。
ROEXC
例外レポートが必要です。

このタイプのレポートは、メッセージが別のキュー・マネージャーに送信されたのに、指定された宛先キューに送達することができない場合に、メッセージ・チャネル・エージェントによって生成されます。 例えば、ターゲット・キューまたは中間伝送キューがいっぱいである場合や、メッセージが大きすぎてキューに入らない場合などがあります。

例外レポート・メッセージが生成されるかどうかは、元のメッセージの持続性と、元のメッセージが経由するメッセージ・チャネルの速度 (通常または高速) によって次のように異なります。
  • すべての持続性メッセージと、通常のメッセージ・チャネルを経由する非持続性メッセージについては、送信側アプリケーションでエラー条件に対して指定されたアクションが正常に完了した場合にのみ、例外レポートが生成されます。 送信側アプリケーションでは、エラー条件が発生したときの元のメッセージの後処理を制御するために、次のアクションのいずれかを指定できます。
    • RODLQ (元のメッセージを送達不能キューに格納します)。
    • RODISC (元のメッセージを廃棄します)。
    送信側アプリケーションで指定したアクションを正常に完了できなかった場合は、元のメッセージは伝送キューに残され、例外レポート・メッセージは生成されません。
  • 高速メッセージ・チャネルを経由する非持続性メッセージについては、エラー条件に対して指定されたアクションを正常に完了できない場合でも、元のメッセージが伝送キューから削除され、例外レポートが生成されます。 例えば、RODLQ が指定されている場合に、(例えば) 送達不能キューが満杯であるなどの理由で、元のメッセージを送達不能キューに格納できなかったときには、例外レポート・メッセージが生成され、元のメッセージが廃棄されます。

    通常メッセージ・チャネルと高速メッセージ・チャネルについて詳しくは、 メッセージ持続性 を参照してください。

MQPUT または MQPUT1 呼び出しから戻された理由コードを用いて、元のメッセージを書き込んだアプリケーションに問題を同期的に通知できる場合、例外レポートは生成されません。

また、アプリケーションは、例外レポートを送信することにより、受け取ったメッセージを処理できないということを知らせることもできます (例えばクレジット払いのときに、引き落とし額が預金額を超えてしまうような場合です)。

元のメッセージのメッセージ・データは、レポート・メッセージに組み込まれません。

ROEXC、ROEXCD、ROEXCF のうち 2 つ以上を指定しないでください。

ROEXCD
データ付きの例外レポートが必要です。

元のメッセージからアプリケーション・メッセージ・データの最初の 100 バイトがレポート・メッセージ内に組み込まれることを除けば、ROEXC と同じです。 元のメッセージに 1 つ以上の MQ ヘッダー構造が含まれている場合、それらはアプリケーション・データの 100 バイトに加えて、レポート・メッセージに組み込まれます。

ROEXC、ROEXCD、ROEXCF のうち 2 つ以上を指定しないでください。

ROEXCF
全データの例外レポートが必要です。

元のメッセージからアプリケーション・メッセージ・データのすべてがレポート・メッセージ内に組み込まれることを除けば、ROEXC と同じです。

ROEXC、ROEXCD、ROEXCF のうち 2 つ以上を指定しないでください。

満了オプション: 次のオプションのいずれかを指定して、満了レポート・メッセージを要求することができます。
ROEXP
満了レポートが必要です。

このタイプのレポートは、満了時間がすぎたためにアプリケーションに送達する前にメッセージが廃棄される場合、キュー・マネージャーにより生成されます (MDEXP フィールドを参照してください)。 この理由のため廃棄されたメッセージがあっても (ROEXC* オプションのいずれかが指定された場合であっても)、このオプションが設定されていない場合は、レポート・メッセージは生成されません。

元のメッセージのメッセージ・データは、レポート・メッセージに組み込まれません。

ROEXP、ROEXPD、ROEXPF のうち 2 つ以上を指定しないでください。

ROEXPD
満了レポート (データ付き) が必要です。

元のメッセージからアプリケーション・メッセージ・データの最初の 100 バイトがレポート・メッセージ中に組み込まれることを除けば、ROEXP と同じです。 元のメッセージに 1 つ以上の MQ ヘッダー構造が含まれている場合、それらはアプリケーション・データの 100 バイトに加えて、レポート・メッセージに組み込まれます。

ROEXP、ROEXPD、ROEXPF のうち 2 つ以上を指定しないでください。

ROEXPF
満了レポート (全データ付き) が必要です。

元のメッセージからアプリケーション・メッセージ・データのすべてがレポート・メッセージ内に組み込まれることを除けば、ROEXP と同じです。

ROEXP、ROEXPD、ROEXPF のうち 2 つ以上を指定しないでください。

到着時確認オプション: 次のオプションのいずれかを指定して、到着時確認レポート・メッセージを要求することができます。
ROCOA
到着時確認レポートが必要です。

このタイプのレポートは、メッセージが宛先キューに置かれる時、宛先キューを所有するキュー・マネージャーにより生成されます。 元のメッセージのメッセージ・データは、レポート・メッセージに組み込まれません。

メッセージが作業単位の一部として書き込まれ、しかも宛先キューがローカル・キューであるという場合、キュー・マネージャーによって生成された COA レポート・メッセージは、その作業単位がコミットされているときのみ取り出すことができます。

メッセージ記述子の MDFMT フィールドが FMXQH または FMDLH の場合、COA レポートは生成されません。 これにより、メッセージが伝送キューに書き込まれる場合、またはメッセージが配信不能で送達不能キューに書き込まれる場合に、COA レポートは生成されなくなります。

ROCOA、ROCOAD、ROCOAF のうち 2 つ以上を指定しないでください。

ROCOAD
到着時確認レポート (データ付き) が必要です。

元のメッセージからアプリケーション・メッセージ・データの最初の 100 バイトがレポート・メッセージ内に組み込まれることを除けば、ROCOA と同じです。 元のメッセージに 1 つ以上の MQ ヘッダー構造が含まれている場合、それらはアプリケーション・データの 100 バイトに加えて、レポート・メッセージに組み込まれます。

ROCOA、ROCOAD、ROCOAF のうち 2 つ以上を指定しないでください。

ROCOAF
到着時確認レポート (全データ付き) が必要です。

元のメッセージからアプリケーション・メッセージ・データのすべてがレポート・メッセージ内に組み込まれることを除けば、ROCOA と同じです。

ROCOA、ROCOAD、ROCOAF のうち 2 つ以上を指定しないでください。

廃棄および満了オプション: 以下のオプションを指定して、レポート・メッセージ用の満了時間および廃棄フラグを設定できます。
ROPDAE
レポート・メッセージの満了時間および廃棄フラグを設定します。
このオプションを使用すると、レポート・メッセージおよび応答メッセージは、元のメッセージから満了時間および廃棄フラグ (廃棄するかどうか) を継承します。 このオプションを設定すると、レポート・メッセージおよび応答メッセージは以下のようになります。
  1. RODISC フラグを継承します (設定されている場合)。
  2. メッセージが満了レポートではない場合、メッセージの残りの満了時間を継承します。 メッセージが満了レポートである場合、満了時間は 60 秒に設定されます。
このオプションを設定すると、以下が適用されます。
注:
  1. レポートおよび応答メッセージは、廃棄フラグおよび満了値と共に生成され、システム内に残しておくことはできません。
  2. トレース経路メッセージは、トレース経路が有効ではないキュー・マネージャーの宛先キューには到達できなくなります。
  3. 通信リンクが壊れている場合でも、送達できないレポートでキューがいっぱいになることはありません。
  4. コマンド・サーバー応答は要求の残りの満了時間を継承します。
配布時確認オプション: 次のオプションのいずれかを指定して、配布時確認レポート・メッセージを要求することができます。
ROCOD
配布時確認レポートが必要です。

このタイプのレポートは、メッセージをキューから削除する方法でアプリケーションが宛先キューからのメッセージを検索する時に、キュー・マネージャーにより生成されます。 元のメッセージのメッセージ・データは、レポート・メッセージに組み込まれません。

メッセージが作業単位の一部として検索される場合、レポート・メッセージは同じ作業単位内に生成され、作業単位がコミットされるまではそのレポートが利用できなくなります。 作業単位がバックアウトされる場合、レポートは送信されません。

メッセージ記述子の MDFMT フィールドが FMDLH の場合、COD レポートは生成されません。 これにより、メッセージが配布できなくなり、送達不能キューに書き込まれる場合は、COD レポートが生成されなくなります。

宛先キューが XCF キューの場合は、ROCOD は無効です。

ROCOD、ROCODD、ROCODF のうち 2 つ以上を指定しないでください。

ROCODD
配布時確認レポート (データ付き) が必要です。

元のメッセージからアプリケーション・メッセージ・データの最初の 100 バイトがレポート・メッセージ内に組み込まれることを除けば、ROCOD と同じです。 元のメッセージに 1 つ以上の MQ ヘッダー構造が含まれている場合、それらはアプリケーション・データの 100 バイトに加えて、レポート・メッセージに組み込まれます。

元のメッセージについての MQGET 呼び出しで GMATM を指定し、戻されたメッセージに切り捨てが行われた場合、レポート・メッセージに置かれる アプリケーション・メッセージ・データの量は、以下のうち最小のものになります。
  • 元のメッセージの長さ
  • 100 バイト

宛先キューが XCF キューの場合は、ROCODD は無効です。

ROCOD、ROCODD、ROCODF のうち 2 つ以上を指定しないでください。

ROCODF
配布時確認レポート (全データ付き) が必要です。

元のメッセージからアプリケーション・メッセージ・データのすべてがレポート・メッセージ内に組み込まれることを除けば、ROCOD と同じです。

宛先キューが XCF キューの場合は、ROCODF は無効です。

ROCOD、ROCODD、ROCODF のうち 2 つ以上を指定しないでください。

アクション通知オプション: 次のいずれか (または両方) のオプションを指定して、受信側のアプリケーションからアクションの正常終了または異常終了を通知するレポート・メッセージを送信するよう要求できます。
ROPAN
アクション正常終了通知レポートが必要です。

このタイプのレポートは、メッセージを取り出し、そのメッセージに従ってアクションを実行するアプリケーションにより生成されます。 これは、メッセージで要求されたアクションが正常に実行されたことを示します。 レポートを生成するアプリケーションは、レポートにデータを含めるかどうかを決定します。

メッセージを取り出すアプリケーションにこの要求を送らないと、キュー・マネージャーはこのオプションに基づくアクションを実行しません。 ただし、レポートの生成が必要な場合には、メッセージを取り出すアプリケーションが行います。

RONAN
アクション異常終了通知レポートが必要です。

このタイプのレポートは、メッセージを取り出し、そのメッセージに従ってアクションを実行するアプリケーションにより生成されます。 これは、メッセージで要求されたアクションが正常に実行されなかったことを示します。 レポートを生成するアプリケーションは、レポートにデータを含めるかどうかを決定します。 例えば、要求を実行できなかった理由を示すデータを付けた方が望ましい場合もあります。

メッセージを取り出すアプリケーションにこの要求を送らないと、キュー・マネージャーはこのオプションに基づくアクションを実行しません。 ただし、レポートの生成が必要な場合には、メッセージを取り出すアプリケーションが行います。

アクションの正常終了通知時および異常終了通知時、それぞれの条件の指定はアプリケーションが行います。 要求が一部実行された場合には PAN 報告ではなく NAN 報告を生成する (要求された場合) ことをお勧めします。 また、すべての可能な条件を、アクションの正常終了通知時と異常終了通知時の両方ではなく、いずれか一方に対応付けることをお勧めします。

メッセージ ID オプション: 次のオプションのいずれかを指定して、レポート・メッセージ (または応答メッセージ) の MDMID を設定する方法を制御することができます。
RONMI
新しいメッセージ ID。

これはデフォルトの処置であり、このメッセージの結果としてレポートまたは応答が生成された場合に、レポート・メッセージまたは応答メッセージの MDMID を新たに生成することを示します。

ROPMI
メッセージ ID を渡します。

レポートまたは応答がこのメッセージの結果として生成される場合、このメッセージの MDMID をレポート・メッセージまたは応答メッセージの MDMID にコピーすることになります。

パブリケーション・メッセージの MsgId は、パブリケーションのコピーを受け取る各サブスクライバーごとに異なるため、レポートまたは応答メッセージにコピーされる MsgId もそれぞれ異なります。

このオプションを指定しない場合は、RONMI を指定したものと見なされます。

相関 ID オプション: 次のオプションのいずれかを指定して、レポート・メッセージ (または応答メッセージ) の MDCID を設定する方法を制御することができます。
ROCMTC
メッセージ ID を相関 ID にコピーします。

これはデフォルトの処置であり、このメッセージの結果としてレポートまたは応答が生成された場合に、このメッセージの MDMID をレポート・メッセージまたは応答メッセージの MDCID にコピーすることを示します。

パブリケーション・メッセージの MsgId は、パブリケーションのコピーを受け取る各サブスクライバーごとに異なるため、レポートまたは応答メッセージの CorrelId にコピーされる MsgId もそれぞれ異なります。
ROPCI
相関 ID を渡します。

レポートまたは応答がこのメッセージの結果として生成される場合、このメッセージの MDCID をレポート・メッセージまたは応答メッセージの MDCID にコピーすることになります。

パブリケーション・メッセージの MDCID は、それが SOSCID オプションを使用し、MQSD の SCDIC フィールドを CINONE に設定する場合を除き、サブスクライバー固有のものになります。 このため、レポート・メッセージまたは応答メッセージの MDCID にコピーされる MDCID は、各サブスクライバーによって異なる可能性があります。

このオプションを指定しない場合、ROCMTC を指定したものと見なされます。

要求に応答するサーバー、またはレポート・メッセージを生成するサーバーは、元のメッセージの中に ROPCI または ROPMI オプションが設定されていたかどうかを調べるようにしてください。 設定されていた場合、サーバーは、これらのオプションで説明されている処置を取るはずです。 いずれも設定されていない場合、サーバーは、対応するデフォルトの処置を取るはずです。

: 次のオプションのいずれかを指定して、元のメッセージを宛先キューに配布できない場合のそのメッセージの後処理を制御することができます。 これらのオプションが適用されるのは、送信側アプリケーションが例外レポート・メッセージを要求した場合に、そのメッセージが生成中となるような状況の場合のみです。 アプリケーションは処理オプションを、例外レポートの要求とは無関係に設定できます。
RODLQ
送達不能キューにメッセージを入れます。
これは、デフォルトの処置であり、メッセージを宛先キューに送達できない場合、メッセージが送達不能キューに入れられることを示します。 これは次のような場合に行われます。
  • MQPUT または MQPUT1 呼び出しによって戻された理由コードを用いて、元のメッセージを書き込んだアプリケーションに問題を同期的に通知できない場合。 送信側によって要求される場合は、例外レポート・メッセージが生成されます。
  • 元のメッセージを書き込むアプリケーションがトピックに書き込んでいた場合。

送信側からの要求があった場合には、例外レポート・メッセージが生成されます。

RODISC
メッセージを廃棄します。
これは、宛先キューに配布できないメッセージは廃棄する必要があることを示します。 これは次のような場合に行われます。
  • MQPUT または MQPUT1 呼び出しによって戻された理由コードを用いて、元のメッセージを書き込んだアプリケーションに問題を同期的に通知できない場合。 送信側によって要求される場合は、例外レポート・メッセージが生成されます。
  • 元のメッセージを書き込むアプリケーションがトピックに書き込んでいた場合。

送信側からの要求があった場合には、例外レポート・メッセージが生成されます。

元のメッセージを送達不能キューに入れずに、元のメッセージを送信側に返す必要がある場合、送信側は ROEXCF を付けて RODISC を指定する必要があります。

デフォルト・オプション: レポート・オプションが不要な場合には、次の値を指定できます。
RONONE
レポートは必要ありません。

この値は、他のオプションを指定しなかったことを示します。 RONONE は、プログラム文書化を支援するために定義されています。 このオプションを他のオプションと組み合わせて使用することは意図されていませんが、値がゼロであるため、そのような使い方をしても検出できません。

一般情報:
  1. 必要とされるすべてのレポート・タイプは、元のメッセージを送信するアプリケーション具体的に指定されている必要があります。 例えば、COA レポートは要求されているが、例外レポートは要求されないという場合は、メッセージが宛先キューに入れられるときに COA レポートが生成されますが、メッセージが宛先キューに到着したときに宛先キューがいっぱいであっても、例外レポートは生成されません。 MDREP オプションが設定されていない場合、キュー・マネージャーまたはメッセージ・チャネル・エージェント (MCA) によって、レポート・メッセージが生成されることはありません。

    一部のレポート・オプションは、ローカル・キュー・マネージャーで認識できなくても指定できます。これは、宛先 キュー・マネージャーでオプションを処理する場合に有用です。 詳しくは、 IBM i を参照してください。

    レポート・メッセージが要求される場合、レポートの送信先のキューの名前を MDRQ フィールドで指定する必要があります。 レポート・メッセージが受信されると、メッセージ記述子の MDFB フィールドを調べることにより、レポートの性質を調べることができます。

  2. レポート・メッセージを生成するキュー・マネージャーまたは MCA が、レポート・メッセージを応答キューに入れることができない場合 (例えば、応答キューまたは伝送キューが満杯になっているため)、レポート・メッセージは、代わりに送達不能キューに入ります。 これにも 失敗した場合、あるいは送達不能キューがない場合に、取るべきアクションは、レポート・メッセージのタイプによって決まります。
    • レポートメッセージが例外レポートの場合、例外レポートの生成の原因となったメッセージは送信キューに残ります。これにより、メッセージが失われないことが保証されます。
    • その他のすべてのレポートタイプについては、レポートメッセージは破棄され、処理は通常通り継続されます。 処理を実行する理由は、元のメッセージがすでに無事に送達されているか (COA または COD レポート・メッセージの場合)、元のメッセージがすでに対象外になっているか (満了レポート・メッセージの場合) のいずれかです。
    レポート・メッセージが無事にキュー (宛先キューまたは中間伝送キューのいずれか) に入ると、そのメッセージには特別な処理は行われなくなります (他のメッセージと全く同じ扱いになります)。
  3. レポートが生成されると、MDRQ キューがオープンされ、レポートを生成させたメッセージの MQMD の MDUID 許可を使用して、レポート・メッセージが書き込まれます。ただし、以下の場合は例外です。
    • 受信側の MCA によって生成される例外レポートは、レポートを生成させたメッセージを書き込むために MCA が使用したものと同じ許可を使って書き込まれます。 使用されるユーザー ID は、CDPA チャネル属性によって決まります。
    • キュー・マネージャーによって生成される COA レポートは、レポートを生成させたメッセージをそのキュー・マネージャーに書き込むときに使用されたものと同じ権限を使って書き込まれます。 例えば、受信側の MCA がその MCA のユーザー ID を使ってメッセージを書き込んだ場合、キュー・マネージャーは MCA のユーザー ID を使って COA レポートを書き込みます。
    レポートを生成するアプリケーションは、通常、応答を生成する場合と同じ許可を持っています。これは、通常、元のメッセージのユーザー ID に与えられた許可と同じです。

    レポートがリモート宛先に移動しなければならない場合は、他のメッセージに対する場合と同じ方式で、それを受け取るかどうかを、送信側と受信側が決めることができます。

  4. データ付きのレポート・メッセージが要求される場合は、以下のことが行われます。
    • レポート・メッセージは、常に、元のメッセージの送信側が要求したデータ量で生成されます。 レポート・メッセージが応答先キューに対して大きすぎると、上記の処理が行われます。レポート・メッセージは、応答キューに適合するように切り捨てられることはありません。
    • 元のメッセージの MDFMT が FMXQH の場合、レポート内のデータは、MQXQH を含んでいません。 レポート・データは、元のメッセージにある MQXQH の後にあるデータの最初のバイトから始まります。 これは、キューが伝送キューかどうかに関係なく起こります。
  5. COA、COD、または満了レポート・メッセージが、応答キューで受け取られた場合は、元のメッセージが、適切に到着した、送達された、または満了したことが保証されます。 ただし、これらのレポート・メッセージの 1 つ以上が要求され、受信されていない場合は、以下に示すいずれかが発生した可能性があるため、逆を想定することはできません。
    1. リンクがダウンしたために、レポート・メッセージは中止された。
    2. 中間伝送キューまたは応答キューに、ブロッキング条件 (キューがいっぱいである、書き込みが禁止されている、など) が存在しているため、レポート・メッセージは中止された。
    3. レポート・メッセージが送達不能キューに入っている。
    4. キュー・マネージャーがレポート・メッセージを生成しようとしたとき、該当するキューにメッセージを書き込めず、また送達不能キュー上にも書き込めなかったため、レポート・メッセージを生成することができませんでした。
    5. 報告される処置 (到着、送達、または満了) と該当するレポート・メッセージの生成との間に、キュー・マネージャーの障害が発生しました。 (COD レポート・メッセージは同じ作業単位内で生成されるので、COD レポート・メッセージではアプリケーションが作業単位内で元のメッセージを取り出す場合は上記のことは起こりません。)

    例外レポート・メッセージも、上記の 1、2 および 3 の理由から、同様に中止されることがあります。 しかし、MCA が、例外レポート・メッセージを生成できない (応答キューまたは送達不能キューのいずれかにレポート・メッセージを書き込むことができない) 場合は、元のメッセージは送信側の伝送キューにとどまり、チャネルがクローズされます。 このような状況は、レポート・メッセージがチャネルの送信側、受信側のどちらで生成されても起こります。

  6. 元のメッセージが一時的にブロックされていても (その結果として例外レポート・メッセージが生成され、元のメッセージは送達不能キューに書き込まれる)、そのブロックがクリアされ、アプリケーションが元のメッセージを送達不能キューから読み込み、その宛先に再度メッセージを書き込む場合は、以下に示す動作が発生する場合もあります。
    • 例外レポート・メッセージは生成されたが、最終的に元のメッセージは、その宛先に正しく到着する。
    • 元のメッセージは、あとで別のブロック状態になる可能性があるため、1 つの元のメッセージに対して、例外レポート・メッセージが 2 つ以上生成されます。
トピックに書き込むときのレポート・メッセージ:
  1. メッセージをトピックに書き込むときに、レポートを生成することができます。 このメッセージはトピックのすべてのサブスクライバーに送信されます。 ゼロの場合もあれば、1 またはそれ以上の場合もあります。 結果として多数のレポート・メッセージが生成される場合があるので、レポート・オプションを使用するように選択する場合に、これを考慮に入れる必要があります。
  2. メッセージをトピックに書き込むときに、メッセージのコピーを置く宛先キューが多数存在する場合があります。 そのうちのいくつかの宛先キューに問題 (例えばキュー・フル) がある場合、MQPUT の実行が成功するかどうかは (メッセージの持続性に応じて) NPMSGDLV または PMSGDLV の設定に依存します。 宛先キューへのメッセージ送達が必ず成功するという設定 (例えばそれが永続サブスクライバーへの持続メッセージで、PMSGDLV が ALL または ALLDUR に設定されている) の場合、成功とは、次の基準のいずれかが満たされる場合として定義されます。
    • サブスクライバー・キューへの書き込みが成功する
    • サブスクライバー・キューがメッセージを受け取ることができない場合、RODLQ を使用して送達不能キューへの書き込みが正常に行われる
    • サブスクライバー・キューがメッセージを受け取ることができない場合に RODISC を使用する
メッセージ・セグメントのレポート・メッセージ:
  1. セグメント化が許可されているメッセージの報告メッセージを要求できます (MFSEGA フラグを参照してください)。 キュー・マネージャーがメッセージをいくつかのセグメントに分割する必要があると判断した場合には、関連する条件に応じてセグメントごとにレポート・メッセージが生成されます。 そのため、アプリケーションでは、要求された各タイプの複数のレポート・メッセージを受信できるようにしてください。 レポート・メッセージの MDGID フィールドを使用することによって、元のメッセージのグループ ID を複数の報告と関連付けることができ、MDFB フィールドを使用することによって、各レポート・メッセージのタイプを識別できます。
  2. GMLOGO を使用してセグメントに関するレポート・メッセージを取り出す場合には、MQGET 呼び出しを続けて発行したときに異なるタイプ のレポートが戻されることがあるので注意してください。 例えば、キュー・マネージャーによってセグメントに分割されたメッセージに対して COA レポートおよび COD レポートを要求されている場合、それらのレポート・メッセージに対して MQGET 呼び出しを発行したときに COA レポート・メッセージと COD レポート・メッセージが順不同で混ざり合って戻ることがあります。 この問題を回避するには、GMCMPM オプションを使用します (GMATM を組み合わせても構いません)。 GMCMPM を使用すると、キュー・マネージャーは同じレポート・タイプのレポート・メッセージを組み立てます。 例えば、最初の MQGET 呼び出しで元のメッセージに関連するすべての COA メッセージの再組み立てを実行し、2 番目の MQGET 呼び出しですべての COD メッセージの再組み立てを実行する場合などが考えられます。 いずれかが先に組み立てられるかは、どちらのタイプのレポート・メッセージが先にキューに入るかによります。
  3. アプリケーション自体がセグメントを書き込む場合、そのアプリケーションではセグメントごとに異なるレポート・オプションを指定できます。 ただし、以下に示す点に注意してください。
    • GMCMPM オプションを使用してセグメントを取り出している場合、キュー・マネージャーに格納されるのは、最初の セグメント内のレポート・オプションのみです。
    • セグメントを一度に 1 つずつ取り出している場合に、大部分のセグメントに ROCOD* オプションが指定されていても、このオプションが指定されていないセグメントが 1 つでもあれば、GMCMPM オプションを使用して一度の MQGET 呼び出しでレポート・メッセージを取り出したり、GMASGA オプションを使用してすべてのレポート・メッセージが到着した時期を検出したりすることができなくなります。
  4. MQ ネットワークでは、個々のキュー・マネージャーが異なる機能を持つことができます。 セグメント化をサポートしていないキュー・マネージャーまたは MCA によりセグメントに関するレポート・メッセージが生成された場合、そのキュー・マネージャーまたは MCA は、デフォルト時には、レポート・メッセージの中に必要なセグメント情報を含めません。そのため、このレポート・メッセージのもとになったメッセージを識別することが困難な場合があります。 この問題を回避するには、レポート・メッセージと共にデータを要求 (RO*D オプションと RO*F オプションのうちいずれか該当する方を指定) します。 ただし、RO*D を指定した場合には、アプリケーションがレポート・メッセージを取り出すときに 100 バイト未満 のアプリケーション・メッセージ・データがアプリケーションに戻されることがあるので注意してください (レポート・メッセージがセグメント化をサポートしていないキュー・マネージャーまたは MCA により生成された場合)。

レポート・メッセージのメッセージ記述子の内容: キュー・マネージャーまたはメッセージ・チャネル・エージェント (MCA) は、レポート・メッセージを生成するとき、メッセージ記述子の中のフィールドを以下の値に設定してから、通常の方法でメッセージを書き込みます。

MQMD のフィールド 使用される値
MDSID MDSIDV
MDVER MDVER2
MDREP RONONE
MDMT MTRPRT
MDEXP EIULIM
MDFB 報告書の性質に応じて(FBCOA、FBCOD、FBEXP、またはRC*値)
MDENC 元のメッセージ記述子からコピーされます。
MDCSI 元のメッセージ記述子からコピーされます。
MDFMT 元のメッセージ記述子からコピーされます。
MDPRI 元のメッセージ記述子からコピーされます。
MDPER 元のメッセージ記述子からコピーされます。
MDMID 元のメッセージ記述子のレポート・オプションで指定されたもの
MDCID 元のメッセージ記述子のレポート・オプションで指定されたもの
MDBOC 0
MDRQ ブランク
MDRM キュー・マネージャーの名前。
MDUID PMPASI オプションが設定したとおり
MDACC PMPASI オプションが設定したとおり
MDAID PMPASI オプションが設定したとおり
MDPAT ATQM、またはメッセージ・チャネル・エージェントに対応するもの
MDPAN キュー・マネージャー名またはメッセージ・チャネル・エージェント名の最初の 28 バイト。 IMS ブリッジによって生成されるレポート・メッセージの場合、このフィールドには、メッセージが関連する IMS システムの XCF グループ名と XCF メンバー名が含まれます。
MDPD レポート・メッセージが送信された日付
MDPT レポート・メッセージが送信された時刻
MDAOD ブランク
MDGID 元のメッセージ記述子からコピーされます。
MDSEQ 元のメッセージ記述子からコピーされます。
MDOFF 元のメッセージ記述子からコピーされます。
MDMFL 元のメッセージ記述子からコピーされます。
MDOLN OLUNDF 以外の場合は、元のメッセージ 記述子からコピーされる。OLUNDF の場合は、元のメッセージ・データの長さが設定されます。
レポートを生成するアプリケーションでは、以下を除いて、同様の値を設定することをお勧めします。
  • MDRM フィールドをブランクに設定できます (メッセージが書き込まれる時に、キュー・マネージャーは、この値をローカル・キュー・マネージャーの名前に変更します)。
  • コンテキスト・フィールドは、応答に使用されたオプション、通常は PMPASI を使用して設定する必要があります。

レポート・フィールドの分析: MDREP フィールドにはサブフィールドが含まれます。そのため、メッセージの送信側が特定のレポートを要求したかどうかを確認する必要があるアプリケーションは、 IBM iで説明されている手法のいずれかを使用する必要があります。

これは、MQGET 呼び出しでは出力フィールド、MQPUT および MQPUT1 呼び出しでは入力フィールドです。 このフィールドの初期値は RONONE です。

MDRM (48 バイトの文字ストリング)

応答キュー・マネージャーの名前。

これは、応答メッセージまたはレポート・メッセージを送信されるキュー・マネージャーの名前です。 MDRQ は、このキュー・マネージャーで定義されるキューのローカル名です。

MDRM フィールドがブランクである場合、ローカル・キュー・マネージャーは、そのキュー定義自体の MDRQ 名を調べます。 この名前を持つリモート・キューのローカル定義が存在している場合は、伝送されたメッセージの中の MDRM 値が、リモート・キューの定義内の RemoteQMgrName 属性の値によって置換されます。受信側のアプリケーションがメッセージの MQGET 呼び出しを出すと、メッセージ記述子にこの値が返されます。 リモート・キューのローカル定義が存在しない場合、メッセージと共に伝送される MDRM は、ローカル・キュー・マネージャーの名前になります。

名前を指定するときは、末尾ブランクを付けることができます。最初のヌル文字およびその後に続く文字は、ブランクとして扱われます。 しかし、それ以外の場合は、名前がキューの命名規則を満たすかどうかを調べる検査は行われません。伝送されたメッセージ内の MDRM が置換される場合、このことは伝送された名前についても同様です。

応答先キューが必要でない場合は、MDRM フィールドをブランクに初期化してください (ただし、その検査はありません)。

MQGET 呼び出しの場合、キュー・マネージャーは、常にフィールドの長さまでブランクを埋め込んだ名前を返します。

これは、MQGET 呼び出しでは出力フィールド、MQPUT および MQPUT1 呼び出しでは入力フィールドです。 このフィールドの長さは LNQMN によって指定されます。 このフィールドの初期値は 48 個のブランク文字です。

MDRQ (48 バイトの文字ストリング)

応答キューの名前。

これは、メッセージ読み取り要求を発行したアプリケーションが送信する MTRPLY および MTRPRT メッセージの送信先のメッセージ・キューの名前です。 この名前は、MDRM で指定されているキュー・マネージャーで定義されているキューのローカル名です。 このキューをモデル・キューにすることはできません。ただし、送信側のキュー・マネージャーは、メッセージが書き込まれたときに、これについて確認はしません。

MQPUT および MQPUT1 呼び出しでは、MDMT フィールドに値 MTRQST がある場合、または MDREP フィールドによりいずれかのレポート・メッセージが要求される場合に、このフィールドをブランクにしてはなりません。 ただし、メッセージ・タイプにかかわらず、指定された値 (または置き換えられた値) が、メッセージの読み取り要求を発行したアプリケーションに渡されます。

MDRM フィールドがブランクの場合、ローカル・キュー・マネージャーは、独自のキュー定義内で MDRQ 名を探索します。 リモート・キューのローカル定義でこの名前が存在する場合、伝送されたメッセージの MDRQ の値は、リモート・キューの定義から取られた RemoteQName 属性値で置き換えられ、これらの値は受信側アプリケーションがメッセージの MQGET 呼び出しを発行する際にメッセージ記述子内に戻されます。 リモート・キューのローカル定義が存在しない場合、MDRQ は変更されません。

名前を指定するときは、末尾ブランクを付けることができます。最初のヌル文字およびその後に続く文字は、ブランクとして扱われます。 しかし、名前がそれ以外の点でキュー命名規則を満たすかどうかを調べる検査は行われません。MDRQ が伝送されたメッセージ中に再度挿入される場合も、伝送された名前は同様の扱いとなります。 必要に応じて名前が指定されたかどうかのみ検査されます。

応答先キューが必要でない場合は、MDRQ フィールドをブランクに初期化してください (ただし、その検査はありません)。

MQGET 呼び出しの場合、キュー・マネージャーは、常にフィールドの長さまでブランクを埋め込んだ名前を返します。

レポート・メッセージを必要とするメッセージを配布できず、指定されたキューにレポート・メッセージを配布することもできない場合は、元のメッセージとレポート・メッセージの両方が送達不能 (未配布メッセージ) キューに送られます。 IBM iで説明されている DeadLetterQName 属性を参照してください。

これは、MQGET 呼び出しでは出力フィールド、MQPUT および MQPUT1 呼び出しでは入力フィールドです。 このフィールドの長さは LNQN によって指定されます。 このフィールドの初期値は 48 個のブランク文字です。

MDSEQ (10 桁の符号付き整数)

グループ中の論理メッセージの順序番号。

順序番号は 1 から始まり、グループに新しい論理メッセージが追加されるたびに 1 つずつ大きくなり、最大で 999 999 999 です。 グループにまとめられていない物理メッセージの順序番号は 1 です。

MQPUT または MQGET 呼び出しでは、以下の場合には、アプリケーションがこのフィールドを設定する必要はありません。
  • MQPUT 呼び出しで、PMLOGO を指定した場合
  • MQGET 呼び出しで、MOSEQN が指定されていない場合。
以下、これらの呼び出しをレポート・メッセージ以外のメッセージに使用する場合の推奨方法について説明します。 ただし、アプリケーションがさらに制御を要求する場合、または呼び出しが MQPUT1 の場合、アプリケーションは、MDSEQ に適切な値が設定されていることを確認する必要があります。
MQPUT 呼び出しおよび MQPUT1 呼び出しへの入力では、キュー・マネージャーは 表 1で詳述されている値を使用します。 MQPUT および MQPUT1 呼び出しの出力時に、キュー・マネージャーは、このフィールドにメッセージと共に送信された値を設定します。

MQGET 呼び出しへの入力では、キュー・マネージャーは 表 1 で詳述されている値を使用します。 MQGET 呼び出しの出力時に、キュー・マネージャーは、このフィールドに、取り出されたメッセージの値を設定します。

このフィールドの初期値は 1 です。 MDVER 値が MDVER2 未満の場合、このフィールドは無視されます。

MDSID (4 バイトの文字ストリング)

構造体 ID

値は次のものでなければなりません。
MDSIDV
メッセージ記述子構造体の ID。

これは常に入力フィールドです。 このフィールドの初期値は MDSIDV です。

MDUID (12 バイトの文字ストリング)

ユーザー ID。

これは、メッセージの ID コンテキスト の一部です。 メッセージ・コンテキストについて詳しくは、 メッセージ・コンテキスト および コンテキスト情報の制御を参照してください。

MDUID には、メッセージを発信したアプリケーションのユーザー ID を指定します。 キュー・マネージャーはこの情報を文字データとして扱いますが、そのフォーマットの定義はしません。

メッセージを受信した後、後続の MQOPEN または MQPUT1 呼び出しの OBJDSC パラメーターの ODAU フィールドで MDUID を使用することができます。これにより、オープンを実行するアプリケーションの代わりに、 MDUID ユーザーに対して許可検査が実行されます。

キュー・マネージャーは、MQPUT または MQPUT1 呼び出しについて この情報を生成する際、環境によって決定されるユーザー ID を使用します。

ユーザー ID は、各環境で次のように決定されます。
  • z/OS では、キュー・マネージャーは次のものを使用します。
    • バッチでは、JES JOB カードまたは開始済みタスクのユーザー ID。
    • TSO では、ログオン・ユーザー ID。
    • CICS に対して、タスクに関連付けられたユーザー識別子
    • IMS の場合、アプリケーションのタイプに応じた以下のユーザー ID。
      • 回数:
        • 非メッセージ BMP 領域
        • 非メッセージ IFP 領域
        • 成功した GU 呼び出しを発行しなかったメッセージ BMP 領域およびメッセージ IFP 領域
        キュー・マネージャーは、領域 JES JOB カードのユーザー ID か、TSO ユーザー ID を使用します。 それらの値がブランクまたはヌルの場合には、プログラム仕様ブロック (PSB) の名前を使用します。
      • 回数:
        • 成功した GU 呼び出しを発行した メッセージ BMP 領域およびメッセージ IFP 領域
        • MPP 領域
        キュー・マネージャーは、以下のうち 1 つを使用します。
        • メッセージに関連付けられたサインオン・ユーザー ID
        • 論理端末 (LTERM) 名
        • 領域 JES JOB カードのユーザー ID
        • TSO のユーザー ID
        • PSB 名
  • IBM iでは、キュー・マネージャーは、アプリケーション・ジョブに関連付けられたユーザー・プロファイルの名前を使用します。
  • HP Integrity NonStop Serverでは、キュー・マネージャーは、 MQSeries プリンシパル・データベース内の Tandem ユーザー ID 用に定義されている MQSeries プリンシパルを使用します。
  • UNIX では、キュー・マネージャーは次のものを使用します。
    • アプリケーションのログオン名
    • ログオンを利用できない場合は、プロセスの実効ユーザー ID
    • アプリケーションが CICS トランザクションである場合は、トランザクションに関連付けられたユーザー ID
  • VSE/ESA では、これは予約フィールドです。
  • Windowsでは、キュー・マネージャーはログオン・ユーザー名の最初の 12 文字を使用します。

MQPUT および MQPUT1 呼び出しの場合、PMO パラメーターに PMSETI または PMSETA が指定されていれば、これは入出力フィールドです。 フィールド内でヌル文字より後の情報はすべて破棄されます。 ヌル文字およびその後に続く文字は、キュー・マネージャーによってブランクに変換されます。 PMSETI または PMSETA が指定されていない場合、入力においてこのフィールドは無視され、出力専用フィールドになります。

MQPUT または MQPUT1 呼び出しが正常に完了すると、メッセージがキューに書き込まれた場合、このフィールドには、そのメッセージと共に送信された MDUID が入ります。 これは、メッセージが保存された場合 (保存パブリケーションについて詳しくは、PMRET の説明を参照してください)、そのメッセージと共に保持された MDUID の値になりますが、メッセージがパブリケーションとしてサブスクライバーに送信された場合には MDUID として使用されません。これは、サブスクライバーが提供する値が、サブスクライバーに送信されるすべてのパブリケーションにおいて MDUID をオーバーライドするためです。 メッセージがコンテキストを持っていない場合、フィールドは完全にブランクになります。

これは、MQGET 呼び出しの出力フィールドです。 このフィールドの長さは LNUID によって指定されます。 このフィールドの初期値は 12 個のブランク文字です。

MDVER (10 桁の符号付き整数)

構造体のバージョン番号。

値は次のいずれかでなければなりません。
MDVER1
バージョン 1 のメッセージ記述子の構造体。
MDVER2
バージョン 2 のメッセージ記述子の構造体。

注: version-2 の MQMD が使用される場合、キュー・マネージャーは、アプリケーション・メッセージ・データの先頭に存在する可能性があるすべての MQ ヘッダー構造体に対して追加の検査を実行します。詳しくは、MQPUT 呼び出しの使用上の注意を参照してください。
これより新しいバージョンの構造体にのみ存在するフィールドは、そのフィールドの説明にその旨記載されています。 以下の定数は、現行バージョンのバージョン番号を指定しています。
MDVERC
メッセージ記述子の構造体の現行バージョン。

これは常に入力フィールドです。 このフィールドの初期値は MDVER1 です。

初期値

表 1. MQMD のフィールドの初期値
フィールド名 定数の名前 定数の値
MDSID MDSIDV 'MD¬¬'
MDVER MDVER1 1
MDREP RONONE 0
MDMT MTDGRM 8
MDEXP EIULIM -1
MDFB FBNONE 0
MDENC ENNAT 環境に依存
MDCSI CSQM 0
MDFMT FMNONE ブランク
MDPRI PRQDEF -1
MDPER PEQDEF 2
MDMID MINONE Null
MDCID CINONE Null
MDBOC なし 0
MDRQ なし ブランク
MDRM なし ブランク
MDUID なし ブランク
MDACC ACNONE Null
MDAID なし ブランク
MDPAT ATNCON 0
MDPAN なし ブランク
MDPD なし ブランク
MDPT なし ブランク
MDAOD なし ブランク
MDGID GINONE Null
MDSEQ なし 1
MDOFF なし 0
MDMFL MFNONE 0
MDOLN OLUNDF -1
注:
  1. 記号¬は、単一のブランク文字を表します。

RPG 宣言

     D*..1....:....2....:....3....:....4....:....5....:....6....:....7..
     D*
     D* MQMD Structure
     D*
     D* Structure identifier
     D  MDSID                  1      4    INZ('MD  ')
     D* Structure version number
     D  MDVER                  5      8I 0 INZ(1)
     D* Options for report messages
     D  MDREP                  9     12I 0 INZ(0)
     D* Message type
     D  MDMT                  13     16I 0 INZ(8)
     D* Message lifetime
     D  MDEXP                 17     20I 0 INZ(-1)
     D* Feedback or reason code
     D  MDFB                  21     24I 0 INZ(0)
     D* Numeric encoding of message data
     D  MDENC                 25     28I 0 INZ(273)
     D* Character set identifier of messagedata
     D  MDCSI                 29     32I 0 INZ(0)
     D* Format name of message data
     D  MDFMT                 33     40    INZ('        ')
     D* Message priority
     D  MDPRI                 41     44I 0 INZ(-1)
     D* Message persistence
     D  MDPER                 45     48I 0 INZ(2)
     D* Message identifier
     D  MDMID                 49     72    INZ(X'00000000000000-
     D                                     0000000000000000000000-
     D                                     000000000000')
     D* Correlation identifier
     D  MDCID                 73     96    INZ(X'00000000000000-
     D                                     0000000000000000000000-
     D                                     000000000000')
     D* Backout counter
     D  MDBOC                 97    100I 0 INZ(0)
     D* Name of reply queue
     D  MDRQ                 101    148    INZ
     D* Name of reply queue manager
     D  MDRM                 149    196    INZ
     D* User identifier
     D  MDUID                197    208    INZ
     D* Accounting token
     D  MDACC                209    240    INZ(X'00000000000000-
     D                                     0000000000000000000000-
     D                                     0000000000000000000000-
     D                                     000000')
     D* Application data relating toidentity
     D  MDAID                241    272    INZ
     D* Type of application that put themessage
     D  MDPAT                273    276I 0 INZ(0)
     D* Name of application that put themessage
     D  MDPAN                277    304    INZ
     D* Date when message was put
     D  MDPD                 305    312    INZ
     D* Time when message was put
     D  MDPT                 313    320    INZ
     D* Application data relating toorigin
     D  MDAOD                321    324    INZ
     D* Group identifier
     D  MDGID                325    348    INZ(X'00000000000000-
     D                                     0000000000000000000000-
     D                                     000000000000')
     D* Sequence number of logical messagewithin group
     D  MDSEQ                349    352I 0 INZ(1)
     D* Offset of data in physical messagefrom start of logical message
     D  MDOFF                353    356I 0 INZ(0)
     D* Message flags
     D  MDMFL                357    360I 0 INZ(0)
     D* Length of original message
     D  MDOLN                361    364I 0 INZ(-1)
1 キュー・マネージャーによって生成される MDMID は、4 バイトの製品 ID (ASCII または EBCDIC の AMQ¬ または CSQ¬¬ は単一のブランク文字を表します) と、その後に続く製品固有のストリングで構成されます。 IBM MQ では、これにはキュー・マネージャー名の最初の 12 文字と、システム・クロックから派生した値が含まれます。 したがって、メッセージ ID を必ず固有の値にするためには、相互通信可能なすべてのキュー・マネージャーで、プログラム名の最初の 12 文字が異なっている必要があります。 また、固有のストリングを生成する機能は、システム・クロックが逆方向に変更されないことを前提としています。 キュー・マネージャーにより生成されたメッセージ ID が、アプリケーションにより生成されたメッセージ ID と重複しないようにするには、アプリケーションは、最初の文字が ASCII または EBCDIC の A から I の範囲 (X'41' から X'49' および X'C1' から X'C9') である ID を生成しないようにする必要があります。 ただし、アプリケーションでこれらの範囲の先頭文字をもつ ID を生成しないように回避措置がとられることはありません。