Report (MQLONG)
Report フィールドを使用すると、元のメッセージを送信するアプリケーションは、どのレポート・メッセージが必要であるか、アプリケーション・メッセージ・データを組み込むかどうか、また、(レポートと応答のどちらの場合も) レポート・メッセージまたは応答メッセージの中のメッセージおよび相関 ID をどのように設定するかを指定することができます。 以下のタイプのレポート・メッセージのいずれかまたはすべてを要求する (またはどれも要求しない) ことができます。- 例外
- 有効期限
- 到着確認 (COA)
- 送達時に確認 (COD)
- 肯定アクション通知 (PAN)
- 否定アクション通知 (NAN)
レポート・メッセージを受け取ったアプリケーションでは、MQMD 内の Feedback フィールドを調べることによって、レポートが生成された理由を判別できます。詳細については、Feedback フィールドを参照してください。
メッセージをトピックに書き込むときにレポート・オプションを使用すると、ゼロ個、1 個、または複数のレポート・メッセージを生成し、アプリケーションに送信されることがあります。 これは、パブリケーション・メッセージをゼロ個、1 個、または複数のサブスクライブ・アプリケーションに送信されることがあるためです。
- MQRO_EXCEPTION
- メッセージ・チャネル・エージェントは、メッセージが別のキュー・マネージャーに送信され、指定されたターゲット・キューにメッセージを送達できない場合に、このタイプのレポートを生成します。 例えば、ターゲット・キューまたは中間伝送キューがいっぱいである場合や、メッセージが大きすぎてキューに入らない場合などがあります。例外レポート・メッセージが生成されるかどうかは、元のメッセージの持続性と、元のメッセージが経由するメッセージ・チャネルの速度 (通常または高速) によって次のように異なります。
- すべての持続性メッセージと、通常のメッセージ・チャネルを経由する非持続性メッセージについては、送信側アプリケーションでエラー条件に対して指定されたアクションが正常に完了した場合にのみ、例外レポートが生成されます。 送信側アプリケーションでは、エラー条件が発生したときの元のメッセージの後処理を制御するために、次のアクションのいずれかを指定できます。
- MQRO_DEAD_LETTER_Q (元のメッセージを送達不能キューに入れます)。
- MQRO_DISCARD_MSG (元のメッセージを廃棄します)。
- 高速メッセージ・チャネルを経由する非持続性メッセージについては、エラー条件に対して指定されたアクションを正常に完了できない場合でも、元のメッセージが伝送キューから削除され、例外レポートが生成されます。 例えば、MQRO_DEAD_LETTER_Q が指定されている場合に、送達不能キューがいっぱいであるなどの理由で元のメッセージを送達不能キューに入れられなかったときには、例外レポート・メッセージが生成され、元のメッセージが廃棄されます。
通常メッセージ・チャネルと高速メッセージ・チャネルについて詳しくは、 非持続メッセージ速度 (NPMSPEED)を参照してください。
MQPUT または MQPUT1 呼び出しから戻された理由コードを用いて、元のメッセージを書き込んだアプリケーションに問題を同期的に通知できる場合、例外レポートは生成されません。
アプリケーションは、例外レポートを送信することによってメッセージを処理できないことを通知することもできます (借方記帳のトランザクションにおいて、対応する貸方科目の限度を超えてしまう場合など)。
元のメッセージのメッセージ・データは、レポート・メッセージに組み込まれません。
MQRO_EXCEPTION、MQRO_EXCEPTION_WITH_DATA、および MQRO_EXCEPTION_WITH_FULL_DATA のいずれかを指定し、複数を指定しないでください。
- すべての持続性メッセージと、通常のメッセージ・チャネルを経由する非持続性メッセージについては、送信側アプリケーションでエラー条件に対して指定されたアクションが正常に完了した場合にのみ、例外レポートが生成されます。 送信側アプリケーションでは、エラー条件が発生したときの元のメッセージの後処理を制御するために、次のアクションのいずれかを指定できます。
- MQRO_EXCEPTION_WITH_DATA
- これは MQRO_EXCEPTION と同じです。ただし、元のメッセージのアプリケーション・メッセージ・データの最初の 100 バイトがレポート・メッセージに組み込まれます。 元のメッセージに 1 つ以上の MQ ヘッダー構造が含まれている場合、それらはアプリケーション・データの 100 バイトに加えて、レポート・メッセージに組み込まれます。
MQRO_EXCEPTION、MQRO_EXCEPTION_WITH_DATA、および MQRO_EXCEPTION_WITH_FULL_DATA のいずれかを指定し、複数を指定しないでください。
- MQRO_EXCEPTION_WITH_FULL_DATA
- 全データの例外レポートが必要です。
これは MQRO_EXCEPTION と同じです。ただし、元のメッセージのアプリケーション・メッセージ・データのすべてがレポート・メッセージに組み込まれます。
MQRO_EXCEPTION、MQRO_EXCEPTION_WITH_DATA、および MQRO_EXCEPTION_WITH_FULL_DATA のいずれかを指定し、複数を指定しないでください。
- MQRO_EXPIRATION
- このタイプのレポートは、有効期限が過ぎたためにアプリケーションへの送達の前にメッセージが廃棄された場合に、キュー・マネージャーによって生成されます (
Expiryフィールドを参照)。 このオプションが設定されていないと、上記の理由でメッセージが廃棄された場合に (MQRO_EXCEPTION_* オプションが指定されていても) レポート・メッセージは生成されません。元のメッセージのメッセージ・データは、レポート・メッセージに組み込まれません。
MQRO_EXPIRATION、MQRO_EXPIRATION_WITH_DATA、および MQRO_EXPIRATION_WITH_FULL_DATA のいずれかを指定し、複数を指定しないでください。
- MQRO_EXPIRATION_WITH_DATA
- これは MQRO_EXPIRATION と同じです。ただし、元のメッセージのアプリケーション・メッセージ・データの最初の 100 バイトがレポート・メッセージに組み込まれます。 元のメッセージに 1 つ以上の MQ ヘッダー構造が含まれている場合、それらはアプリケーション・データの 100 バイトに加えて、レポート・メッセージに組み込まれます。
MQRO_EXPIRATION、MQRO_EXPIRATION_WITH_DATA、および MQRO_EXPIRATION_WITH_FULL_DATA のいずれかを指定し、複数を指定しないでください。
- MQRO_EXPIRATION_WITH_FULL_DATA
- これは MQRO_EXPIRATION と同じです。ただし、元のメッセージのアプリケーション・メッセージ・データのすべてがレポート・メッセージに組み込まれます。
MQRO_EXPIRATION、MQRO_EXPIRATION_WITH_DATA、および MQRO_EXPIRATION_WITH_FULL_DATA のいずれかを指定し、複数を指定しないでください。
- MQRO_COA
このタイプのレポートは、メッセージがターゲット・キューに入れられるときに、ターゲット・キューを所有するキュー・マネージャーによって生成されます。 元のメッセージのメッセージ・データは、レポート・メッセージに組み込まれません。
- MQRO_COA_WITH_DATA
- これは MQRO_COA と同じです。ただし、元のメッセージのアプリケーション・メッセージ・データの最初の 100 バイトがレポート・メッセージに組み込まれます。 元のメッセージに 1 つ以上の MQ ヘッダー構造が含まれている場合、それらはアプリケーション・データの 100 バイトに加えて、レポート・メッセージに組み込まれます。
MQRO_COA、MQRO_COA_WITH_DATA、および MQRO_COA_WITH_FULL_DATA のいずれかを指定し、複数を指定しないでください。
- MQRO_COA_WITH_FULL_DATA
- これは MQRO_COA と同じです。ただし、元のメッセージのアプリケーション・メッセージ・データのすべてがレポート・メッセージに組み込まれます。
MQRO_COA、MQRO_COA_WITH_DATA、および MQRO_COA_WITH_FULL_DATA のいずれかを指定し、複数を指定しないでください。
- MQRO_COD
- このタイプのレポートは、アプリケーションがターゲット・キューからメッセージを取得してメッセージをキューから削除するときに、キュー・マネージャーによって生成されます。 元のメッセージのメッセージ・データは、レポート・メッセージに組み込まれません。
メッセージが作業単位の一部として検索される場合、レポート・メッセージは同じ作業単位内に生成され、作業単位がコミットされるまではそのレポートが利用できなくなります。 作業単位がバックアウトされる場合、レポートは送信されません。
MQGMO_MARK_SKIP_BACKOUT オプションによりメッセージが取り出される場合は、COD レポートは常に生成されるとは限りません。 1 次作業単位はバックアウトされたが、2 次作業単位はコミットされた場合、メッセージはキューから削除されますが、COD レポートは生成されません。
メッセージ記述子にある
Formatフィールドが MQFMT_DEAD_LETTER_HEADER である場合、COD レポートは生成されません。 これにより、メッセージが配布できなくなり、送達不能キューに書き込まれる場合は、COD レポートが生成されなくなります。宛先キューが XCF キューの場合、MQRO_COD は無効です。
MQRO_COD、MQRO_COD_WITH_DATA、および MQRO_COD_WITH_FULL_DATA のいずれかを指定し、複数を指定しないでください。
- MQRO_COD_WITH_DATA
- これは MQRO_COD と同じです。ただし、元のメッセージのアプリケーション・メッセージ・データの最初の 100 バイトがレポート・メッセージに組み込まれます。 元のメッセージに 1 つ以上の MQ ヘッダー構造が含まれている場合、それらはアプリケーション・データの 100 バイトに加えて、レポート・メッセージに組み込まれます。元のメッセージについての MQGET 呼び出しで MQGMO_ACCEPT_TRUNCATED_MSG が指定され、取り出されたメッセージに切り捨てが行われた場合、レポート・メッセージ内のアプリケーション・メッセージ・データの量は次のように環境によって異なります。
- z/OS®では、以下の最小値になります。
- 元のメッセージの長さ
- メッセージを取り出すために使用されたバッファーの長さ
- 100 バイト
- その他の環境では、次のうちの最小値です。
- 元のメッセージの長さ
- 100 バイト
宛先キューが XCF キューの場合は、MQRO_COD_WITH_DATA は無効です。
MQRO_COD、MQRO_COD_WITH_DATA、および MQRO_COD_WITH_FULL_DATA のいずれかを指定し、複数を指定しないでください。
- z/OS®では、以下の最小値になります。
- MQRO_COD_WITH_FULL_DATA
- これは MQRO_COD と同じです。ただし、元のメッセージのアプリケーション・メッセージ・データのすべてがレポート・メッセージに組み込まれます。
宛先キューが XCF の場合は、MQRO_COD_WITH_FULL_DATA は無効です。
MQRO_COD、MQRO_COD_WITH_DATA、および MQRO_COD_WITH_FULL_DATA のいずれかを指定し、複数を指定しないでください。
- MQRO_PAN
- このタイプのレポートは、メッセージを取り出し、そのメッセージに従ってアクションを実行するアプリケーションにより生成されます。 これは、メッセージで要求されたアクションが正常に実行されたことを示します。 レポートを生成するアプリケーションは、レポートにデータを含めるかどうかを決定します。
メッセージを取り出すアプリケーションにこの要求を送らないと、キュー・マネージャーはこのオプションに基づくアクションを実行しません。 メッセージを取り出すアプリケーションは、必要に応じてレポートを生成する必要があります。
- MQRO_NAN
- このタイプのレポートは、メッセージを取り出し、そのメッセージに従ってアクションを実行するアプリケーションにより生成されます。 これは、メッセージで要求されたアクションが正常に実行されなかったことを示します。 レポートを生成するアプリケーションは、レポートにデータを含めるかどうかを決定します。 例えば、要求を実行できなかった理由を示すデータを含めることができます。
メッセージを取り出すアプリケーションにこの要求を送らないと、キュー・マネージャーはこのオプションに基づくアクションを実行しません。 メッセージを取り出すアプリケーションは、必要に応じてレポートを生成する必要があります。
アプリケーションは、どの条件が肯定アクションに対応し、どの条件が否定アクションに対応するかを判別する必要があります。 ただし、要求の一部だけが実行された場合には、要求があれば、PAN レポートではなく、NAN レポートを生成します。 どの条件も、肯定アクションと否定アクションのいずれか一方に対応付け、両方には対応させてはなりません。
MsgId を設定する方法を制御します。- MQRO_NEW_MSG_ID
- これはデフォルトのアクションで、このメッセージの結果としてレポートまたは応答が生成される場合、レポートまたは応答メッセージの新規
MsgIdが生成されます。 - MQRO_PASS_MSG_ID
- このメッセージの結果としてレポートまたは応答が生成される場合、このメッセージの
MsgIdがレポートまたは応答メッセージのMsgIdにコピーされることを示します。パブリケーション・メッセージの
MsgIdは、パブリケーションのコピーを受け取る各サブスクライバーごとに異なるため、レポートまたは応答メッセージにコピーされるMsgIdもそれぞれ異なります。このオプションを指定しない場合は、MQRO_NEW_MSG_ID が使用されます。
CorrelId を設定する方法を制御します。- MQRO_COPY_MSG_ID_TO_CORREL_ID
- これはデフォルトのアクションで、このメッセージの結果としてレポートまたは応答が生成される場合、このメッセージの
MsgIdがレポートまたは応答メッセージのCorrelIdにコピーされることを示します。 - MQRO_PASS_CORREL_ID
- このメッセージの結果としてレポートまたは応答が生成される場合、このメッセージの
CorrelIdがレポートまたは応答メッセージのCorrelIdにコピーされることを示します。パブリケーション・メッセージの
CorrelIdは、MQSO_SET_CORREL_ID オプションを使用して MQSD の SubCorrelId フィールドを MQCI_NONE に設定しなければ、サブスクライバーに固有のものとなります。 そのため、レポートまたは応答メッセージのCorrelIdにコピーされるCorrelIdがそれぞれ異なる可能性があります。このオプションを指定しない場合は、MQRO_COPY_MSG_ID_TO_CORREL_ID が使用されます。
要求に応答したりレポート・メッセージを生成したりするサーバーでは、MQRO_PASS_MSG_ID または MQRO_PASS_CORREL_ID オプションが元のメッセージに設定されていたかをチェックする必要があります。 それらのオプションが設定されていた場合、サーバーは、オプションに対応するアクションを実行しなければなりません。 どちらのオプションも設定されていない場合、サーバーは、該当するデフォルト・アクションを実行する必要があります。
- MQRO_DEAD_LETTER_Q
- これはデフォルトのアクションで、メッセージをターゲット・キューに送達できない場合に、メッセージを送達不能キューに入れます。 これは次のような場合に行われます。
- MQPUT または MQPUT1 呼び出しによって戻された理由コードを用いて、元のメッセージを書き込んだアプリケーションに問題を同期的に通知できない場合。 送信側によって要求される場合は、例外レポート・メッセージが生成されます。
- 元のメッセージを書き込むアプリケーションがトピックに書き込んでいた場合。
- MQRO_DISCARD_MSG
- これは、メッセージをターゲット・キューに送達できない場合にメッセージを廃棄します。 これは次のような場合に行われます。
- MQPUT または MQPUT1 呼び出しによって戻された理由コードを用いて、元のメッセージを書き込んだアプリケーションに問題を同期的に通知できない場合。 送信側によって要求される場合は、例外レポート・メッセージが生成されます。
- 元のメッセージを書き込むアプリケーションがトピックに書き込んでいた場合。
- MQRO_PASS_DISCARD_AND_EXPIRY
- このオプションをメッセージで指定した結果として、レポートまたは応答が生成される場合、レポートのメッセージ記述子は以下を継承します。
- MQRO_DISCARD_MSG (設定されている場合)。
- メッセージの残りの有効期限時間 (有効期限レポートではない場合)。 有効期限レポートの場合、有効期限時間は 60 秒に設定されます。
- MQRO_ACTIVITY
- この値を使用すると、キュー・マネージャー・ネットワーク上のすべてのメッセージの経路をトレースすることができます。 このレポート・オプションはどの現行ユーザー・メッセージでも指定できます。これを指定すると、ネットワーク上のメッセージの経路の計算を即時に開始することができます。
メッセージを生成するアプリケーションがアクティビティー・レポートの生成を使用可能にすることができない場合は、キュー・マネージャー管理者が提供する API 交差出口を使ってレポート作成を使用可能にすることができます。
注:- アクティビティー報告書を生成できるキュー・マネージャーがネットワークに少なければ少ないほど、経路は単純なものとなります。
- 取られた経路を判別するためにアクティビティー報告書を正しい順序に配列することが困難な場合があります。
- アクティビティー報告書で、要求先への経路を見つけることができない場合があります。
- このレポート・オプションを設定したメッセージは、そのオプションを認識していないとしても、すべてのキュー・マネージャーによって受け入れられなければなりません。 これにより、ユーザー・メッセージが非IBM® WebSphere® MQ 6.0 以降のキュー・マネージャーによって処理される場合でも、任意のユーザー・メッセージにレポート・オプションを設定できます。
- プロセス (キュー・マネージャーまたはユーザー・プロセスのいずれか) で、このオプションが設定されたメッセージに対してアクティビティーが実行される場合、アクティビティー報告書を生成し、配置することを選択することができます。
- MQRO_NONE
- この値を使用して、他のオプションが指定されていないことを示します。 MQRO_NONE は、プログラム・ドキュメンテーションの援助機能として定義されています。 このオプションを他のオプションと組み合わせて使用することは意図されていませんが、値がゼロであるため、そのような使い方をしても検出できません。
- 必要とされるすべてのレポート・タイプは、元のメッセージを送信するアプリケーション具体的に指定されている必要があります。 例えば、COA レポートは要求されているが、例外レポートは要求されないという場合は、メッセージが宛先キューに入れられるときに COA レポートが生成されますが、メッセージが宛先キューに到着したときに宛先キューがいっぱいであっても、例外レポートは生成されません。
Reportオプションが設定されていない場合、キュー・マネージャーまたはメッセージ・チャネル・エージェント (MCA) によって、レポート・メッセージが生成されることはありません。一部のレポート・オプションは、ローカル・キュー・マネージャーで認識できなくても指定できます。これは、宛先 キュー・マネージャーでオプションを処理する場合に有用です。 詳しくは、 レポート・オプションおよびメッセージ・フラグ を参照してください。
レポート・メッセージを要求するときは、そのレポートの送信先となるキューの名前を
ReplyToQフィールドで指定しなければなりません。 レポート・メッセージを受信したとき、メッセージ記述子の中のFeedbackフィールドを調べることによって、レポートの性質を判別することができます。 - レポート・メッセージを生成するキュー・マネージャーまたは MCA が、レポート・メッセージを応答キューに入れることができない場合 (例えば応答キューまたは伝送キューがいっぱいになっているため)、レポート・メッセージは、代わりに送達不能キューに入ります。 これにも 失敗した場合、あるいは送達不能キューがない場合に、取るべきアクションは、レポート・メッセージのタイプによって決まります。
- レポート・メッセージが例外レポートである場合は、その例外レポートを生成したメッセージが伝送キューに残されます。これにより、メッセージが失われていないことが分かります。
- 他のすべてのレポート・タイプについては、レポート・メッセージは廃棄され、処理は引き続き正常に行われます。 処理を実行する理由は、元のメッセージがすでに無事に送達されているか (COA または COD レポート・メッセージの場合)、元のメッセージがすでに対象外になっているか (満了レポート・メッセージの場合) のいずれかです。
- レポートが生成されると、
ReplyToQキューが開き、レポートを生成させたメッセージの MQMD 内のUserIdentifierの権限を使用してレポート・メッセージが書き込まれます。ただし、以下の場合は例外です。- 受信側の MCA によって生成される例外レポートは、レポートを生成させたメッセージを書き込むために MCA が使用したものと同じ許可を使って書き込まれます。
- キュー・マネージャーによって生成される COA レポートは、レポートを生成させたメッセージをそのキュー・マネージャーに書き込むときに使用されたものと同じ権限を使って書き込まれます。 例えば、受信側の MCA がその MCA のユーザー ID を使ってメッセージを書き込んだ場合、キュー・マネージャーは MCA のユーザー ID を使って COA レポートを書き込みます。
レポートがリモート宛先に移動しなければならない場合は、他のメッセージに対する場合と同じ方式で、それを受け取るかどうかを、送信側と受信側が決めることができます。
- データ付きのレポート・メッセージが要求される場合は、以下のことが行われます。
- レポート・メッセージは、常に、元のメッセージの送信側が要求したデータ量で生成されます。 レポート・メッセージが応答キューに対して大きすぎると、上記の処理が行われます。レポート・メッセージは、応答キューに適合するために切り捨てられることはありません。
- 元のメッセージの
Formatが、MQFMT_XMIT_Q_HEADER である場合、レポートに組み込まれるデータには、MQXQH は含まれません。 レポート・データは、元のメッセージにある MQXQH の後にあるデータの最初のバイトから始まります。 これは、キューが伝送キューであるかどうかに関係なく起こります。
- COA、COD、または満了レポート・メッセージが、応答キューで受け取られた場合は、元のメッセージが、適切に到着した、送達された、または満了したことが保証されます。 しかし、上記のレポート・メッセージが 1 つ以上が要求されていて、それが受け取られない場合でも、その逆を想定することはできません。これは、以下のいずれかが起こった可能性があるためです。
- リンクがダウンしたために、レポート・メッセージは中止された。
- 中間伝送キューまたは応答キューに、ブロッキング条件 (キューがいっぱいである、書き込みが禁止されている、など) が存在しているため、レポート・メッセージは中止された。
- レポート・メッセージが送達不能キューに入っている。
- キュー・マネージャーがレポート・メッセージの生成を試行したが、適切なキューにメッセージを書き込むことも送達不能キューに書き込むこともできなかったために、レポート・メッセージを生成することができなかった。
- 報告されるアクション (到着、送達、または満了) と、それに対応するレポート・メッセージの生成との間で、キュー・マネージャーの障害が起こった。 (COD レポート・メッセージは同じ作業単位内で生成されるので、COD レポート・メッセージではアプリケーションが作業単位内で元のメッセージを取り出す場合は上記のことは起こりません。)
例外レポート・メッセージも、上記の 1、2 および 3 の理由から、同様に中止されることがあります。 しかし、MCA が例外レポート・メッセージを生成できない (応答キューと送達不能キューのどちらにもレポート・メッセージを書き込むことができない) 場合は、元のメッセージは送信側の伝送キューにとどまり、チャネルがクローズされます。 このような状況は、レポート・メッセージがチャネルの送信側、受信側のどちらで生成されても起こります。
- 元のメッセージが一時的にブロック状態になっていた (例外レポート・メッセージが生成され、元のメッセージが送達不能キューに書き込まれる結果になった) が、そのブロック状態がクリアされ、さらにアプリケーションが送達不能キューから元のメッセージを読み取って、その宛先に再び書き込んだ場合は、以下のことが起こる可能性があります。
- 例外レポート・メッセージは生成されたが、最終的に元のメッセージは、その宛先に正しく到着する。
- 元のメッセージは、後で別のブロック状態になる可能性があるため、元のメッセージ 1 つに対して複数の例外レポート・メッセージが生成される。
- メッセージをトピックに書き込むときに、レポートを生成することができます。 このメッセージはトピックのすべてのサブスクライバーに送信されます。ゼロの場合もあれば、1 またはそれ以上の場合もあります。 結果として多数のレポート・メッセージが生成される場合があるので、レポート・オプションを使用するように選択する場合に、これを考慮に入れる必要があります。
- メッセージをトピックに書き込むときに、メッセージのコピーを置く宛先キューが多数存在する場合があります。 そのうちのいくつかの宛先キューに問題 (例えばキュー・フル) がある場合、MQPUT の実行が成功するかどうかは (メッセージの持続性に応じて) NPMSGDLV または PMSGDLV の設定に依存します。 宛先キューへのメッセージ送達が必ず成功するという設定 (例えばそれが永続サブスクライバーへの持続メッセージで、PMSGDLV が ALL または ALLDUR に設定されている) の場合、成功とは、次の基準のいずれかが満たされる場合として定義されます。
- サブスクライバー・キューへの書き込みが成功する
- MQRO_DEAD_LETTER_Q を使用し、サブスクライバー・キューがメッセージを受け取ることができない場合に送達不能キューに正常に書き込まれる
- サブスクライバー・キューがメッセージを受け取ることができない場合に MQRO_DISCARD_MSG を使用する
- セグメント化が許可されている (MQMF_SEGMENTATION_ALLOWED フラグの項を参照) メッセージについてレポート・メッセージを要求することができます。 キュー・マネージャーがメッセージをいくつかのセグメントに分割する必要があると判断した場合には、関連する条件に応じてセグメントごとにレポート・メッセージが生成されます。 アプリケーションでは、要求したレポート・メッセージのタイプごとに複数のレポート・メッセージを受信できるようにしておく必要があります。 レポート・メッセージの
GroupIdフィールドを使用して、元のメッセージのグループ ID によって複数のレポートと関連付けます。また、Feedbackフィールドを使用して、各レポート・メッセージのタイプを識別します。 - MQGMO_LOGICAL_ORDER を使用してセグメントに関するレポート・メッセージを取り出す場合には、MQGET 呼び出しを続けて発行したときに異なるタイプ のレポートが戻されることがあるので注意してください。 例えば、キュー・マネージャーによってセグメントに分割されたメッセージに対して COA レポートおよび COD レポートを要求されている場合、それらのレポート・メッセージに対して MQGET 呼び出しを発行したときに COA レポート・メッセージと COD レポート・メッセージが順不同で混ざり合って戻ることがあります。 これを回避するには、MQGMO_COMPLETE_MSG オプションを使用します (MQGMO_ACCEPT_TRUNCATED_MSG を組み合わせても構いません)。 MQGMO_COMPLETE_MSG を使用すると、キュー・マネージャーは同じレポート・タイプのレポート・メッセージを再度組み立てます。 例えば、最初の MQGET 呼び出しで元のメッセージに関連するすべての COA メッセージの再組み立てを実行し、2 番目の MQGET 呼び出しですべての COD メッセージの再組み立てを実行する場合などが考えられます。 どちらの再組み立てが先に実行されるかは、どちらのタイプのレポート・メッセージが先にキューに入るかによります。
- アプリケーション自体がセグメントを書き込む場合、そのアプリケーションではセグメントごとに異なるレポート・オプションを指定できます。 ただし、以下の点に注意してください。
- MQGMO_COMPLETE_MSG オプションを使用してセグメントを取り出している場合、キュー・マネージャーに格納されるのは、最初の セグメント内のレポート・オプションだけです。
- セグメントを一度に 1 つずつ取り出している場合に、大部分のセグメントに MQRO_COD_* オプションのいずれかが指定されていても、このオプションが指定されていないセグメントが 1 つでもあれば、MQGMO_COMPLETE_MSG オプションを使用して 1 回の MQGET 呼び出しでレポート・メッセージを取り出したり、MQGMO_ALL_SEGMENTS_AVAILABLE オプションを使用してすべてのレポート・メッセージが到着した時間を検出したりすることができません。
- MQ ネットワークのキュー・マネージャーはそれぞれ異なる機能を持つ場合があります。 セグメント化をサポートしていないキュー・マネージャーまたは MCA によりセグメントに対するレポート・メッセージが生成された場合、そのキュー・マネージャーまたは MCA は、デフォルト時には、レポート・メッセージの中に必要なセグメント情報を含めません。そのため、このレポートを生成する原因となった元のメッセージを識別することが困難な場合があります。 この問題を回避するには、レポート・メッセージと共にデータを要求します (MQRO_*_WITH_DATA オプションと MQRO_*_WITH_FULL_DATA オプションのうちどちらか該当する方を指定する)。 ただし、MQRO_*_WITH_DATA を指定した場合には、100 バイト未満 のアプリケーション・メッセージ・データがレポート・メッセージを取り出すアプリケーションに戻されることがあるので注意してください (レポート・メッセージがセグメント化をサポートしていないキュー・マネージャーまたは MCA により生成された場合)。
レポート・メッセージのメッセージ記述子の内容: キュー・マネージャーまたはメッセージ・チャネル・エージェント (MCA) は、レポート・メッセージを生成するとき、メッセージ記述子の中のフィールドを以下の値に設定してから、通常の方法でメッセージを書き込みます。
| MQMD のフィールド | 使用される値 |
|---|---|
StrucId |
MQMD_STRUC_ID |
Version |
MQMD_VERSION_2 |
Report |
MQRO_NONE |
MsgType |
MQMT_REPORT |
Expiry |
MQEI_UNLIMITED |
Feedback |
レポートの性質に応じたもの (MQFB_COA、MQFB_COD、MQFB_EXPIRATION、または MQRC_* 値) |
Encoding |
元のメッセージ記述子からコピーされます。 |
CodedCharSetId |
元のメッセージ記述子からコピーされます。 |
Format |
元のメッセージ記述子からコピーされます。 |
Priority |
元のメッセージ記述子からコピーされます。 |
Persistence |
元のメッセージ記述子からコピーされます。 |
MsgId |
元のメッセージ記述子のレポート・オプションで指定されたもの |
CorrelId |
元のメッセージ記述子のレポート・オプションで指定されたもの |
BackoutCount |
0 |
ReplyToQ |
ブランク |
ReplyToQMgr |
キュー・マネージャーの名前。 |
UserIdentifier |
MQPMO_PASS_IDENTITY_CONTEXT オプションで設定されたもの |
AccountingToken |
MQPMO_PASS_IDENTITY_CONTEXT オプションで設定されたもの |
ApplIdentityData |
MQPMO_PASS_IDENTITY_CONTEXT オプションで設定されたもの |
PutApplType |
MQAT_QMGR またはメッセージ・チャネル・エージェントに適切なもの |
PutApplName |
キュー・マネージャー名またはメッセージ・チャネル・エージェント名の最初の 28 バイト。 IMS ブリッジによって生成されるレポート・メッセージの場合、このフィールドには、メッセージが関連する IMS システムの XCF グループ名と XCF メンバー名が含まれます。 |
PutDate |
レポート・メッセージが送信された日付 |
PutTime |
レポート・メッセージが送信された時刻 |
ApplOriginData |
ブランク |
GroupId |
元のメッセージ記述子からコピーされます。 |
MsgSeqNumber |
元のメッセージ記述子からコピーされます。 |
Offset |
元のメッセージ記述子からコピーされます。 |
MsgFlags |
元のメッセージ記述子からコピーされます。 |
OriginalLength |
MQOL_UNDEFINED 以外の場合は、元のメッセージ記述子からコピーされる。MQOL_UNDEFINED の場合は、元のメッセージ・データの長さが設定される。 |
ReplyToQMgrフィールドは、ブランクに設定することができます (メッセージを書き込むときに、キュー・マネージャーが、フィールドをローカル・キュー・マネージャーの名前に変更します)。- コンテキスト・フィールドは、応答に対して使用されるはずのオプション (通常は MQPMO_PASS_IDENTITY_CONTEXT) を用いて設定します。
レポート・フィールドの分析: Report フィールドにはサブフィールドが含まれます。そのため、メッセージの送信者が特定のレポートを要求したかどうかを確認する必要があるアプリケーションは、 レポート・フィールドの分析で説明されている手法のいずれかを使用する必要があります。
これは、MQGET 呼び出しでは出力フィールド、MQPUT および MQPUT1 呼び出しでは入力フィールドです。 このフィールドの初期値は MQRO_NONE です。