MQGMO - 読み取りメッセージ・オプション
MQGMO 構造体を使用すると、アプリケーションで、メッセージをキューから除去する方法を制御するオプションを指定できます。
概要
- 目的
- この構造体は、MQGET 呼び出しの入出力パラメーターです。
- バージョン
- MQGMO の現行バージョンは GMVER4 です。 これより新しいバージョンの構造体にのみ存在するフィールドについては、そのフィールドの説明にその旨を記載しています。
提供されている COPY ファイルには、環境でサポートされている最新バージョンの MQGMO が含まれていますが、
GMVERフィールドの初期値は GMVER1 に設定されています。 version-1 構造体に存在しないフィールドを使用するには、アプリケーションで、GMVERフィールドを必要なバージョンのバージョン番号に設定する必要があります。 - 文字セットとエンコード
- MQGMO のデータは、
CodedCharSetIdキュー・マネージャー属性で指定された文字セットと、ENNAT で指定されたローカル・キュー・マネージャーのエンコードで記述されていなければなりません。 ただし、アプリケーションが IBM® MQ クライアントとして実行されている場合、構造体はクライアントの文字セットとエンコードになっている必要があります。
フィールド
MQGMO 構造体には、以下のフィールドが含まれます。フィールドはアルファベット順に説明されています。
- GMGST (1 バイトの文字ストリング)
取り出されたメッセージが 1 つのグループに属しているかどうかを示すフラグ。
以下の値がどれか 1 つ含まれています。- GSNIG
- メッセージは 1 つのグループに属していない。
- GSMIG
- メッセージは 1 つのグループに属しているが、グループの最後にあるものではない。
- GSLMIG
- メッセージはグループの最後にあるものである。
この値は、グループに属しているメッセージが 1 つしかない場合にも戻されます。
このフィールドは出力フィールドです。 このフィールドの初期値は GSNIG です。
GMVERが GMVER2 より小さい場合、このフィールドは無視されます。- GMMH (10 桁の符号付き整数)
メッセージ・ハンドル
GMPRAQ オプションを指定し、PRPCTL キュー属性が PRPRFH に設定されていない場合は、これはキューから取り出されるメッセージのプロパティーにデータを追加する、メッセージに対するハンドルです。 このハンドルは、MQCRTMH 呼び出しによって作成されます。 ハンドルに既に関連付けられているプロパティーは、メッセージを取り出す前にすべて クリアされます。
次の値も指定できます:
MQHM_NONE
メッセージ・ハンドルが指定されていません。MQGET 呼び出し上でメッセージ記述子は必須ではありません。有効なメッセージ・ハンドルが提供され、出力上でメッセージ・プロパティーを組み込むのに使用される場合は、メッセージ・ハンドルに関連付けられているメッセージ記述子が入力フィールド用に使用されます。
メッセージ記述子を MQGET 呼び出しに指定すると、メッセージ・ハンドルに関連付けられているメッセージ記述子より常に優先します。
GMPRRF を指定する場合か、GMPRAQ を指定して PRPCTL キュー属性が PRPRFH の場合は、メッセージ記述子パラメーターが指定されていなければ呼び出しは理由コード RC2026 で失敗します。
MQGET 呼び出しから戻る際に、このメッセージ・ハンドルに関連付けられているプロパティーとメッセージ記述子は更新され (メッセージ記述子が MQGET 呼び出し上で指定されている場合はメッセージ記述子も)、取り出されたメッセージの状態を反映します。 その後、MQINQMP 呼び出しを使用して、メッセージのプロパティーを照会できます。
拡張メッセージ記述子 (ある場合) を除いて、MQINQMP 呼び出しを使用して照会できるプロパティーはメッセージ・データには含まれません。キュー上のメッセージがメッセージ・データ中のプロパティーに含まれていた場合は、データがアプリケーション戻る前にメッセージ・データから除去されます。
メッセージ・ハンドルが提供されていないか、Version が GMVER4 より前の場合は、MQGET 呼び出し上で有効なメッセージ記述子を提供しなければなりません。 メッセージ・プロパティー (メッセージ記述子に含まれているプロパティーを除く) は、MQGMO 構造および PRPCTL キュー属性中のプロパティー・オプションの値を対象としたメッセージ・データ中に戻されます。
このフィールドは、常に入力フィールドです。 このフィールドの初期値は HMNONE です。
GMVERが GMVER4 より小さい場合、このフィールドは無視されます。- GMMO (10 桁の符号付き整数)
MQGET に使用される選択基準を制御するオプション。
これらのオプションにより、アプリケーションは、MQGET 呼び出しによって戻されるメッセージを選択するために使用する
MSGDSCパラメーター内のフィールドを選択することができます。 アプリケーションは、このフィールドに必要なオプションを設定してから、MSGDSCパラメーター内の対応するフィールドを、それらのフィールドに必要な値に設定します。 MQMD にこれらの値が入っているメッセージのみが、MQGET 呼び出しでMSGDSCパラメーターを使用した場合の検索の候補になります。 戻すメッセージの選択時には、対応した一致オプションが指定されていないフィールドは無視されます。 MQGET 呼び出しで選択基準を使用しない場合 (つまり、任意のメッセージを受け入れることができる場合) は、GMMOを MONONE に設定する必要があります。GMLOGO を指定すると、特定のメッセージのみが次の MQGET 呼び出しで戻されます。- 現行のグループまたは論理メッセージがない場合は、
MDSEQが1に等しく、MDOFFが0に等しいメッセージのみが戻されます。 この場合に、以下のオプションを 1 つ以上使用すると、戻されるメッセージのうちのどれが戻されるかを選定できます。- MOMSGI
- MOCORI
- MOGRPI
- 現行のグループまたは論理メッセージが存在している場合は、グループ内の次のメッセージまたは論理メッセージ内の次のセグメントのみが戻されます。これは、MO* オプションを指定しても変更できません。
MSGDSCパラメーター内の関連フィールドの値は、返されるメッセージ内の対応するフィールドの値と一致する必要があります。呼び出しは失敗し、理由コード RC2247 が返されます。GMMUC または GMBRWC のいずれかが指定されている場合、
GMMOは無視されます。次のオプションのうちの 1 つ以上を指定できます。- MOMSGI
- 指定されたメッセージ ID を持つメッセージを取り出します。
このオプションは、取り出されるメッセージのメッセージ ID が MQGET 呼び出しの
MSGDSCパラメーターのMDMIDフィールドの値と一致していなければならないことを指定します。 これは、適用される他の一致 (例えば、相関 ID) に加えて一致している必要があります。このオプションを指定しない場合、
MSGDSCパラメーターのMDMIDフィールドは無視され、すべてのメッセージ ID が一致します。注: メッセージ ID MINONE は、メッセージの MQMD 内のすべてのメッセージ ID と一致する特殊値です。 したがって、MOMSGI を MINONE と組み合わせて指定しても、MOMSGI を指定しなくても同じことです。 - MOCORI
- 指定された相関 ID を持つメッセージを取り出します。
このオプションは、取り出されるメッセージの相関 ID が MQGET 呼び出しの
MSGDSCパラメーター内のMDCIDフィールドの値と一致していなければならないことを指定します。 これは、適用される他の一致 (例えば、メッセージ ID) に加えて一致している必要があります。このオプションを指定しない場合、
MSGDSCパラメーターのMDCIDフィールドは無視され、すべての相関 ID が一致します。注: 相関 ID CINONE は、メッセージの MQMD 内のすべての相関 ID と一致する特殊値です。 したがって、MOCORI を CINONE と組み合わせて指定しても、MOCORI を指定しなくても同じことです。 - MOGRPI
- 指定されたグループ ID を持つメッセージを取り出します。
このオプションは、取り出されるメッセージのグループ ID が MQGET 呼び出しの
MSGDSCパラメーターのMDGIDフィールドの値と一致していなければならないことを指定します。 これは、適用される他の一致 (例えば、相関 ID) に加えて一致している必要があります。このオプションを指定しない場合、
MSGDSCパラメーターのMDGIDフィールドは無視され、すべてのグループ ID が一致します。注: グループ ID GINONE は、メッセージの MQMD 内の任意のグループ ID と一致する特殊値です。 したがって、MOGRPI を GINONE と組み合わせて指定しても、MOGRPI を指定しなくても同じことです。 - MOSEQN
- 指定されたメッセージ順序番号を持つメッセージを取り出します。
このオプションは、取り出されるメッセージのメッセージ・シーケンス番号が、MQGET 呼び出しの
MSGDSCパラメーターのMDSEQフィールドの値と一致している必要があることを指定します。 これは、適用される他の一致 (例えば、グループ ID) に加えて一致している必要があります。このオプションを指定しない場合、
MSGDSCパラメーターのMDSEQフィールドは無視され、すべてのメッセージ・シーケンス番号が一致します。 - MOOFFS
- 指定されたオフセットを持つメッセージを取り出します。
このオプションは、取り出されるメッセージのオフセットが MQGET 呼び出しの
MSGDSCパラメーターのMDOFFフィールドの値と一致していなければならないことを指定します。 これは、適用される他の一致 (例えば、メッセージ・シーケンス番号) に加えて一致している必要があります。このオプションを指定しない場合、
MSGDSCパラメーターのMDOFFフィールドは無視され、すべてのオフセットが一致します。
説明されたオプションを指定しない場合、以下のオプションが使用できます。- MONONE
- 一致なし。
このオプションを指定すると、戻すメッセージの選択時にどの一致も使用されません。したがって、キューに入っているメッセージがすべて取り出せるようになります (ただし、GMAMSA、GMASGA、および GMCMPM オプションで制御できます)。
MONONE は、プログラム文書化を支援するために定義されています。 このオプションは、他の MO* オプションと組み合わせて使用するオプションではありません。ただし、このオプションの値はゼロと等価なため、他のオプションと組み合わせて使用しても、エラーとして検出されることはありません。
このフィールドは入力フィールドです。 このフィールドの初期値は、MOMSGI と MOCORI を組み合わせたものです。
GMVERが GMVER2 より小さい場合、このフィールドは無視されます。注:GMMOフィールドの初期値は、以前のバージョンのキュー・マネージャーとの互換性のために定義されています。 しかし、選択基準を使用せずにキューから一連のメッセージを読み取る場合には、この初期値を使用すると、それぞれの MQGET 呼び出しの前にアプリケーションでMDMIDおよびMDCIDフィールドを MINONE および CINONE に再設定しなければなりません。GMVERに GMVER2 を、またGMMOに MONONE を設定しておけば、MDMIDおよびMDCIDフィールドを呼び出しごとに再設定しなくてもすみます。- 現行のグループまたは論理メッセージがない場合は、
- GMOPT (10 桁の符号付き整数)
MQGET のアクションを制御するオプション。
下記のオプションをいくつか指定できます (または、なにも指定しなくても構いません)。 2 つ以上指定が必要な場合は、それらの値を加算します (同じ定数を複数回加算しないでください)。 無効なオプションの組み合わせについては注記されています。それ以外の組み合わせは有効です。
待機オプション: 以下のオプションは、メッセージがキューに到着するまでの待機に関連するオプションです。- GMWT
- メッセージが到着するのを待機します。
アプリケーションは、適切なメッセージが到着するまで待機します。 アプリケーションが待機する最大時間は、
GMWIに指定されています。MQGET 要求が禁止されているか、MQGET 要求が待機中に禁止になる場合は、キューに適切なメッセージがあるかどうかにかかわらず、待機状態は取り消され、呼び出しは CCFAIL で完了し、理由コード RC2016 が戻ります。
このオプションは、GMBRWF オプションまたは GMBRWN オプションと共に使用することができます。
複数のアプリケーションが同じ共有キューで待機している場合、該当するメッセージが到着した時に活動化されるアプリケーション (1 つ以上) については、このセクションで後述します。
注: 以下の説明では、ブラウズ MQGET 呼び出しは、ブラウズ・オプションの 1 つを指定するものですが、GMLK は指定しません。GMLK オプションを指定する MQGET 呼び出しは、非ブラウズ呼び出しとして扱われます。- 1 つ以上の非ブラウズの MQGET 呼び出しが待機しているが、ブラウズの MQGET 呼び出しは待機していない場合は、1 つが活動化されます。
- 1 つ以上のブラウズの MQGET 呼び出しが待機しているが、非ブラウズの MQGET 呼び出しは待機していないという場合は、すべてが活動化されます。
- 1 つ以上の非ブラウズの MQGET 呼び出し、および 1 つ以上のブラウズの MQGET 呼び出しが待機しているという場合は、1 つの非ブラウズの MQGET 呼び出しが活動化されますが、ブラウズの MQGET 呼び出しについては、一切活動化されない、一部活動化される、あるいはすべてが活動化されるかのいずれかになります。 (活動化されるブラウズの MQGET 呼び出しの数は、オペレーティング・システムのスケジューリングの考慮事項と、その他の要素によって決まるため、予測することができません。)
- 特定のメッセージによってのみ満たすことができる特定の get-wait 要求。例えば、特定の
MDMIDまたはMDCID(あるいはその両方) を持つ要求。 - どのメッセージによっても満たすことができる一般的な get-wait 要求。
以下の点に注意してください。- 最初のカテゴリーでは、より具体的な get-wait 要求 (例えば、
MDMIDとMDCIDの両方を指定する要求) に追加の優先順位は与えられません。 - いずれのカテゴリーでも、どのアプリケーションが選択されるか予測はできません。 特に、待機時間が長いアプリケーションから選択されるとは限りません。
- オペレーティング・システムのパス長および優先順位スケジューリングが考慮された結果、待機中のアプリケーションのうち、予期された優先順位より低いオペレーティング・システムの優先順位を持つアプリケーションがメッセージを取得する場合もあります。
- また、待機中でないアプリケーションが、待機中のアプリケーションより先にメッセージを取り出すこともあります。
GMBRWC または GMMUC を指定した場合、GMWT は無視され、エラーは発生しません。
- GMNWT
- 適切なメッセージがなければ、ただちに戻ります。
適切なメッセージを使用できない場合、アプリケーションは待機しません。 これは、GMWT オプションの反対で、プログラム文書化を支援するために定義されています。 いずれも指定されていないときは、これがデフォルト値になります。
- GMFIQ
- キュー・マネージャーが静止している場合は、失敗します。
このオプションを指定すると、キュー・マネージャーが静止状態にある場合、MQGET 呼び出しが強制的に失敗します。
このオプションを GMWT と共に指定し、かつキュー・マネージャーが静止状態になった時点で待機状態が未解決である場合、- 待機は取り消され、呼び出しは理由コード付きで完了コード CCFAIL を戻します。RC2161.
同期点オプション: 以下のオプションは、作業単位内での MQGET 呼び出しの実行に関連したオプションです。- GMSYP
- 同期点制御を使用してメッセージを読み取ります。
この要求は、通常の作業単位プロトコルの中で操作することです。 メッセージには、他のアプリケーションでは使用できないものとしてマークが付けられますが、作業単位がコミットされたときにのみ、キューから削除されます。 作業単位がバックアウトされると、メッセージは再び使用可能になります。
このオプションまたは GMNSYP が指定されていない場合、読み取り要求は作業単位内にありません。
このオプションと組み合わせて使用できないオプションは、以下のとおりです。- GMBRWF
- GMBRWC
- GMBRWN
- GMLK
- GMNSYP
- GMPSYP
- GMUNLK
- GMPSYP
- メッセージが持続する場合、同期点制御を使用してメッセージを読み取ります。この要求は、取り出されたメッセージが持続する場合に限り、標準の作業単位プロトコル内で機能します。 持続メッセージには、MQMD の
MDPERフィールドの値 PEPER があります。- メッセージが持続的である場合、キュー・マネージャーは、アプリケーションで GMSYP が指定されている場合と同じように呼び出しを処理します。
- メッセージが持続しない場合、キュー・マネージャーは、アプリケーションで GMNSYP (以下のセクションを参照) が指定されている場合と同じように呼び出しを処理します。
このオプションと組み合わせて使用できないオプションは、以下のとおりです。- GMBRWF
- GMBRWC
- GMBRWN
- GMCMPM
- GMNSYP
- GMSYP
- GMUNLK
- GMNSYP
- 同期点制御なしでメッセージを取得します。
この要求は、通常の作業単位プロトコルの外部で動作することになります。 メッセージは即時にキューから削除されます(ブラウザー要求の場合を除く)。 作業単位をバックアウトすることによって、メッセージを再度使用可能にすることはできません。
GMBRWF または GMBRWN が指定されている場合は、このオプションが想定されます。
このオプションと GMSYP が指定されていない場合、取得要求は作業単位内にはありません。
このオプションと組み合わせて使用できないオプションは、以下のとおりです。- GMSYP
- GMPSYP
ブラウズ・オプション: 以下のオプションは、キュー上のメッセージのブラウズに関連したオプションです。- GMBRWF
- キューの先頭からブラウズします。
OOBRW オプションを指定してキューを開くと、キュー上の最初のメッセージの前に、ブラウズ・カーソルが置かれ、論理的に位置付けられます。 GMBRWF、 GMBRWN、または GMBRWC オプションを指定して後続の MQGET 呼び出しを使用すると、キューからメッセージを非破壊的に取り出すことができます。 ブラウズ・カーソルは、キュー上のメッセージ内の位置にマークを付け、 GMBRWN の次の MQGET 呼び出しで適切なメッセージが検索されるようにします。
GMBRWF を指定した MQGET 呼び出しは、ブラウズ・カーソルの直前の位置が無視されます。 メッセージ記述子に指定された条件を満たすキュー上の最初のメッセージが検索されます。 メッセージはキューに残り、ブラウズ・カーソルはこのメッセージの上に置かれます。
この呼び出しの後、ブラウズ・カーソルは、戻されたメッセージ上に置かれます。 GMBRWN を指定した次の MQGET 呼び出しの前にメッセージがキューから除去された場合、ブラウズ・カーソルは、メッセージが占めていたキュー内の位置にあります。ただし、その位置が空になっている場合でも、その位置には変わりません。
次に、 GMMUC オプションを非ブラウズの MQGET 呼び出しで使用して、キューからメッセージを除去することができます。
ブラウズ・カーソルは、同じ
HOBJハンドルを使用する非ブラウズ MQGET 呼び出しによって移動されません。 また、CCFAIL の完了コードまたは理由コードを戻すブラウズ MQGET 呼び出しによっても移動されません。RC2080.GMLK オプションをこのオプションと一緒に指定すると、ブラウズされたメッセージがロックされるようになります。
GMBRWF は、グループ内のメッセージの処理および論理メッセージのセグメントを制御する GM* および MO* オプションと、任意の有効な組み合わせを使用して指定することができます。
GMLOGO が指定されている場合、メッセージは論理順序でブラウズされます。 このオプションを省略すると、メッセージは物理的な順序で参照されます。 GMBRWF を指定すると、論理順序と物理順序を切り替えることができますが、後続の GMBRWN を使用する MQGET 呼び出しでは、 GMBRWF を指定した最新のキュー・ハンドルと同じ順序でキューをブラウズする必要があります。
キュー・マネージャーがキュー上のメッセージをブラウズする MQGET 呼び出し用に保持するグループおよびセグメント情報は、キューからメッセージを除去する MQGET 呼び出しのためにキュー・マネージャーが保持するグループとセグメント情報とは分離されます。 GMBRWF を指定した場合,キューマネージャはブラウズのためのグループとセグメント情報を無視して,あたかも現在のグループと現在の論理メッセージがないかのようにキューをスキャンします。 MQGET 呼び出しが成功すると (完了コード CCOK または CCWARN)、ブラウズ用のグループおよびセグメント情報は、戻されたメッセージの情報に設定されます。呼び出しが失敗すると、ブラウズ用のグループおよびセグメント情報は、呼び出しが行われる前のままです。
このオプションと組み合わせて使用できないオプションは、以下のとおりです。- GMBRWC
- GMBRWN
- GMMUC
- GMSYP
- GMPSYP
- GMUNLK
- GMBRWN
- キューの現在位置からブラウズします。
ブラウズ・カーソルは、 MQGET 呼び出しで指定された選択基準を満たすキュー上の次のメッセージに進みます。 メッセージはアプリケーションに戻されますが、キューに残ります。
ブラウズのためにキューがオープンされた後、ハンドルを使用する最初のブラウズ呼び出しは、 GMBRWF オプションまたは GMBRWN オプションを指定しているかどうかに関係なく、同じ効果があります。
GMBRWN を指定した次の MQGET 呼び出しが発行される前にメッセージがキューから除去された場合、ブラウズ・カーソルは、メッセージが占めていたキュー内の位置が空であっても、論理的にその位置に留まります。
メッセージは、以下の 2 つの方法のいずれかによってキューに入れられます。- 優先順位による FIFO (MSPRIO)
- 優先順位に関係しない FIFO (MSFIFO)
MsgDeliverySequenceキュー属性は、適用されるメソッドを示します (詳しくは、 キューの属性 を参照してください)。キューの
MsgDeliverySequenceが MSPRIO であり、ブラウズ・カーソルによって現在指し示されているものより高い優先順位のメッセージがキューに到着した場合、そのメッセージは GMBRWN を使用するキューの現行スイープ中には検出されません。 そのメッセージは、GMBRWF で (またはキューの再オープンによって) ブラウズ・カーソルをリセットしないと、検出されません。その後、必要に応じて非ブラウズ MQGET 呼び出しで GMMUC オプションを使用することにより、キューからメッセージを削除することができます。
ブラウズ・カーソルは、同じ
HOBJハンドルを使用する非ブラウズ MQGET 呼び出しによって移動されません。GMLK オプションをこのオプションと一緒に指定すると、ブラウズされたメッセージがロックされるようになります。
GMBRWN は、論理メッセージのグループおよびセグメントでのメッセージ処理を制御する GM* および MO* オプションの有効な任意の組み合わせで指定することができます。
GMLOGO が指定されている場合、メッセージは論理順序でブラウズされます。 このオプションを省略すると、メッセージは物理的な順序で参照されます。 GMBRWF を指定すると、論理順序と物理順序を切り替えることができますが、後続の GMBRWN を使用する MQGET 呼び出しでは、 GMBRWF を指定した最新のキュー・ハンドルと同じ順序でキューをブラウズする必要があります。 この条件が満たされないと、呼び出しは失敗し、理由コード RC2259 が戻ります。
注: GMLOGO が指定されていないときに、メッセージ・グループ (またはグループ内にない論理メッセージ) の終わりを超えてブラウズするために MQGET 呼び出しを使用する場合は、特に注意する必要があります。 例えば、キューに入っているグループ内の最後のメッセージがそのグループ内の最初のメッセージより先に処理された場合に、GMBRWN を使用してそのグループが終了した後ろをブラウズし、(次のグループの最初のメッセージを見つけるために)MDSEQを1に設定して MOSEQN を指定すると、ブラウズ済みのグループの最初のメッセージが再度戻されます。 これは、即時に発生する可能性があります。あるいは、 ( 介入グループがある場合 ) 何度かの MQGET 呼び出し後に発生するかもしれません。無限ループの発生を避けるには、ブラウズの際にキューを 2 回オープンして次のように操作します。- 各グループの最初のメッセージだけをブラウズするには、最初のハンドルを使用します。
- 特定のグループのメッセージだけをブラウズするには、2 番目のハンドルを使用します。
- MO* オプションを使用して、グループ内のメッセージをブラウズする前に、2 番目のブラウズ・カーソルを最初のブラウズ・カーソルの位置に移動する。
- GMBRWN を使用しないで、1 つのグループが終了した後ろをブラウズする。
MQGET 呼び出しでキューに入っているメッセージをブラウズするためにキュー・マネージャーが保持しているグループおよびセグメント情報は、MQGET 呼び出しでキューからメッセージを除去するために保持しているグループおよびセグメント情報とは異なります。
このオプションと組み合わせて使用できないオプションは、以下のとおりです。- GMBRWF
- GMBRWC
- GMMUC
- GMSYP
- GMPSYP
- GMUNLK
- GMBRWC
- ブラウズ・カーソルの下のメッセージをブラウズします。
このオプションを指定すると、ブラウズ・カーソルが指すメッセージは、MQGMO の
GMMOフィールドに指定された MO* オプションに関係なく、非破壊的に取り出されます。ブラウズ・カーソルが指すメッセージは、GMBRWF または GMBRWN のいずれかのオプションを使用して最後に検索されたものです。 このキューがオープンされてから、このキューに対しこれらの呼び出しのいずれも発行されなかった場合、またはブラウズ・カーソルが指すメッセージが破壊されて取り出された場合、呼び出しは失敗します。
ブラウズ・カーソルの位置は、この呼び出しでは変更されません。
次に、 GMMUC オプションを非ブラウズの MQGET 呼び出しで使用して、キューからメッセージを除去することができます。
ブラウズ・カーソルは、同じ
HOBJハンドルを使用する非ブラウズ MQGET 呼び出しによって移動されません。 また、完了コード CCFAIL または理由コード RC2080 を戻すブラウズ MQGET 呼び出しによって移動することもありません。GMBRWC が GMLK と共に指定される場合- すでにロックされているメッセージは、カーソルの下になければなりません。この場合、ロック解除や再ロックをしないで戻されます。メッセージは、ロックされたままです。
- ロックされたメッセージがないときは、ブラウズ・カーソルの下にあるメッセージはロックされ、アプリケーションに戻されます。ブラウズ・カーソルの下にメッセージがなければ、呼び出しは失敗します。
GMBRWC が GMLK なしで指定される場合- 既にロックされているメッセージがある場合、そのメッセージがカーソルの下になければなりません。 このメッセージはアプリケーションに戻され、その後ロック解除されます。 メッセージは現在アンロックされているため、メッセージを再度ブラウズすることができない場合や、破壊取り出しができない場合があります (キューからメッセージを読み込む別のアプリケーションなら破壊取り出しができます)。
- ロックされたメッセージがないときは、ブラウズ・カーソルの下にあるメッセージがアプリケーションに戻されます。ブラウズ・カーソルの下にメッセージが何もなければ、呼び出しは失敗に終わります。
GMCMPM が GMBRWC と共に指定されている場合、ブラウズ・カーソルは MQMD 内の
MDOFFフィールドがゼロのメッセージを識別する必要があります。 この条件が満たされない場合、呼び出しは失敗し、理由コードが戻ります。RC2246.MQGET 呼び出しでキューに入っているメッセージをブラウズするためにキュー・マネージャーが保持しているグループおよびセグメント情報は、MQGET 呼び出しでキューからメッセージを除去するために保持しているグループおよびセグメント情報とは異なります。
このオプションと組み合わせて使用できないオプションは、以下のとおりです。- GMBRWF
- GMBRWN
- GMMUC
- GMSYP
- GMPSYP
- GMUNLK
- GMMUC
- ブラウズ・カーソルが置かれているメッセージを読み取ります。
このオプションを指定すると、MQGMO の
GMMOフィールドに指定された MO* オプションに関係なく、ブラウズ・カーソルが指すメッセージが取り出されます。 メッセージはキューから削除されます。ブラウズ・カーソルが指すメッセージは、GMBRWF または GMBRWN のいずれかのオプションを使用して最後に検索されたものです。
GMCMPM が GMMUC とともに指定されている場合、ブラウズ・カーソルは、MQMD 内の
MDOFFフィールドがゼロであるメッセージを識別する必要があります。 この条件が満たされない場合、呼び出しは失敗し、理由コードが戻ります。RC2246.このオプションと組み合わせて使用できないオプションは、以下のとおりです。- GMBRWF
- GMBRWC
- GMBRWN
- GMUNLK
ロック・オプション: 以下のオプションは、キュー上のメッセージのロックに関連したオプションです。- GMLK
- メッセージをロックします。このオプションは、ブラウズされるメッセージをロックするため、ロックされたメッセージは、このキューに対してオープンされた他のハンドルには、見えなくなります。 このオプションを指定できるのは、以下のオプションのいずれか 1 つが指定されている場合に限ります。
- GMBRWF
- GMBRWN
- GMBRWC
キュー・ハンドルごとに 1 つのメッセージしかロックできません。ただし、メッセージは、次に示す論理メッセージまたは物理メッセージに限ります。- GMCMPM を指定すると、論理メッセージを構成しているメッセージ・セグメントがすべて、キュー・ハンドルに対してロックされます (これらのセグメントすべてが、そのキューに含まれ、取り出し可能になっている場合)。
- GMCMPM を指定しないと、1 つの物理メッセージのみがキュー・ハンドルに対してロックされます。 ロックされたメッセージが論理メッセージのセグメントだった場合は、そのセグメントがロックされていると、他のアプリケーションで GMCMPM を指定しても、論理メッセージの取り出しやブラウズはできません。
ロックされたメッセージは常にブラウズ・カーソルのもとにあり、後で GMMUC オプションを指定した MQGET 呼び出しを発行するとキューから除去できます。 キュー・ハンドルを使用する他の MQGET 呼び出し (例えば、ロックされたメッセージのメッセージ ID を指定した呼び出し) でも、メッセージを削除できます。
呼び出しが完了コード CCFAIL または CCWARN を理由コード RC2080 と共に戻した場合、メッセージはロックされません。
キューからメッセージを除去しないようにアプリケーションで決定した場合は、以下のようにしてロックを解除します。- このハンドルに対して別の MQGET 呼び出しを発行する。このとき、GMBRWF または GMBRWN のいずれかを指定します (GMLK はあってもなくても構いません)。呼び出しが CCOK または CCWARN で完了すると、メッセージはアンロックされますが、CCFAIL で完了したときは、ロックしたままになります。 ただし、次の場合は例外になります。
- CCWARN が理由コード RC2080 と共に戻される場合、メッセージはアンロックされません。
- CCFAIL が理由コード RC2033 と共に戻される場合、メッセージはアンロックされます。
GMLK も指定されている場合、戻されるメッセージはロックされます。 GMLK が指定されない場合は、呼び出し後、ロックされるメッセージはありません。
GMWT が指定され、ただちにメッセージを利用できない場合、待機の開始前 (ただし呼び出しでエラーが発生しない) に元のメッセージがアンロックされます。
- このハンドルに対して別の MQGET 呼び出しを発行する。このとき、GMBRWC を指定します (GMLK は指定しません)。呼び出しが CCOK または CCWARN で完了すると、メッセージはアンロックされますが、CCFAIL で完了したときは、ロックしたままになります。 ただし、次のような例外があります。
- CCWARN が理由コード RC2080 と共に戻される場合、メッセージはアンロックされません。
- このハンドルに対して、GMUNLK を指定した別の MQGET 呼び出しを発行する。
- このハンドルに対して MQCLOSE 呼び出しを発行する (明示的に、またはアプリケーションの終了によって暗黙的に)。
このオプションと組み合わせて使用できないオプションは、以下のとおりです。- GMSYP
- GMPSYP
- GMUNLK
- GMUNLK
- メッセージをアンロックします。
アンロックされるメッセージは、GMLK オプションを指定した MQGET 呼び出しにより前もってロックされていなければなりません。 このハンドルに対してロックされたメッセージがない場合、呼び出しは CCWARN で完了し、RC2209.
GMUNLK が指定されている場合、
MSGDSC、BUFLEN、BUFFER、およびDATLENパラメーターは検査も変更もされません。BUFFERにメッセージは返されません。(最初にロック要求を出すために OOBRW が必要ですが) このオプションを指定するのに特別なオープン・オプションは必要ありません。
このオプションは、以下のオプション以外のオプションとは組み合わせて使用できません。- GMNWT
- GMNSYP
メッセージ・データ・オプション: 以下のオプションは、メッセージがキューから読み取られるときのメッセージ・データの処理に関連しています。- GMATM
- メッセージ・データの切り捨てを許可します。メッセージ・バッファーが小さいためにメッセージ全体を収容できない場合に、このオプションを使用すると、MQGET 呼び出しでは、バッファーに収容できる分だけメッセージを入れ、警告完了コードを出して、その処理を終了できます。 これは、以下のことを意味します。
- メッセージをブラウズすると、ブラウズ・カーソルが、戻されたメッセージに進みます。
- メッセージを削除すると、戻されたメッセージがキューから削除されます。
- 理由コードRC2079他のエラーが発生しない場合に返されます。
- メッセージをブラウズしても、ブラウズ・カーソルは進みません。
- メッセージを削除しても、メッセージはキューから削除されません。
- 理由コードRC2080他のエラーが発生しない場合に返されます。
- GMCONV
- メッセージ・データを変換します。
このオプションは、データが
BUFFERパラメーターにコピーされる前に、MQGET 呼び出しのMSGDSCパラメーターに指定されたMDCSIおよびMDENC値に準拠するように、メッセージ内のアプリケーション・データを変換することを要求します。メッセージが書き込まれたときに指定されたMDFMTフィールドは、メッセージ内のデータの性質を識別するために変換プロセスによって想定されます。 メッセージ・データの変換は、組み込み形式の場合はキュー・マネージャーによって行われ、他の形式の場合はユーザー作成出口によって行われます。- 変換が正常に実行された場合、MQGET 呼び出しからの戻り時に、
MSGDSCパラメーターに指定されたMDCSIおよびMDENCフィールドは変更されません。 - 変換を正常に実行できない場合 (ただし、それ以外の場合は MQGET 呼び出しがエラーなしで完了する場合)、メッセージ・データは変換されずに戻され、
MSGDSCのMDCSIおよびMDENCフィールドは未変換のメッセージの値に設定されます。 この場合、完了コードは CCWARN です。
BUFFERパラメーターで返されるメッセージ・データの文字セット ID とエンコードを記述します。キュー・マネージャーが変換を実行する形式名のリストについては、 MQMD-メッセージ記述子 で説明されている
MDFMTフィールドを参照してください。 - 変換が正常に実行された場合、MQGET 呼び出しからの戻り時に、
グループおよびセグメント・オプション: 以下のオプションは、論理メッセージのグループおよびセグメントに含まれるメッセージの処理に関連しています。 これらの定義を理解しておくと、オプションを把握するのに役に立ちます。- 物理メッセージ
- このメッセージは、キューに入れたりキューから除去できる最小単位の情報です。多くの場合、1 つの MQPUT、MQPUT1、または MQGET 呼び出しで指定された情報や取り出された情報に相当します。 すべての物理メッセージには、固有のメッセージ記述子 (MQMD) があります。 通常、物理メッセージは、メッセージ ID (MQMD の
MDMIDフィールド) の異なる値によって区別されます。ただし、これはキュー・マネージャーによって強制されるものではありません。 - 論理メッセージ
- これは、1 単位のアプリケーション情報です。 システムに制約がない場合には、1 つの論理メッセージが 1 つの物理メッセージになることもあります。 ただし、論理メッセージが大きい場合、システムの制約により、1 つの論理メッセージをセグメントと呼ばれる複数の物理メッセージに分割することが必要になる場合があります。
セグメント化された論理メッセージは、同じ非ヌル・グループ ID (MQMD の
MDGIDフィールド) を持つ複数の物理メッセージと、同じメッセージ・シーケンス番号 (MQMD のMDSEQフィールド) で構成されます。 セグメントは、セグメント・オフセット (MQMD のMDOFFフィールド) の固有の値によって区別されます。この値は、論理メッセージ内のデータの先頭からの物理メッセージ内のデータのオフセットを示します。 各セグメントは 1 つの物理メッセージなので、論理メッセージ内のセグメントには通常、それぞれ固有のメッセージ ID があります。セグメント化されていない論理メッセージにも、送信側のアプリケーションでセグメント化が許可されている場合は、NULL でないグループ ID があります。ただし、この場合、そのグループ ID を持つのは、論理メッセージが 1 つのメッセージ・グループに属していないと、1 つの物理メッセージのみです。 論理メッセージが 1 つのメッセージ・グループに属していない場合、送信側のアプリケーションによってセグメント化が禁止されている論理メッセージのグループ ID はヌルとなります (GINONE)。
- メッセージ・グループ
- 非空文字の同じグループ ID をもつ 1 つ以上の論理メッセージから構成される集合です。 グループ内のそれぞれの論理メッセージは、メッセージ順序番号に指定された固有の値で区別されます。指定される値は 1 から n までの整数で、n はグループ内の論理メッセージの数です。 1 つ以上の論理メッセージをセグメント化すると、グループ内の物理メッセージの数は n 個を超えます。
- GMLOGO
- グループ内のメッセージおよび論理メッセージのセグメントが、論理順序で戻されます。
このオプションにより、キュー・ハンドルに対する連続した MQGET 呼び出しに対して、戻されるメッセージの順序を制御します。 有効に活用するには、必ずそれぞれの呼び出しごとにこのオプションを指定してください。
キュー・ハンドルに対する連続した MQGET 呼び出しで GMLOGO を指定すると、グループ内のメッセージはそのメッセージ順序番号に指定された順序で戻され、論理メッセージのセグメントはそのセグメント・オフセットに指定された順序で戻されます。 この順序は、これらのメッセージやセグメントのキューでの出現順序とは異なる場合があります。
注: GMLOGO を指定しても、グループに属さず、セグメントでもないメッセージに悪影響を及ぼすことはありません。 そのようなメッセージは、事実上、1 つのメッセージのみで構成されるメッセージ・グループに属するものとして扱われます。 したがって、グループに属すメッセージ、メッセージ・セグメント、グループに属さないセグメント化されていないメッセージが混在している可能性があるキューからメッセージを取り出すため GMLOGO を指定しても、まったく安全です。必要な順序でメッセージを戻すように、キュー・マネージャーが、連続した MQGET 呼び出し間でのグループおよびセグメント情報を保持します。 この情報により、キュー・ハンドルに対する現行のメッセージ・グループと現行の論理メッセージ、グループおよび論理メッセージ内の現行の位置、およびメッセージが 1 つの作業単位内で取り出されているかどうかが特定されます。 キュー・マネージャーがこの情報を保持するので、アプリケーションでは、それぞれの MQGET 呼び出しの前にグループおよびセグメント情報を設定する必要はありません。 具体的には、アプリケーションが MQMD の
MDGID、MDSEQ、およびMDOFFフィールドを設定する必要がないことを意味します。 ただし、アプリケーションでは、それぞれの呼び出しに GMSYP オプションまたは GMNSYP オプションのいずれかを正しく設定する必要があります。キューがオープンしているときは、現行のメッセージ・グループも現行の論理メッセージも存在しません。 1 つのメッセージ・グループが現行のメッセージ・グループとなるのは、MFMIG フラグ付きのメッセージが MQGET 呼び出しで戻されたときです。 以降の呼び出しで GMLOGO を指定すると、以下のいずれかを含むメッセージが戻されるまで、現行のグループは存続します。- MFSEG の付いていない MFLMIG (グループ内の最後の論理メッセージがセグメント化されていない)
- MFLSEG の付いた MFLMIG (戻されたメッセージがグループ内の最後の論理メッセージの最後のセグメントである)
選択基準が指定されていない場合、後続の MQGET 呼び出しは、キュー上の最初のメッセージ・グループのメッセージを正しい順序で戻します。次に 2 番目のメッセージ・グループのメッセージが戻されます。これは、使用できるメッセージがなくなるまで続きます。GMMOフィールドに以下のオプションを 1 つ以上指定することによって、戻される特定のメッセージ・グループを選択することができます。- MOMSGI
- MOCORI
- MOGRPI
GMMOフィールドを参照してください。表 1 は、MQGET 呼び出しで戻すメッセージを検出しようとするときにキュー・マネージャーが検索するMDMID、MDCID、MDGID、MDSEQ、およびMDOFFの各フィールドの値を示しています。 これは、キューからメッセージを除去する場合にもキューに入っているメッセージをブラウズする場合にも適用されます。 この表の列の意味は、次のとおりです。- LOG ORD
- GMLOGO オプションが呼び出しで指定されているかどうかを示します。
- Cur grp
- 現行のメッセージ・グループが呼び出しの前に存在するかどうかを示します。
- Cur log msg
- 現行の論理メッセージが呼び出しの前に存在するかどうかを示します。
- その他の列
- キュー・マネージャーが検索する値を示します。 「前の」という表現は、キュー・ハンドルに対して前のメッセージのフィールドに戻された値を示します。
表 1. 論理メッセージのグループおよびセグメントに関連した MQGET オプション 指定するオプション 呼び出しの前のグループおよび論理メッセージの状況 キュー・マネージャーが検索する値 LOG ORD Cur grp Cur log msg MDMIDMDCIDMDGIDMDSEQMDOFFはい いいえ いいえ 統制活動担当者 GMMO統制活動担当者 GMMO統制活動担当者 GMMO1 0 はい いいえ はい 任意のメッセージ ID 任意の相関 ID 前のグループ ID 1 前のオフセット + 前のセグメント長 はい はい いいえ 任意のメッセージ ID 任意の相関 ID 前のグループ ID 前の順序番号 + 1 0 はい はい はい 任意のメッセージ ID 任意の相関 ID 前のグループ ID 前の順序番号 前のオフセット + 前のセグメント長 いいえ どちらも どちらも 統制活動担当者 GMMO統制活動担当者 GMMO統制活動担当者 GMMO統制活動担当者 GMMO統制活動担当者 GMMOキューの中に複数のメッセージ・グループが存在し、戻されるのに適格である場合、それらのグループが戻される順序は、各グループ内の最初の論理メッセージの最初のセグメントがキューの中のどの位置にあるかによって決定されます (つまり、メッセージ順序番号が 1、オフセットが 0 の物理メッセージにより、適格なグループが戻される順序が決定されます)。
GMLOGO オプションが作業単位に及ぼす影響は、以下のとおりです。- 1 つのグループ内の最初の論理メッセージまたはセグメントが 1 つの作業単位内で取得された場合には、同じキュー・ハンドルが使用されていれば、そのグループ内の他の論理メッセージおよびセグメントはすべて 1 つの作業単位内で取得する必要があります。 ただし、これらは同じ作業単位内で取得する必要はありません。 これにより、多くの物理メッセージからなるメッセージ・グループを、キュー・ハンドルに対する 2 つ以上の連続した作業単位にまたがって分割できます。
- 1 つのグループ内の最初の論理メッセージまたはセグメントが 1 つの作業単位内で取り出されていない 場合に、同じキュー・ハンドルが使用されているときは、そのグループ内のその他の論理メッセージおよびセグメントはどれも 1 つの作業単位内で取り出すことはできません。
GMLOGO を指定した場合には、MQGET 呼び出しで提供された MQGMO が GMVER2 より下位であったり、MQMD が MDVER2 より下位であったりしてはなりません。 この条件が満たされない場合、呼び出しは失敗し、理由コードが戻ります。RC2256またはRC2257、必要に応じて。
キュー・ハンドルに対する連続した MQGET 呼び出しで GMLOGO を指定しないと、メッセージ・グループに属していなくても、また論理メッセージのセグメントでなくてもメッセージは戻されます。 これにより、あるグループ内のメッセージや論理メッセージのセグメントが正しくない順序で戻されたり、他のグループ内のメッセージ、他の論理メッセージのセグメント、またはグループにも属さずセグメントでもないメッセージとが混在したりする場合があります。 この場合、連続する MQGET 呼び出しによって戻される特定のメッセージは、それらの呼び出しで指定された MO* オプションによって制御されます (これらのオプションの詳細については、 MQGMO-メッセージ読み取りオプション で説明されている
GMMOフィールドを参照してください)。この手法を用いると、システム障害が発生した後に、メッセージ・グループまたは論理メッセージを途中から再開することができます。 システムの再始動時に、アプリケーションは、
MDGID、MDSEQ、MDOFF、およびGMMOフィールドを適切な値に設定し、GMLOGO を指定せずに、必要に応じて GMSYP または GMNSYP を設定した MQGET 呼び出しを発行することができます。 この呼び出しが成功した場合、キュー・マネージャーはグループとセグメントの情報を保存し、そのキュー・ハンドルを使用する後続の MQGET 呼び出しで通常どおり GMLOGO を指定できます。MQGET 呼び出しのためにキュー・マネージャーが保持しているグループおよびセグメント情報は、MQPUT 呼び出しのためにキュー・マネージャーが保持しているグループおよびセグメント情報とは異なります。 また、キュー・マネージャーは、以下についての情報もそれぞれ保持しています。- キューからメッセージを削除する MQGET 呼び出し。
- キュー上のメッセージをブラウズする MQGET 呼び出し。
キュー・ハンドルが指定されている場合には、アプリケーションでは、GMLOGO を指定した MQGET 呼び出しと GMLOGO を指定していない MQGET 呼び出しを自由に組み合わせて使用できます。ただし、以下の点に注意してください。- GMLOGO を指定していない場合は、MQGET 呼び出しが成功するたびに、キュー・マネージャーが、保存しているグループおよびセグメント情報を、戻されたメッセージに対応する値に設定します。これにより、キュー・ハンドルに対してキュー・マネージャーで保存されていた既存のグループおよびセグメント情報が置換されます。 呼び出しのアクション (ブラウズまたは削除) に該当する情報だけが変更されます。
- GMLOGO を指定していない場合、現行のメッセージ・グループまたは論理メッセージがあれば、呼び出しは失敗しません。ただし、CCWARN 完了コードで呼び出しが成功する場合もあります。 表 2 に、発生する可能性のあるさまざまなケースを示します。 これらの場合に、完了コードが CCOK 以外であれば、理由コードは以下のいずれかになります。
- RC2241
- RC2242
- RC2245
注: キューをブラウズする場合、またはブラウズ用にオープンされたが入力用ではないキューをクローズする場合、キュー・マネージャーはグループおよびセグメントの情報を検査しません。これらの場合、完了コードは常に CCOK です (他のエラーがないことを前提とします)。
表 2. グループおよびセグメント情報と整合性のない MQGET または MQCLOSE 呼び出しの結果 現行の呼び出し 直前の呼び出しは GMLOGO を指定している MQGET だった 直前の呼び出しは GMLOGO を指定していない MQGET だった GMLOGO を指定している MQGET CCFAIL CCFAIL GMLOGO を指定していない MQGET CCWARN CCOK 終了していないグループまたは論理メッセージを指定している MQCLOSE CCWARN CCOK 単にメッセージおよびセグメントを論理順序で取り出すアプリケーションでは、最も簡単に使えるオプション GMLOGO を指定するようにしてください。 このオプションを指定すると、キュー・マネージャーがグループおよびセグメント情報を管理するので、アプリケーションでこの情報を管理する必要はなくなります。 しかし、GMLOGO オプションで提供される制御以外の制御が必要となる特殊なアプリケーションもあります。このようなアプリケーションでは、このオプションを指定しないようにしてください。 これを行う場合、アプリケーションは、それぞれの MQGET 呼び出しの前に、MQMD 内の
MDMID、MDCID、MDGID、MDSEQ、およびMDOFFフィールド、および MQGMO 内のGMMO内の MO* オプションが正しく設定されていることを確認する必要があります。例えば、受信した物理メッセージがグループに属していなくても、また論理メッセージのセグメントでなくても、そのメッセージを転送するアプリケーションでは、GMLOGO を指定しないようにしてください。 これは、送信側のキュー・マネージャーと受信側のキュー・マネージャーの間にパスがいくつもあるような複雑なネットワークの場合に、物理メッセージが正しくない順序で到着することがあるからです。 GMLOGO およびこれに対応する MQPUT 呼び出し上の PMLOGO を両方とも指定しないようにすると、転送側のアプリケーションでは、論理順序で次にあるメッセージが到着するのを待たなくても、それぞれの物理メッセージの到着と同時にそのメッセージを取り出し転送することができます。
GMLOGO は、その他の GM* オプションと組み合わせても、また状況に応じて各種 MO* オプションと組み合わせても指定できます。
- GMCMPM
- 完全な論理メッセージのみが取り出し可能です。
このオプションを指定すると、完全な論理メッセージのみを MQGET 呼び出しで戻すことができます。 論理メッセージがセグメント化されていると、キュー・マネージャーはそれらのセグメントの再組み立てを行い、完全な論理メッセージをアプリケーションに戻します。論理メッセージがセグメント化されていたことは、それを受け取るアプリケーションには分かりません。
注: これは、キュー・マネージャーにメッセージ・セグメントを再アセンブルさせる唯一のオプションです。 このオプションを指定しないと、キューに入っている (および MQGET 呼び出しで指定された他の選択基準を満たしている) セグメントはそれぞれ個別にアプリケーションに戻されます。 セグメントを個別に受け取らない場合は、必ずアプリケーションで GMCMPM を指定してください。このオプションを使用するには、完全なメッセージを収容できるバッファーがアプリケーションに提供されているか、GMATM オプションがアプリケーションに指定されている必要があります。
セグメント化されたメッセージがキューに入っていても、セグメントのいくつかが足りない (ネットワーク内が混雑していてまだ到着していないことが考えられる) 場合、GMCMPM を指定していると、完全でない論理メッセージに属しているセグメントが取り出されることはありません。 ただし、これらのメッセージ・セグメントは引き続き
CurrentQDepthキュー属性の値に寄与します。これは、CurrentQDepthがゼロより大きい場合でも、検索可能な論理メッセージが存在しない可能性があることを意味します。持続メッセージの場合、キュー・マネージャーがセグメントの再組み立てを実行できるのは、1 つの作業単位内でだけです。- MQGET 呼び出しがユーザー定義の作業単位内で実行されていれば、その作業単位が使用されます。 呼び出しが再組み立て処理の途中で失敗した場合、キュー・マネージャーは、再組み立て中に除去されたすべてのセグメントを再度キューに配置します。 ただし、このように失敗しても、作業単位は正常にコミットされます。
- 呼び出しがユーザー定義の作業単位以外で実行されていて、またユーザー定義の作業単位が存在していない場合、キュー・マネージャーは、この呼び出しの間だけの作業単位を作成します。 呼び出しが成功すると、キュー・マネージャーは作業単位を自動的にコミットします (アプリケーションでこれを行う必要はありません)。 呼び出しが失敗すると、キュー・マネージャーは作業単位をバックアウトします。
- 呼び出しがユーザー定義の作業単位以外で実行されていて、さらにユーザー定義の作業単位も存在している場合、キュー・マネージャーは再組み立てを実行できません。 再組み立てが必要でないメッセージでは、呼び出しが成功することもあります。 しかし、メッセージの再組み立てが必要な場合は、呼び出しは失敗し、理由コードが示されます。RC2255.
非持続メッセージの場合、キュー・マネージャーが再組み立てを実行するのに、1 つの作業単位が使用可能になっている必要はありません。
1 つのセグメントであるそれぞれの物理メッセージには、固有のメッセージ記述子があります。 単一の論理メッセージを構成するセグメントの場合、メッセージ記述子内のほとんどのフィールドは、論理メッセージ内のすべてのセグメントで同じです。通常、論理メッセージ内のセグメント間で異なるのは、
MDMID、MDOFF、およびMDMFLフィールドのみです。 ただし、セグメントが中間キュー・マネージャーの送達不能キューの中にある場合、DLQ ハンドラーは GMCONV オプションを指定してメッセージを検索するため、そのセグメントの文字セットまたはエンコードが変えられてしまう可能性があります。 それで、この途中で DLQ ハンドラーがセグメントの送信に成功した場合、そのセグメントが最終的に宛先キュー・マネージャーに到着した時点で、そのセグメントの文字セットまたはエンコードは論理メッセージ内の他のセグメントと異なっていることがあります。MDCSI、MDENC、または両方のフィールドが異なるセグメントで構成される論理メッセージを、キュー・マネージャーが単一の論理メッセージに再組み立てすることはできません。 代わりに、キュー・マネージャーは、同じ文字セット ID とエンコードを持つ論理メッセージの先頭にある最初の数個の連続セグメントを再アセンブルして返します。MQGET 呼び出しは、完了コード CCWARN と理由コードで完了します。RC2243またはRC2244、必要に応じて。 これは、GMCONV が指定されていてもいなくても実行されます。 残りのセグメントを取り出すには、アプリケーションで GMCMPM オプションを指定せずに MQGET 呼び出しを再発行する必要があります。これによって、セグメントが 1 つずつ取り出せるようになります。 GMLOGO を使用すれば、残りのセグメントを順番に取り出すことができます。セグメントの書き込みを行うアプリケーションでは、メッセージ記述子内の他のフィールドに、セグメント間で異なる値を設定できます。 しかし、受信側のアプリケーションで論理メッセージの取り出しに GMCMPM が使用されている場合は、これを実行しても利点はありません。 キュー・マネージャーは、論理メッセージの再組み立て時に、最初のセグメントのメッセージ記述子からの値をメッセージ記述子に戻します。唯一の例外は
MDMFLフィールドで、再組み立てされたメッセージが唯一のセグメントであることを示すためにキュー・マネージャーが設定します。GMCMPM をレポート・メッセージ用に指定すると、キュー・マネージャーは特殊な処理を実行します。 キュー・マネージャーは、キューをチェックして、論理メッセージ内のさまざまなセグメントに関連するそのレポート・タイプのすべてのレポート・メッセージがキュー上に存在しているかどうかを確認します。 入っている場合には、GMCMPM を指定することでそれらのメッセージを 1 つのメッセージとして取り出すことができます。 これには、セグメント化をサポートしているキュー・マネージャーまたは MCA を使用してレポート・メッセージを生成するか、発信側のアプリケーションで 100 バイト以上のメッセージ・データを要求する必要があります (つまり、RO*D または RO*F オプションの該当する方を指定する必要があります)。 1 つのセグメントに入るアプリケーション・データの一部に欠落があると、戻されるレポート・メッセージでは、足りないバイト分はヌルで置き換えられます。
GMCMPM を GMMUC または GMBRWC と一緒に指定する場合、MQMD の
MDOFFフィールドの値が 0 のメッセージにブラウズ・カーソルを置く必要があります。 この条件が満たされない場合、呼び出しは失敗し、理由コードが戻ります。RC2246.GMCMPM は、GMASGA に暗黙的に含まれているため指定する必要はありません。
GMCMPM は、GMPSYP 以外の GM* オプションおよび MOOFFS 以外の MO* オプションと組み合わせて指定できます。
- GMAMSA
- グループ内のメッセージはすべて使用可能でなければなりません。
このオプションを指定すると、グループ内のメッセージがすべて使用可能な場合に限り、そのグループ内のメッセージを取得できるようになります。 メッセージ・グループがキューに入っていても、メッセージのいくつかが足りない (ネットワーク内が混雑していてまだ到着していないことが考えられる) 場合、GMAMSA を指定していると、完全でないグループに属しているメッセージが取り出されることはありません。 ただし、これらのメッセージは引き続き
CurrentQDepthキュー属性の値に寄与します。これは、CurrentQDepthがゼロより大きい場合でも、検索可能なメッセージ・グループが存在しない可能性があることを意味します。 検索できるメッセージが他にない場合は、理由コードRC2033指定された待機間隔 (ある場合) が経過した後に返されます。GMAMSA の処理は、GMLOGO が指定されているかどうかで異なります。- これらのオプションを両方とも指定している場合、GMAMSA が有効となるのは、現行のグループまたは論理メッセージが存在していない場合のみ です。 現行のグループまたは論理メッセージが存在している 場合には、GMAMSA は無視されます。 つまり、メッセージが論理順序で処理されているときは、GMAMSA はオンになっています。
- GMLOGO を指定せずに GMAMSA を指定している場合、GMAMSA は常に有効です。 つまり、このオプションは、グループ内の最初のメッセージがキューから削除されたときにオフにする必要があります。これによって、そのグループ内の残りのメッセージを削除できるようになります。
GMAMSA を指定した MQGET 呼び出しが正常に完了するということは、MQGET 呼び出しが発行された時点で、グループ内のすべてのメッセージがキュー上にあるという意味です。 ただし、その場合も、他のアプリケーションがグループからメッセージを 除去することができます (グループは、グループ内の最初のメッセージを取り出したアプリケーションに 対してロックされません)。
このオプションを指定しないと、不完全なグループに属しているメッセージが取り出されることがあります。
GMAMSA は GMASGA を暗黙的に含んでいるため、指定する必要はありません。
GMAMSA は、他のすべての GM* オプションおよびすべての MO* オプションと組み合わせて指定できます。
- GMASGA
- 論理メッセージ内のセグメントはすべて使用可能でなければなりません。
このオプションを指定すると、論理メッセージ内のセグメントがすべて使用可能な場合に限り、その論理メッセージ内のセグメントを取得できるようになります。 セグメント化されたメッセージがキューに入っていても、セグメントのいくつかが足りない (ネットワーク内が混雑していてまだ到着していないことが考えられる) 場合、GMASGA を指定していると、完全でない論理メッセージに属しているセグメントが取り出されることはありません。 ただし、これらのセグメントは引き続き
CurrentQDepthキュー属性の値に寄与します。これは、CurrentQDepthがゼロより大きい場合でも、検索可能な論理メッセージが存在しない可能性があることを意味します。 検索できるメッセージが他にない場合は、理由コードRC2033指定された待機間隔 (ある場合) が経過した後に返されます。GMASGA の処理は、GMLOGO が指定されているかどうかで異なります。- これらのオプションを両方とも指定している場合、GMASGA が有効となるのは、現行の論理メッセージが存在していない場合のみです。 現行の論理メッセージが存在している場合には、GMASGA は無視されます。 つまり、メッセージが論理順序で処理されているときは、GMASGA はオンになっています。
- GMLOGO を指定せずに GMASGA のみを指定している場合は、GMASGA は常に有効です。 つまり、このオプションは、論理メッセージ内の最初のセグメントがキューから削除されたときにオフにする必要があります。これによって、その論理メッセージ内の残りのセグメントを削除できるようになります。
このオプションを指定しないと、論理メッセージが不完全な場合でも、メッセージ・セグメントが取得されることがあります。
GMCMPM および GMASGA を両方とも指定している場合は、すべてのセグメントを取り出す前に、まずそれらを使用可能にする必要があります。前者のみの場合は、完全なメッセージが戻され、後者のみの場合は、セグメントを 1 つずつ取り出すことができます。
GMASGA をレポート・メッセージ用に指定すると、キュー・マネージャーは特殊な処理を実行します。 キュー・マネージャーは、キューをチェックして、完全な論理メッセージを構成しているそれぞれのセグメントに対して少なくとも 1 つのレポート・メッセージが入っているかどうかを確認します。 入っている場合は、GMASGA 条件は満たされます。 しかし、キュー・マネージャーは、キューに入っているレポート・メッセージのタイプはチェックしないので、論理メッセージのセグメントに対応したレポート・メッセージにはさまざまなタイプのレポートが混在している可能性があります。 結果として、GMASGA が成功しても、GMCMPM が成功するとは限りません。 ある論理メッセージのセグメントについてさまざまなレポート・タイプが混在している場合には、これらのレポート・メッセージは 1 つずつ取得する必要があります。
GMASGA は、他のすべての GM* オプションおよびすべての MO* オプションと組み合わせて指定できます。
デフォルト・オプション: 上記で説明されたオプションがいずれも必要でない場合、以下のオプションを使用できます。- GMNONE
- 指定されるオプションはありません。
この値は、他のオプションが指定されなかったことを示すために使用できます。すべてのオプションはデフォルト値を取ります。 GMNONE は、プログラムの文書化をサポートするために定義します。したがって、このオプションは、他のオプションと同時に使用するためのものではありません。しかしこのオプションの値はゼロのため、他のオプションと同時に使用してもそれを検出できません。
GMOPTフィールドの初期値は GMNWT です。- GMRE1 (1 バイトの文字ストリング)
予約済み。
これは予約フィールドです。 このフィールドの初期値は、ブランク文字です。
GMVERが GMVER2 より小さい場合、このフィールドは無視されます。- GMRL (10 桁の符号付き整数)
戻されたメッセージ・データの長さ (バイト数)。
これは、MQGET 呼び出しの
BUFFERパラメーターによって返されるメッセージ・データの長さ (バイト単位) にキュー・マネージャーが設定する出力フィールドです。 キュー・マネージャーがこの機能をサポートしない場合、GMRLは値 RLUNDF に設定されます。メッセージがエンコードや文字セット間で変換された場合、メッセージ・データのサイズが変わることがあります。 MQGET 呼び出しからの戻り値は、次のようになります。GMRLが RLUNDF でない場合、返されるメッセージ・データのバイト数はGMRLによって指定されます。GMRLの値が RLUNDF の場合、返されるメッセージ・データのバイト数は、通常、BUFLENとDATLENの小さい方の値で示されますが、MQGET 呼び出しが理由コードで完了した場合は、これより小さくなる可能性があります。RC2079これが発生した場合、BUFFERパラメーター内の重要でないバイトはヌルに設定されます。
以下のような特殊値が定義されます。- RLUNDF
- 戻されたデータの長さが定義されていない。
このフィールドの初期値は RLUNDF です。
GMVERが GMVER3 より小さい場合、このフィールドは無視されます。- GMRQN (48 バイトの文字ストリング)
宛先キューの解決された名前。
これは、メッセージが取り出されたキューのローカル名に対してキュー・マネージャーが設定した出力フィールドであり、ローカル・キュー・マネージャーに対して定義されるものです。 次の場合には、キューをオープンするのに使用された名前とは異なります。- 別名キューがオープンされた。この場合、別名が解決したローカル・キューの名前が戻されます。
- モデル・キューがオープンされた。この場合、動的なローカル・キューの名前が戻されます。
このフィールドの長さは LNQN によって指定されます。 このフィールドの初期値は 48 個のブランク文字です。
- GMRS2 (1 バイトの文字ストリング)
予約済み。
これは予約フィールドです。 このフィールドの初期値は、ブランク文字です。
GMVERが GMVER4 より小さい場合、このフィールドは無視されます。- GMSEG (1 バイトの文字ストリング)
取り出されたメッセージに対して、さらにセグメント化が可能かどうかを示すフラグ。
以下の値がどれか 1 つ含まれています。- SEGIHB
- セグメント化できない。
- SEGALW
- セグメント化できます。
これは出力フィールドです。 このフィールドの初期値は SEGIHB です。
GMVERが GMVER2 より小さい場合、このフィールドは無視されます。- GMSG1 (10 桁の符号付き整数)
シグナル。
これは、予約フィールドです。したがって、値に意味はありません。 このフィールドの初期値は 0 です。
- GMSG2 (10 桁の符号付き整数)
シグナル ID。
これは、予約フィールドです。したがって、値に意味はありません。
- GMSID (4 バイトの文字ストリング)
構造体 ID
値は次のものでなければなりません。- GMSIDV
- 読み取りメッセージ・オプション構造体の ID。
このフィールドは常に入力フィールドです。 このフィールドの初期値は GMSIDV です。
- GMSST (1 バイトの文字ストリング)
取り出されたメッセージが論理メッセージの 1 つのセグメントであるかどうかを示すフラグ。
以下の値がどれか 1 つ含まれています。- SSNSEG
- メッセージは 1 つのセグメントではない。
- SSSEG
- メッセージは 1 つのセグメントであるが、論理メッセージの最後のセグメントではない。
- SSLSEG
- メッセージは論理メッセージの最後のセグメントである。
この値は、論理メッセージを構成しているセグメントが 1 つしかない場合にも戻されます。
このフィールドは出力フィールドです。 このフィールドの初期値は SSNSEG です。
GMVERが GMVER2 より小さい場合、このフィールドは無視されます。- GMTOK (16 バイトのビット・ストリング)
メッセージ・トークン。
これは、予約フィールドです。したがって、値に意味はありません。 以下のような特殊値が定義されます。- MTKNON
- メッセージ・トークンなし。
値は、フィールドの長さについては 2 進ゼロです。
このフィールドの長さは LNMTOK によって指定されます。 このフィールドの初期値は MTKNON です。
GMVERが GMVER3 より小さい場合、このフィールドは無視されます。- GMVER (10 桁の符号付き整数)
構造体のバージョン番号。
値は次のいずれかでなければなりません。- GMVER1
- バージョン 1 の読み取りメッセージ・オプション構造体。
- GMVER2
- バージョン 2 の読み取りメッセージ・オプション構造体。
- GMVER3
- バージョン 3 の読み取りメッセージ・オプション構造体。
- GMVER4
- バージョン 4 の読み取りメッセージ・オプション構造体。
これより新しいバージョンの構造体にのみ存在するフィールドは、そのフィールドの説明にその旨記載されています。 以下の定数は、現行バージョンのバージョン番号を指定しています。- GMVERC
- 読み取りメッセージ・オプション構造体の現行バージョン。
このフィールドは常に入力フィールドです。 このフィールドの初期値は GMVER1 です。
- GMVER (10 桁の符号付き整数)
構造体のバージョン番号。
値は次のいずれかでなければなりません。- GMVER1
- バージョン 1 の読み取りメッセージ・オプション構造体。
- GMVER2
- バージョン 2 の読み取りメッセージ・オプション構造体。
- GMVER3
- バージョン 3 の読み取りメッセージ・オプション構造体。
- GMVER4
- バージョン 4 の読み取りメッセージ・オプション構造体。
これより新しいバージョンの構造体にのみ存在するフィールドは、そのフィールドの説明にその旨記載されています。 以下の定数は、現行バージョンのバージョン番号を指定しています。- GMVERC
- 読み取りメッセージ・オプション構造体の現行バージョン。
このフィールドは常に入力フィールドです。 このフィールドの初期値は GMVER1 です。
- GMWI (10 桁の符号付き整数)
待機間隔。
これは、MQGET 呼び出しが適切なメッセージ (つまり、MQGET 呼び出しの
MSGDSCパラメーターで指定された選択基準を満たすメッセージ) の到着を待機するおおよその時間 (ミリ秒単位) です。詳しくは、 MQMD-メッセージ記述子 で説明されているMDMIDフィールドを参照してください。 この時間が経過しても、適切なメッセージが到達しない場合、呼び出しは理由コード RC2033 と CCFAIL で完了します。GMWIは GMWT オプションと共に使用されます。 このオプションが指定されていない場合は無視されます。 これを指定する場合、GMWIはゼロ以上か、または以下の特殊値でなければなりません。- WIULIM
- 無制限の待機間隔。
このフィールドの初期値は 0 です。
初期値
| フィールド名 | 定数の名前 | 定数の値 |
|---|---|---|
GMSID |
GMSIDV | 'GMO¬' |
GMVER |
GMVER1 | 1 |
GMOPT |
GMNWT | 0 |
GMWI |
なし | 0 |
GMSG1 |
なし | 0 |
GMSG2 |
なし | 0 |
GMRQN |
なし | ブランク |
GMMO |
MOMSGI + MOCORI | 3 |
GMGST |
GSNIG | '¬' |
GMSST |
SSNSEG | '¬' |
GMSEG |
SEGIHB | '¬' |
GMRE1 |
なし | '¬' |
GMTOK |
MTKNON | Null |
GMRL |
RLUNDF | -1 |
GMRS2 |
なし | '¬' |
GMMH |
HMNONE | 0 |
- 記号
¬は、単一のブランク文字を表します。
RPG 宣言
D*..1....:....2....:....3....:....4....:....5....:....6....:....7..
D*
D* MQGMO Structure
D*
D* Structure identifier
D GMSID 1 4 INZ('GMO ')
D* Structure version number
D GMVER 5 8I 0 INZ(1)
D* Options that control the action ofMQGET
D GMOPT 9 12I 0 INZ(0)
D* Wait interval
D GMWI 13 16I 0 INZ(0)
D* Signal
D GMSG1 17 20I 0 INZ(0)
D* Signal identifier
D GMSG2 21 24I 0 INZ(0)
D* Resolved name of destination queue
D GMRQN 25 72 INZ
D* Options controlling selection criteriaused for MQGET
D GMMO 73 76I 0 INZ(3)
D* Flag indicating whether messageretrieved is in a group
D GMGST 77 77 INZ(' ')
D* Flag indicating whether messageretrieved is a segment of a
D* logicalmessage
D GMSST 78 78 INZ(' ')
D* Flag indicating whether furthersegmentation is allowed for themessage
D* retrieved
D GMSEG 79 79 INZ(' ')
D* Reserved
D GMRE1 80 80 INZ
D* Message token
D GMTOK 81 96 INZ(X'00000000000000-
D 000000000000000000')
D* Length of message data returned(bytes)
D GMRL 97 100I 0 INZ(-1)
D* Reserved
D GMRS2 101 104I 0 INZ(0)
D* Message handle
D GMMH 105 112I 0 INZ(0)