![[IBM i]](ngibmi.gif)
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 の異なるバージョンの使用
- 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 という値が設定されます。
メッセージが伝送キューにある場合、MQMD 内の一部のフィールドは特定の値に設定されます。詳しくは、 IBM i での MQXQH (伝送キュー・ヘッダー) を参照してください。
メッセージ・コンテキスト
- 識別コンテキストは、そのメッセージを最初に 入れたアプリケーションに関係しています。
- 起点コンテキストは、そのメッセージを最後に 入れたアプリケーションに関係しています。
- ユーザー・コンテキストは、そのメッセージを最初に 書き込んだアプリケーションに関係しています。
識別コンテキストと起点コンテキストには通常、前述のような意味がありますが、実際には 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フィールドに保管されます。
- z/OS® では、アカウンティング情報は次のように設定されます。
- 最後のバイトを、会計トークン・タイプ (以下の値のいずれか) に設定します。
- ATTCIC
- CICS LUOW ID。
- ATTDOS
- PC DOS のデフォルトの会計トークン。
- ATTWNT
- Windows セキュリティー ID。
- ATT400
- IBM i アカウンティング・トークン。
- ATTUNX
- UNIX 数値 ID。
- ATTUSR
- ユーザー定義の会計トークン。
- 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* レポート・オプションのうちいずれかを指定した場合は、満了したメッセージが廃棄されるときにレポートが生成されます。 オプションがまったく指定されていない場合、そうしたレポートは生成されません。指定時間の経過後は、このメッセージは関係がなくなったと見なされます (後のメッセージに置き換わったと考えられるため)。
有効期限に基づいてメッセージを廃棄する他のプログラムはいずれも、要求に応じて、該当のレポート・メッセージを送らなければなりません。注:- メッセージがゼロの
MDEXP時間を指定して書き込まれる場合、MQPUT または MQPUT1 呼び出しは、理由コード RC2013 を戻して失敗します。この場合、レポート・メッセージは生成されません。 - 有効期限を過ぎたメッセージが、実際に廃棄されないこともあるので、有効期限を過ぎても取り出しの対象にならないメッセージがキューに入っている可能性もあります。 それにもかかわらず、これらのメッセージがキュー内のメッセージとしてカウントされる目的は、キュー・サイズによるトリガーなどです。
- 満了レポートは、廃棄の対象となったときでなく、要求に応じてメッセージが実際に廃棄されるときに生成されます。
- 要求に応じて、満了メッセージの廃棄および満了レポートを生成するのは、アプリケーションの作業単位の一部ではありません。メッセージが、作業単位で操作される MQGET 呼び出しの結果、廃棄されるようにスケジュールされていたとしても同じです。
- ほとんど満了しているメッセージが作業単位の中で MQGET 呼び出しによって取り出され、その後でその作業単位がバックアウトされると、メッセージが廃棄の対象になり、再び取り出すことができないようになることもあります。
- ほぼ満了したメッセージが GMLK を指定した MQGET 呼び出しによりロックされる場合、そのメッセージは、GMMUC を指定した MQGET 呼び出しにより検索される前に廃棄対象にすることができます。これが起きる場合は、その後の MQGET 呼び出しにおいて、理由コード RC2034 が戻されます。
- 有効期限時刻がゼロよりも大きい要求メッセージを取り出す場合、アプリケーションは応答メッセージを送信するときに以下のいずれかのアクションを実行できます。
- 有効期限までの残り時間を、要求メッセージから応答メッセージにコピーする。
- 応答メッセージ中の有効期限を、ゼロより大きい明示的な値に設定する。
- 応答メッセージ中の満了時間を EIULIM に設定する。
- トリガー・メッセージは常に EIULIM で生成されます。
- 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フィールドはゼロに設定されます。
- アプリケーションがリモート・キューにメッセージを書き込む場合、キュー・マネージャーは、メッセージを最初にローカル伝送キューに入れ、MQXQH 構造を用いてアプリケーション・メッセージ・データに接頭部を付加します。 キュー・マネージャーは、2 つの
以下のような特殊値が認識されます。- 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 の
RMFMT、RMCSI、およびRMENCの各フィールドで指定されます。 この構造体の詳細については、 IBM i での MQRMH (参照メッセージ・ヘッダー) を参照してください。 GMCONV オプションを MQGET 呼び出しに指定している場合は、この形式のメッセージを変換することができます。 - FMRFH
- 規則およびフォーマット・ヘッダー。
メッセージ・データは、規則およびフォーマット・ヘッダー MQRFH で始まります。このデータの後に他のデータが続くこともあります。 データの形式名、文字セット、およびエンコードは、MQRFH の
RFFMT、RFCSI、およびRFENCフィールドでそれぞれ与えられます。 GMCONV オプションを MQGET 呼び出しに指定している場合は、この形式のメッセージを変換することができます。 - FMRFH2
- 規則およびフォーマット・ヘッダー・バージョン 2。
メッセージ・データは、バージョン 2 の規則およびフォーマット・ヘッダー MQRFH2 で始まります。このデータの後に他のデータが続くこともあります。 オプションのデータの形式名、文字セット、およびエンコードは、MQRFH2 の
RF2FMT、RF2CSI、および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 が指定されていない場合。
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 を使用してメッセージを書き込む場合は、注意が必要です。 メッセージが次の条件に該当する場合、- セグメントではない
- グループに属していない
- 転送されない
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 内の
MDFMT、MDCSI、および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 が戻ります。
これらのフラグは、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 つ以上を任意の組み合わせで指定することによって目的のメッセージを取得できます。このメッセージの選択には、次のフィールドを使用できます。MDMIDMDCIDMDGIDMDSEQMDOFF
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 を指定しなかった場合。
MDOFFに適切な値が設定されていることを確認する必要があります。MQPUT 呼び出しおよび MQPUT1 呼び出しへの入力では、キュー・マネージャーは 表 1で詳述されている値を使用します。 MQPUT および MQPUT1 呼び出しの出力時に、キュー・マネージャーは、このフィールドにメッセージと共に送信された値を設定します。論理メッセージのセグメントに関するレポート・メッセージの場合は、
MDOLNフィールドを使用して (OLUNDF 以外の値であること)、キュー・マネージャーが保存するセグメント情報の中のオフセット値を更新します。MQGET 呼び出しへの入力では、キュー・マネージャーは 表 1 で詳述されている値を使用します。 MQGET 呼び出しの出力時に、キュー・マネージャーは、このフィールドに、取り出されたメッセージの値を設定します。
フィールドの初期値は、0 です。
MDVER値が MDVER2 未満の場合、このフィールドは無視されます。- MDOLN (10 桁の符号付き整数)
元のメッセージの長さ。
これは、セグメントとしての レポート・メッセージにのみ関連するフィールドです。 これは、レポート・メッセージが関連するメッセージ・セグメントの長さを指定します。セグメントが属する論理メッセージの長さやレポート・メッセージ内のデータの長さは指定しません。
注: セグメントであるメッセージのレポート・メッセージを生成する場合、キュー・マネージャーおよびメッセージ・チャネル・エージェントは、元のメッセージのMDGID、MDSEQ、MDOFF、およびMDMFLフィールドをレポート・メッセージの MQMD にコピーします。 その結果、そのレポート・メッセージも 1 つのセグメントです。 レポート・メッセージを生成するアプリケーションで、同じことを実行し、MDOLNフィールドが正しく設定されていることを確認することを推奨します。以下のような特殊値が定義されます。- OLUNDF
- 元のメッセージの長さが定義されていません。
MDOLNは、MQPUT 呼び出しおよび MQPUT1 呼び出しの入力フィールドですが、アプリケーションが提供する値は、以下に示す特定の場合にのみ受け入れられます。- 書き込んでいるメッセージがセグメントであると同時にレポート・メッセージでもある場合、キュー・マネージャーは指定された値を受け入れます。 値は次のものでなければなりません。
- セグメントが最後のセグメントではない場合は、ゼロより大きい値
- セグメントが最後のセグメントである場合は、ゼロ以上の値
- メッセージに含まれるデータの長さ以上の値
- 書き込んでいるメッセージがセグメントであるが、レポート・メッセージではない場合、キュー・マネージャーはこのフィールドを無視して、アプリケーション・メッセージ・データの長さを使用します。
- 上記以外の場合、キュー・マネージャーはこのフィールドを無視して、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 個のブランク文字です。
- z/OS では、キュー・マネージャーは次のものを使用します。
- 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 まで)
MDPDとMDPTフィールドでは、グリニッジ標準時 (GMT) に正確に設定されているシステム・クロックに従って、GMT が使用されます。メッセージが作業単位の一部として書き込まれた場合は、作業単位がコミットされた日付ではなく、メッセージが書き込まれた日付です。
MQPUT および MQPUT1 呼び出しの場合、PMO パラメーターに または PMSETA が指定されていれば、これは入出力フィールドです。 フィールドの内容は、キュー・マネージャーによって検査されませんが、フィールド内のヌル文字のあとにある情報はいずれも廃棄されます。 ヌル文字およびその後に続く文字は、キュー・マネージャーによってブランクに変換されます。 PMSETA が指定されていない場合、入力においてこのフィールドは無視され、出力専用フィールドになります。
MQPUT または MQPUT1 呼び出しが正常に完了すると、メッセージがキューに書き込まれた場合、このフィールドには、そのメッセージと共に送信された
MDPDが入ります。 これは、メッセージが保存された場合 (保存パブリケーションについて詳しくは、PMRET の説明を参照してください)、そのメッセージと共に保持されたMDPDの値になりますが、メッセージがパブリケーションとしてサブスクライバーに送信された場合にはMDPDとして使用されません。これは、サブスクライバーが提供する値が、サブスクライバーに送信されるすべてのパブリケーションにおいてMDPDをオーバーライドするためです。 メッセージがコンテキストを持っていない場合、フィールドは完全にブランクになります。これは、MQGET 呼び出しの出力フィールドです。 このフィールドの長さは LNPDAT によって指定されます。 このフィールドの初期値は 8 個のブランク文字です。
- MDPER (10 桁の符号付き整数)
メッセージの持続性。
このフィールドは、システム障害が発生してキュー・マネージャーを再始動してもメッセージが残るかどうかを示します。 MQPUT および MQPUT1 呼び出しでは、値は次のいずれかでなければなりません。- PEPER
- メッセージは持続します。
これは、システム障害が発生して キュー・マネージャーを再始動してもメッセージが残ることを意味します。 メッセージが書き込まれ、その書き込みの作業単位がコミットされると (つまり、メッセージが作業単位の一部として書き込まれると)、メッセージは補助記憶域に保存されます。 メッセージがキューから除去され、受信者の作業単位がコミットされるまで (つまり、メッセージが作業単位の一部として取り出されるまで)、そのメッセージは補助記憶域に残ります。
持続メッセージがリモート・キューに送信される場合は、蓄積交換機能が使用されて、宛先への経路にそって各キュー・マネージャーでメッセージが保持されます。これは、次のキュー・マネージャーにメッセージが到達したことが分かるまで続きます。
持続メッセージを以下に書き込むことはできません。- 一時動的キュー
- カップリング・ファシリティー構造体レベルが 3 未満の場合や カップリング・ファシリティー構造体がリカバリー不能である場合の共有キュー
- PENPER
- メッセージは持続しません。
これは、システム障害が発生してキュー・マネージャーを再始動すると、通常はメッセージが残らないことを意味します。 これは、キュー・マネージャーの再始動中にメッセージの完全なコピーが補助記憶域で 見つかった場合でも、適用されます。
共有キューの特殊な事例として、キュー共有グループでキュー・マネージャーを再始動しても非永続メッセージが残る が、共有キューでメッセージの保管に使用したカップリング・ファシリティーに障害が発生するとメッセージは残らないという場合があります。
- PEQDEF
- メッセージの持続性はデフォルト時のものです。
- キューがクラスター・キューである場合、メッセージの持続性は、メッセージが書き込まれるキューの特定のインスタンスを所有する宛先キュー・マネージャーで定義された DefPersistence 属性から取られます。 通常、クラスター・キューのインスタンスの DefPersistence 属性の値はすべて同じですが、これは必須ではありません。
DefPersistenceの値は、メッセージが宛先キューに置かれるときに
MDPERフィールドにコピーされます。 その後、DefPersistenceが変更されても、既にキューに置かれているメッセージは影響を受けません。 - キューがクラスター・キューではない場合、メッセージの持続性は、ローカルのキュー・マネージャーで定義された DefPersistence 属性から取られます。これは、宛先キュー・マネージャーがリモートの場合も同じです。キュー名の解決パスに複数の定義がある場合、デフォルトの持続性は、パスの最初の定義にあるこの属性の値から取られます。 これには以下のものが考えられます。
- 別名キュー
- ローカル・キュー
- リモート・キューのローカル定義
- キュー・マネージャーの別名
- 伝送キュー (例えば、
DefXmitQNameキューなど)
DefPersistenceの値は、メッセージが書き込まれるときに
MDPERフィールドにコピーされます。 その後、DefPersistenceが変更されても、既に書き込まれているメッセージは影響を受けません。
- キューがクラスター・キューである場合、メッセージの持続性は、メッセージが書き込まれるキューの特定のインスタンスを所有する宛先キュー・マネージャーで定義された DefPersistence 属性から取られます。 通常、クラスター・キューのインスタンスの 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 が返されることはありません。
- キューがクラスター・キューの場合、メッセージの優先順位は、メッセージが書き込まれたキューの特定のインスタンスを所有する宛先キュー・マネージャーで定義された DefPriority 属性から取られます。 通常、クラスター・キューのインスタンスの DefPriority 属性の値はすべて同じですが、これは必須ではありません。
ローカル・キュー・マネージャーでサポートされている最大の優先順位 (この最大値は 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 が返されることがまれにあります。 これは、グローバル時間標準にうるう秒が挿入されたときに発生します。MDPDとMDPTフィールドでは、グリニッジ標準時 (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)
レポート・メッセージを受け取ったアプリケーションでは、MQMD の
MDFBフィールドを調べることにより、報告が生成された理由を判別できます。詳細については、MDFBフィールドを参照してください。メッセージをトピックに書き込むときにレポート・オプションを使用すると、ゼロ個以上のレポート・メッセージが生成され、アプリケーションに送信される可能性があります。 これは、パブリケーション・メッセージが、ゼロ個以上のサブスクライブ・アプリケーションに送信される可能性があるためです。
例外オプション: 次のオプションのいずれかを指定して、例外レポート・メッセージを要求することができます。- ROACTIVITY
必要なアクティビティー報告書
このレポート・オプションを使用すると、サポートされるアプリケーションがこのレポート・オプションが設定されたメッセージを処理する場合に、アクティビティー報告書を生成することが可能になります。
このレポート・オプションが設定されたメッセージは、そのオプションが「認識」されない場合でも、任意のキュー・マネージャーによって受け入れられる必要があります。 これによって、従来のキュー・マネージャーによって処理される場合でも、レポート・オプションを任意のユーザー・メッセージで設定することが可能となります。 これを行うため、レポート・オプションは ROAUM サブフィールドに置かれます。
ROACT が設定されたメッセージでプロセス (キュー・マネージャーまたはユーザー・プロセスのいずれか) がアクティビティーを実行する場合、プロセスはアクティビティー報告書を生成して書き込むよう選択することができます。
アクティビティー報告書オプションを使用すると、キュー・マネージャー・ネットワークを通して任意のメッセージの経路をトレースできるようになります。 レポート・オプションは、任意の現行ユーザー・メッセージで指定でき、メッセージのネットワーク経路の計算を即時に開始できるようになります。 メッセージを生成するアプリケーションがアクティビティー・レポートの生成を使用可能にすることができない場合は、キュー・マネージャー管理者が提供する API 交差出口を使用することにより、それを使用可能にすることができます。
以下のいくつかの条件がアクティビティー報告書に適用されます。- ネットワーク内でアクティビティー報告書を生成できるキュー・マネージャーが少ない場合、経路は大まかになります。
- 取られる経路を判別するために、アクティビティー報告書を簡単に「オーダーできない」可能性があります。
- アクティビティー報告書は、その要求された宛先への経路を検索できない可能性があります。
- 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
- レポート・メッセージの満了時間および廃棄フラグを設定します。このオプションを使用すると、レポート・メッセージおよび応答メッセージは、元のメッセージから満了時間および廃棄フラグ (廃棄するかどうか) を継承します。 このオプションを設定すると、レポート・メッセージおよび応答メッセージは以下のようになります。
- RODISC フラグを継承します (設定されている場合)。
- メッセージが満了レポートではない場合、メッセージの残りの満了時間を継承します。 メッセージが満了レポートである場合、満了時間は 60 秒に設定されます。
注:- レポートおよび応答メッセージは、廃棄フラグおよび満了値と共に生成され、システム内に残しておくことはできません。
- トレース経路メッセージは、トレース経路が有効ではないキュー・マネージャーの宛先キューには到達できなくなります。
- 通信リンクが壊れている場合でも、送達できないレポートでキューがいっぱいになることはありません。
- コマンド・サーバー応答は要求の残りの満了時間を継承します。
配布時確認オプション: 次のオプションのいずれかを指定して、配布時確認レポート・メッセージを要求することができます。- 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にコピーすることを示します。 - ROPCI
- 相関 ID を渡します。
レポートまたは応答がこのメッセージの結果として生成される場合、このメッセージの
MDCIDをレポート・メッセージまたは応答メッセージのMDCIDにコピーすることになります。パブリケーション・メッセージの
MDCIDは、それが SOSCID オプションを使用し、MQSD のSCDICフィールドを CINONE に設定する場合を除き、サブスクライバー固有のものになります。 このため、レポート・メッセージまたは応答メッセージのMDCIDにコピーされるMDCIDは、各サブスクライバーによって異なる可能性があります。このオプションを指定しない場合、ROCMTC を指定したものと見なされます。
要求に応答するサーバー、またはレポート・メッセージを生成するサーバーは、元のメッセージの中に ROPCI または ROPMI オプションが設定されていたかどうかを調べるようにしてください。 設定されていた場合、サーバーは、これらのオプションで説明されている処置を取るはずです。 いずれも設定されていない場合、サーバーは、対応するデフォルトの処置を取るはずです。
: 次のオプションのいずれかを指定して、元のメッセージを宛先キューに配布できない場合のそのメッセージの後処理を制御することができます。 これらのオプションが適用されるのは、送信側アプリケーションが例外レポート・メッセージを要求した場合に、そのメッセージが生成中となるような状況の場合のみです。 アプリケーションは処理オプションを、例外レポートの要求とは無関係に設定できます。- RODLQ
- 送達不能キューにメッセージを入れます。これは、デフォルトの処置であり、メッセージを宛先キューに送達できない場合、メッセージが送達不能キューに入れられることを示します。 これは次のような場合に行われます。
- MQPUT または MQPUT1 呼び出しによって戻された理由コードを用いて、元のメッセージを書き込んだアプリケーションに問題を同期的に通知できない場合。 送信側によって要求される場合は、例外レポート・メッセージが生成されます。
- 元のメッセージを書き込むアプリケーションがトピックに書き込んでいた場合。
送信側からの要求があった場合には、例外レポート・メッセージが生成されます。
- RODISC
- メッセージを廃棄します。これは、宛先キューに配布できないメッセージは廃棄する必要があることを示します。 これは次のような場合に行われます。
- MQPUT または MQPUT1 呼び出しによって戻された理由コードを用いて、元のメッセージを書き込んだアプリケーションに問題を同期的に通知できない場合。 送信側によって要求される場合は、例外レポート・メッセージが生成されます。
- 元のメッセージを書き込むアプリケーションがトピックに書き込んでいた場合。
送信側からの要求があった場合には、例外レポート・メッセージが生成されます。
元のメッセージを送達不能キューに入れずに、元のメッセージを送信側に返す必要がある場合、送信側は ROEXCF を付けて RODISC を指定する必要があります。
デフォルト・オプション: レポート・オプションが不要な場合には、次の値を指定できます。- RONONE
- レポートは必要ありません。
この値は、他のオプションを指定しなかったことを示します。 RONONE は、プログラム文書化を支援するために定義されています。 このオプションを他のオプションと組み合わせて使用することは意図されていませんが、値がゼロであるため、そのような使い方をしても検出できません。
一般情報:- 必要とされるすべてのレポート・タイプは、元のメッセージを送信するアプリケーション具体的に指定されている必要があります。 例えば、COA レポートは要求されているが、例外レポートは要求されないという場合は、メッセージが宛先キューに入れられるときに COA レポートが生成されますが、メッセージが宛先キューに到着したときに宛先キューがいっぱいであっても、例外レポートは生成されません。
MDREPオプションが設定されていない場合、キュー・マネージャーまたはメッセージ・チャネル・エージェント (MCA) によって、レポート・メッセージが生成されることはありません。一部のレポート・オプションは、ローカル・キュー・マネージャーで認識できなくても指定できます。これは、宛先 キュー・マネージャーでオプションを処理する場合に有用です。 詳しくは、 IBM i を参照してください。
レポート・メッセージが要求される場合、レポートの送信先のキューの名前を
MDRQフィールドで指定する必要があります。 レポート・メッセージが受信されると、メッセージ記述子のMDFBフィールドを調べることにより、レポートの性質を調べることができます。 - レポート・メッセージを生成するキュー・マネージャーまたは MCA が、レポート・メッセージを応答キューに入れることができない場合 (例えば、応答キューまたは伝送キューが満杯になっているため)、レポート・メッセージは、代わりに送達不能キューに入ります。 これにも 失敗した場合、あるいは送達不能キューがない場合に、取るべきアクションは、レポート・メッセージのタイプによって決まります。
- レポートメッセージが例外レポートの場合、例外レポートの生成の原因となったメッセージは送信キューに残ります。これにより、メッセージが失われないことが保証されます。
- その他のすべてのレポートタイプについては、レポートメッセージは破棄され、処理は通常通り継続されます。 処理を実行する理由は、元のメッセージがすでに無事に送達されているか (COA または COD レポート・メッセージの場合)、元のメッセージがすでに対象外になっているか (満了レポート・メッセージの場合) のいずれかです。
- レポートが生成されると、
MDRQキューがオープンされ、レポートを生成させたメッセージの MQMD のMDUID許可を使用して、レポート・メッセージが書き込まれます。ただし、以下の場合は例外です。- 受信側の MCA によって生成される例外レポートは、レポートを生成させたメッセージを書き込むために MCA が使用したものと同じ許可を使って書き込まれます。 使用されるユーザー ID は、
CDPAチャネル属性によって決まります。 - キュー・マネージャーによって生成される COA レポートは、レポートを生成させたメッセージをそのキュー・マネージャーに書き込むときに使用されたものと同じ権限を使って書き込まれます。 例えば、受信側の MCA がその MCA のユーザー ID を使ってメッセージを書き込んだ場合、キュー・マネージャーは MCA のユーザー ID を使って COA レポートを書き込みます。
レポートがリモート宛先に移動しなければならない場合は、他のメッセージに対する場合と同じ方式で、それを受け取るかどうかを、送信側と受信側が決めることができます。
- 受信側の MCA によって生成される例外レポートは、レポートを生成させたメッセージを書き込むために MCA が使用したものと同じ許可を使って書き込まれます。 使用されるユーザー ID は、
- データ付きのレポート・メッセージが要求される場合は、以下のことが行われます。
- レポート・メッセージは、常に、元のメッセージの送信側が要求したデータ量で生成されます。 レポート・メッセージが応答先キューに対して大きすぎると、上記の処理が行われます。レポート・メッセージは、応答キューに適合するように切り捨てられることはありません。
- 元のメッセージの
MDFMTが FMXQH の場合、レポート内のデータは、MQXQH を含んでいません。 レポート・データは、元のメッセージにある MQXQH の後にあるデータの最初のバイトから始まります。 これは、キューが伝送キューかどうかに関係なく起こります。
- COA、COD、または満了レポート・メッセージが、応答キューで受け取られた場合は、元のメッセージが、適切に到着した、送達された、または満了したことが保証されます。 ただし、これらのレポート・メッセージの 1 つ以上が要求され、受信されていない場合は、以下に示すいずれかが発生した可能性があるため、逆を想定することはできません。
- リンクがダウンしたために、レポート・メッセージは中止された。
- 中間伝送キューまたは応答キューに、ブロッキング条件 (キューがいっぱいである、書き込みが禁止されている、など) が存在しているため、レポート・メッセージは中止された。
- レポート・メッセージが送達不能キューに入っている。
- キュー・マネージャーがレポート・メッセージを生成しようとしたとき、該当するキューにメッセージを書き込めず、また送達不能キュー上にも書き込めなかったため、レポート・メッセージを生成することができませんでした。
- 報告される処置 (到着、送達、または満了) と該当するレポート・メッセージの生成との間に、キュー・マネージャーの障害が発生しました。 (COD レポート・メッセージは同じ作業単位内で生成されるので、COD レポート・メッセージではアプリケーションが作業単位内で元のメッセージを取り出す場合は上記のことは起こりません。)
例外レポート・メッセージも、上記の 1、2 および 3 の理由から、同様に中止されることがあります。 しかし、MCA が、例外レポート・メッセージを生成できない (応答キューまたは送達不能キューのいずれかにレポート・メッセージを書き込むことができない) 場合は、元のメッセージは送信側の伝送キューにとどまり、チャネルがクローズされます。 このような状況は、レポート・メッセージがチャネルの送信側、受信側のどちらで生成されても起こります。
- 元のメッセージが一時的にブロックされていても (その結果として例外レポート・メッセージが生成され、元のメッセージは送達不能キューに書き込まれる)、そのブロックがクリアされ、アプリケーションが元のメッセージを送達不能キューから読み込み、その宛先に再度メッセージを書き込む場合は、以下に示す動作が発生する場合もあります。
- 例外レポート・メッセージは生成されたが、最終的に元のメッセージは、その宛先に正しく到着する。
- 元のメッセージは、あとで別のブロック状態になる可能性があるため、1 つの元のメッセージに対して、例外レポート・メッセージが 2 つ以上生成されます。
トピックに書き込むときのレポート・メッセージ:- メッセージをトピックに書き込むときに、レポートを生成することができます。 このメッセージはトピックのすべてのサブスクライバーに送信されます。 ゼロの場合もあれば、1 またはそれ以上の場合もあります。 結果として多数のレポート・メッセージが生成される場合があるので、レポート・オプションを使用するように選択する場合に、これを考慮に入れる必要があります。
- メッセージをトピックに書き込むときに、メッセージのコピーを置く宛先キューが多数存在する場合があります。 そのうちのいくつかの宛先キューに問題 (例えばキュー・フル) がある場合、MQPUT の実行が成功するかどうかは (メッセージの持続性に応じて) NPMSGDLV または PMSGDLV の設定に依存します。 宛先キューへのメッセージ送達が必ず成功するという設定 (例えばそれが永続サブスクライバーへの持続メッセージで、PMSGDLV が ALL または ALLDUR に設定されている) の場合、成功とは、次の基準のいずれかが満たされる場合として定義されます。
- サブスクライバー・キューへの書き込みが成功する
- サブスクライバー・キューがメッセージを受け取ることができない場合、RODLQ を使用して送達不能キューへの書き込みが正常に行われる
- サブスクライバー・キューがメッセージを受け取ることができない場合に RODISC を使用する
メッセージ・セグメントのレポート・メッセージ:- セグメント化が許可されているメッセージの報告メッセージを要求できます (MFSEGA フラグを参照してください)。 キュー・マネージャーがメッセージをいくつかのセグメントに分割する必要があると判断した場合には、関連する条件に応じてセグメントごとにレポート・メッセージが生成されます。 そのため、アプリケーションでは、要求された各タイプの複数のレポート・メッセージを受信できるようにしてください。 レポート・メッセージの
MDGIDフィールドを使用することによって、元のメッセージのグループ ID を複数の報告と関連付けることができ、MDFBフィールドを使用することによって、各レポート・メッセージのタイプを識別できます。 - GMLOGO を使用してセグメントに関するレポート・メッセージを取り出す場合には、MQGET 呼び出しを続けて発行したときに異なるタイプ のレポートが戻されることがあるので注意してください。 例えば、キュー・マネージャーによってセグメントに分割されたメッセージに対して COA レポートおよび COD レポートを要求されている場合、それらのレポート・メッセージに対して MQGET 呼び出しを発行したときに COA レポート・メッセージと COD レポート・メッセージが順不同で混ざり合って戻ることがあります。 この問題を回避するには、GMCMPM オプションを使用します (GMATM を組み合わせても構いません)。 GMCMPM を使用すると、キュー・マネージャーは同じレポート・タイプのレポート・メッセージを組み立てます。 例えば、最初の MQGET 呼び出しで元のメッセージに関連するすべての COA メッセージの再組み立てを実行し、2 番目の MQGET 呼び出しですべての COD メッセージの再組み立てを実行する場合などが考えられます。 いずれかが先に組み立てられるかは、どちらのタイプのレポート・メッセージが先にキューに入るかによります。
- アプリケーション自体がセグメントを書き込む場合、そのアプリケーションではセグメントごとに異なるレポート・オプションを指定できます。 ただし、以下に示す点に注意してください。
- GMCMPM オプションを使用してセグメントを取り出している場合、キュー・マネージャーに格納されるのは、最初の セグメント内のレポート・オプションのみです。
- セグメントを一度に 1 つずつ取り出している場合に、大部分のセグメントに ROCOD* オプションが指定されていても、このオプションが指定されていないセグメントが 1 つでもあれば、GMCMPM オプションを使用して一度の MQGET 呼び出しでレポート・メッセージを取り出したり、GMASGA オプションを使用してすべてのレポート・メッセージが到着した時期を検出したりすることができなくなります。
- MQ ネットワークでは、個々のキュー・マネージャーが異なる機能を持つことができます。 セグメント化をサポートしていないキュー・マネージャーまたは MCA によりセグメントに関するレポート・メッセージが生成された場合、そのキュー・マネージャーまたは MCA は、デフォルト時には、レポート・メッセージの中に必要なセグメント情報を含めません。そのため、このレポート・メッセージのもとになったメッセージを識別することが困難な場合があります。 この問題を回避するには、レポート・メッセージと共にデータを要求 (RO*D オプションと RO*F オプションのうちいずれか該当する方を指定) します。 ただし、RO*D を指定した場合には、アプリケーションがレポート・メッセージを取り出すときに 100 バイト未満 のアプリケーション・メッセージ・データがアプリケーションに戻されることがあるので注意してください (レポート・メッセージがセグメント化をサポートしていないキュー・マネージャーまたは MCA により生成された場合)。
レポート・メッセージのメッセージ記述子の内容: キュー・マネージャーまたはメッセージ・チャネル・エージェント (MCA) は、レポート・メッセージを生成するとき、メッセージ記述子の中のフィールドを以下の値に設定してから、通常の方法でメッセージを書き込みます。
MQMD のフィールド 使用される値 MDSIDMDSIDV MDVERMDVER2 MDREPRONONE MDMTMTRPRT MDEXPEIULIM MDFB報告書の性質に応じて(FBCOA、FBCOD、FBEXP、またはRC*値) MDENC元のメッセージ記述子からコピーされます。 MDCSI元のメッセージ記述子からコピーされます。 MDFMT元のメッセージ記述子からコピーされます。 MDPRI元のメッセージ記述子からコピーされます。 MDPER元のメッセージ記述子からコピーされます。 MDMID元のメッセージ記述子のレポート・オプションで指定されたもの MDCID元のメッセージ記述子のレポート・オプションで指定されたもの MDBOC0 MDRQブランク MDRMキュー・マネージャーの名前。 MDUIDPMPASI オプションが設定したとおり MDACCPMPASI オプションが設定したとおり MDAIDPMPASI オプションが設定したとおり MDPATATQM、またはメッセージ・チャネル・エージェントに対応するもの MDPANキュー・マネージャー名またはメッセージ・チャネル・エージェント名の最初の 28 バイト。 IMS ブリッジによって生成されるレポート・メッセージの場合、このフィールドには、メッセージが関連する IMS システムの XCF グループ名と XCF メンバー名が含まれます。 MDPDレポート・メッセージが送信された日付 MDPTレポート・メッセージが送信された時刻 MDAODブランク MDGID元のメッセージ記述子からコピーされます。 MDSEQ元のメッセージ記述子からコピーされます。 MDOFF元のメッセージ記述子からコピーされます。 MDMFL元のメッセージ記述子からコピーされます。 MDOLNOLUNDF 以外の場合は、元のメッセージ 記述子からコピーされる。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 が指定されていない場合。
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 領域
- 回数:
- 成功した GU 呼び出しを発行した メッセージ BMP 領域およびメッセージ IFP 領域
- MPP 領域
- メッセージに関連付けられたサインオン・ユーザー 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 個のブランク文字です。
- z/OS では、キュー・マネージャーは次のものを使用します。
- MDVER (10 桁の符号付き整数)
構造体のバージョン番号。
値は次のいずれかでなければなりません。- MDVER1
- バージョン 1 のメッセージ記述子の構造体。
- MDVER2
- バージョン 2 のメッセージ記述子の構造体。
注: version-2 の MQMD が使用される場合、キュー・マネージャーは、アプリケーション・メッセージ・データの先頭に存在する可能性があるすべての MQ ヘッダー構造体に対して追加の検査を実行します。詳しくは、MQPUT 呼び出しの使用上の注意を参照してください。
これより新しいバージョンの構造体にのみ存在するフィールドは、そのフィールドの説明にその旨記載されています。 以下の定数は、現行バージョンのバージョン番号を指定しています。- MDVERC
- メッセージ記述子の構造体の現行バージョン。
これは常に入力フィールドです。 このフィールドの初期値は MDVER1 です。
初期値
| フィールド名 | 定数の名前 | 定数の値 |
|---|---|---|
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 |
注:
|
||
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)
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 を生成しないように回避措置がとられることはありません。