![[IBM i]](ngibmi.gif)
IBM i での MQPMO (メッセージ書き込みオプション)
MQPMO 構造体により、アプリケーションは、メッセージがキューに配置される方法およびトピックに公開される方法を制御するオプションを指定できます。
概要
- 目的
- この構造体は、MQPUT および MQPUT1 呼び出しの入出力パラメーターです。
- バージョン
- MQPMO の現行バージョンは PMVER2 です。 これより新しいバージョンの構造体にのみ存在するフィールドについては、そのフィールドの説明にその旨を記載しています。
提供されている COPY ファイルには、環境でサポートされている最新バージョンの MQPMO が含まれていますが、
PMVERフィールドの初期値は PMVER1 に設定されています。 version-1 構造体に存在しないフィールドを使用するには、アプリケーションで、PMVERフィールドを必要なバージョンのバージョン番号に設定する必要があります。 - 文字セットとエンコード
- MQPMO 内のデータは、CodedCharSetIdキュー・マネージャー属性で指定された文字セットと ENNAT で指定されたローカル・キュー・マネージャーのエンコードで記述されていなければなりません。 ただし、アプリケーションが IBM® MQ クライアントとして実行されている場合、構造体はクライアントの文字セットとエンコードになっている必要があります。
フィールド
MQPMO 構造体には、以下のフィールドが含まれます。フィールドはアルファベット順に説明されています。
- PMCT (10 桁の符号付き整数)
入力キューのオブジェクト・ハンドル。
PMPASI または PMPASA が指定されている場合、このフィールドに入るのは、書き込まれるメッセージに関連付けるコンテキスト情報が取られる元の入力キュー・ハンドルです。
PMPASI と PMPASA が指定されていない場合、このフィールドは無視されます。
これは入力フィールドです。 このフィールドの初期値は
0です。- PMIDC (10 桁の符号付き整数)
送信できなかったメッセージの数。
これは配布リスト中のキューに送信できなかったメッセージの数です。 この数にはオープンに失敗したキューの数、およびオープンには成功したが PUT 操作に失敗したキューの数も含まれます。 このフィールドは、配布リストにはない単一のキューにメッセージを書き込むときも設定されます。
注: このフィールドは、MQPUT または MQPUT1 呼び出しの CMPCOD パラメーターが CCOK または CCWARN の場合にのみ設定されます。 CMPCOD パラメーターが CCFAIL の場合は設定されません。これは出力フィールドです。 このフィールドの初期値は 0 です。
PMVERが PMVER2 より小さい場合、このフィールドは設定されません。- PMKDC (10 桁の符号付き整数)
ローカル・キューへの送信が成功したメッセージの数。
これは、現在の MQPUT 呼び出しまたは MQPUT1 呼び出しがローカル・キューである配布リスト中のキューへの送信に成功したメッセージの数です。 この数にはリモート・キューを解決するキューへ送信されたメッセージの数は含まれません。ローカル伝送キューを使用して最初にメッセージを格納する場合でも同様です。 このフィールドは、配布リストにはない単一のキューにメッセージを書き込むときも設定されます。
これは出力フィールドです。 このフィールドの初期値は 0 です。
PMVERが PMVER2 より小さい場合、このフィールドは設定されません。- PMOPT (10 桁の符号付き整数)
MQPUT および MQPUT1 のアクションを制御するオプション。
以下のいずれかを指定しても、または何も指定しなくても構いません。 2 つ以上指定が必要な場合は、それらの値を加算します (同じ定数を複数回加算しないでください)。 有効でない組み合わせについては、注記されています。それ以外の組み合わせは有効です。
パブリッシュ・オプション: 以下のオプションは、メッセージをトピックにパブリッシュする方法を制御します。- PMSRTO
このパブリケーションの MQMD の MDRQ および MDRM フィールドに入力される情報はサブスクライバーに渡されません。 このオプションを、'ReplyToQ,必要とするレポート・オプションとともに使用すると、呼び出しは以下のように失敗するRC2027.
- PMRET
送信されたパブリケーションがキュー・マネージャーによって保存されます。 これにより、サブスクライバーはこのパブリケーションが公開された後、MQSUBRQ 呼び出しを使用することにより、そのコピーを要求することができます。 さらに、このパブリケーションが作成された後に、パブリケーションをそのサブスクリプションを行うアプリケーションに送信する (オプション SONEWP を使用して送信しないように選択した場合を除く) こともできます。 保存されたパブリケーションがアプリケーションに送られると、そのパブリケーションの mq.IsRetained メッセージ・プロパティーによって示されます。
トピック・ツリーの各ノードに保存できるパブリケーションは 1 つだけです。 つまり、他のすべてのアプリケーションによってパブリッシュされた、このトピック用の保存パブリケーションが既に存在する場合、このパブリケーションが置き換えてしまいます。 そのため、同じトピックに関するメッセージを保存するパブリッシャーを複数持つことは避けたほうがよいでしょう。
保存パブリケーションがサブスクライバーによって要求される場合、使用されるサブスクリプションのトピックにワイルドカードが含まれていることがあります。その場合、(トピック・ツリーのさまざまなノードの) いくつかの保存パブリケーションがマッチングする可能性があり、複数のパブリケーションが要求側のアプリケーションに送られる場合があります。 詳しくは、 MQSUBRQ-サブスクリプション要求 呼び出しの説明を参照してください。
このオプションが使用され、パブリケーションを保持できない場合、メッセージはパブリッシュされず、呼び出しは失敗します。RC2479.
同期点オプション: 以下のオプションは、作業単位内での MQPUT または MQPUT1 呼び出しの実行に関連したオプションです。- PMSYP
- 同期点制御を持つ書き込みメッセージ。
この要求は、通常の作業単位プロトコルの中で操作することです。 メッセージは、作業単位がコミットされるまで、作業単位の外側には表示されません。 作業単位がバックアウトされると、メッセージは除去されます。
このオプションおよび PMNSYP が指定されていない場合、書き込み要求は作業単位内にありません。
PMSYP と PMNSYP を同時に指定しないでください。
- PMNSYP
- 同期点制御を持たない書き込みメッセージ。
この要求は、通常の作業単位プロトコルの外部で動作することになります。 メッセージは即時に使用可能になり、作業単位をバックアウトしても削除できません。
このオプションおよび PMSYP が指定されていない場合、書き込み要求は作業単位内にありません。
PMNSYP と PMSYP を同時に指定しないでください。
メッセージ ID と相関 ID のオプション: 次のオプションは、新しいメッセージ ID または相関 ID を生成することを キュー・マネージャーに要求します。- PMNMID
- 新しいメッセージ ID を生成します。
このオプションを指定すると、キュー・マネージャーは MQMD の
MDMIDフィールドの内容を新しいメッセージ ID に置き換えます。 このメッセージ ID はメッセージと共に送信され、MQPUT 呼び出しまたは MQPUT1 呼び出しからの出力時にアプリケーションに戻ります。このオプションは、メッセージが配布リストに書き込まれるときにも指定できます。詳細については、MQPMR 構造体の
PRMIDフィールドの説明を参照してください。このオプションを使用すると、各 MQPUT または MQPUT1 呼び出しの前に
MDMIDフィールドを MINONE にリセットする必要がなくなります。 - PMNCID
- 新しい相関 ID を生成します。
このオプションを指定すると、キュー・マネージャーは MQMD の
MDCIDフィールドの内容を新しい相関 ID に置き換えます。 この相関 ID はメッセージと共に送信され、MQPUT 呼び出しまたは MQPUT1 呼び出しからの出力時にアプリケーションに戻ります。このオプションは、メッセージが配布リストに書き込まれるときにも指定できます。詳細については、MQPMR 構造体の
PRCIDフィールドの説明を参照してください。PMNCID は、アプリケーションに固有の相関 ID が必要な状況で役に立ちます。
グループおよびセグメントのオプション: 以下は、論理メッセージのグループおよびセグメント内のメッセージの処理に関するオプションです。 これらの定義を理解しておくと、オプションを把握するのに役に立ちます。- 物理メッセージ
- このメッセージは、キューに入れたりキューから除去できる最小単位の情報です。多くの場合、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 個を超えます。
- PMLOGO
- グループ内のメッセージおよび論理メッセージのセグメントが、論理順序で書き込まれます。
このオプションは、キュー・マネージャーに、アプリケーションがグループ内のメッセージと論理メッセージのセグメントを書き込む方法を指示します。 このオプションは、MQPUT 呼び出しでのみ指定できます。MQPUT1 呼び出しでは無効です。
PMLOGO が指定されると、アプリケーションは MQPUT 呼び出しを続けて使用して、以下のことを行います。- 各論理メッセージ内のセグメントを、0 からセグメント・オフセットの小さい順に間を空けずに書き込む。
- 論理メッセージ内のセグメントをすべて書き込んでから、その次の論理メッセージのセグメントを書き込みます。
- 各メッセージ・グループ内の論理メッセージを、1 からメッセージ順序番号の小さい順に間を空けずに書き込む。
- メッセージ・グループ内の論理メッセージをすべて書き込んでから、その次のメッセージ・グループの論理メッセージを書き込みます。
アプリケーションはキュー・マネージャーにグループ内のメッセージと論理メッセージのセグメントを書き込む方法を指示したため、MQPUT を呼び出すたびにグループの情報やセグメントの情報を維持および更新する必要はありません。これについてはキュー・マネージャーが代わりに行います。 具体的には、キュー・マネージャーが
MDGID、MDSEQ、およびMDOFFフィールドを適切な値に設定するため、アプリケーションが MQMD 内のこれらのフィールドを設定する必要がないことを意味します。 アプリケーションが設定する必要があるのは、MQMD 内のMDMFLフィールドのみです。これは、メッセージがグループに属しているか、論理メッセージのセグメントであるかを示し、グループ内の最後のメッセージまたは論理メッセージの最後のセグメントを示します。メッセージ・グループまたは論理メッセージが開始されると、後続の MQPUT 呼び出しでは、MQMD 内の
MDMFLに適切な MF* フラグを指定する必要があります。 終了していないメッセージ・グループがあるときにアプリケーションがグループ内にないメッセージを書き込もうとした場合、または終了していない論理メッセージがあるときにセグメントではないメッセージを書き込もうとした場合、呼び出しは失敗し、理由コードが戻ります。RC2241またはRC2242、必要に応じて。 ただし、キュー・マネージャーは現在のメッセージ・グループまたは現在の論理メッセージの情報を保存し、アプリケーションはメッセージを送信してこれらを終了します (アプリケーション・メッセージ・データなしも可能です)。このメッセージでは状況に応じて MFLMIG または MFLSEG を指定します。その後 MQPUT 呼び出しを再発行して、グループまたはセグメントにないメッセージを書き込みます。表 1 に、有効なオプションとフラグの組み合わせ、および各ケースでキュー・マネージャーが使用するMDGID、MDSEQ、およびMDOFFの各フィールドの値を示します。 この表に示されていないオプションとフラグの組み合わせは無効です。 この表の列の意味は、次のとおりです。- LOG ORD
- PMLOGO オプションが呼び出しで指定されているかどうかを示します。
- MIG
- MFMIG または MFLMIG オプションが呼び出しで指定されているかどうかを示します。
- SEG
- MFSEG または MFLSEG オプションが呼び出しで指定されているかどうかを示します。
- SEG OK
- MFSEGA オプションが呼び出しで指定されているかどうかを示します。
- Cur grp
- 現行のメッセージ・グループが呼び出しの前に存在するかどうかを示します。
- Cur log msg
- 現行の論理メッセージが呼び出しの前に存在するかどうかを示します。
- その他の列
- キュー・マネージャーが使用する値を示しています。 「前の」という表現は、キュー・ハンドルに対して前のメッセージのフィールドで使用された値を示します。
- PMRLOC
- MQPMO 構造体の PMRQN に、メッセージを実際に書き込むローカル・キューの名前を設定する必要があることを指定します。 ResolvedQMgrName には、同様にローカル・キューをホストするローカル・キュー・マネージャーの名前が入ります。 これが意味することについては OORLOQ を参照してください。 キューへの書き込みが許可されている場合、ユーザーはこのフラグを MQPUT 呼び出しで指定するために必要な許可を持っています。 特殊権限は必要ありません。
表 1. 論理メッセージのグループおよびセグメントに関連した MQPUT オプション 指定するオプション 呼び出しの前のグループおよび論理メッセージの状況 キュー・マネージャーが使用する値 LOG ORD MIG SEG SEG OK Cur grp Cur log msg MDGIDMDSEQMDOFFはい いいえ いいえ いいえ いいえ いいえ GINONE 1 0 はい いいえ いいえ はい いいえ いいえ 新しいグループ ID 1 0 はい いいえ はい はい/いいえ いいえ いいえ 新しいグループ ID 1 0 はい いいえ はい はい/いいえ いいえ はい 前のグループ ID 1 前のオフセット + 前のセグメント長 はい はい はい/いいえ はい/いいえ いいえ いいえ 新しいグループ ID 1 0 はい はい はい/いいえ はい/いいえ はい いいえ 前のグループ ID 前の順序番号 + 1 0 はい はい はい はい/いいえ はい はい 前のグループ ID 前の順序番号 前のオフセット + 前のセグメント長 いいえ いいえ いいえ いいえ はい/いいえ はい/いいえ GINONE 1 0 いいえ いいえ いいえ はい はい/いいえ はい/いいえ GINONE の場合は新しいグループ ID、その他はフィールド内の値 1 0 いいえ いいえ はい はい/いいえ はい/いいえ はい/いいえ GINONE の場合は新しいグループ ID、その他はフィールド内の値 1 フィールド内の値 いいえ はい いいえ はい/いいえ はい/いいえ はい/いいえ GINONE の場合は新しいグループ ID、その他はフィールド内の値 フィールド内の値 0 いいえ はい はい はい/いいえ はい/いいえ はい/いいえ GINONE の場合は新しいグループ ID、その他はフィールド内の値 フィールド内の値 フィールド内の値 注:- MQPUT1 呼び出しでは、PMLOGO は無効です。
MDMIDフィールドについては、PMNMID または MINONE が指定されている場合、キュー・マネージャーは新しいメッセージ ID を生成し、それ以外の場合はフィールドの値を使用します。MDCIDフィールドについては、PMNCID が指定されている場合はキュー・マネージャーが新しい相関 ID を生成し、それ以外の場合はフィールドの値を使用します。
PMLOGO が指定されている場合、キュー・マネージャーは、グループ内のすべてのメッセージと論理メッセージ内のセグメントが MQMD の
MDPERフィールドに同じ値で書き込まれることを必要とします。つまり、すべてが持続であるか、またはすべてが非持続でなければなりません。 この条件が満たされない場合、MQPUT 呼び出しは失敗し、理由コードが戻ります。RC2185.PMLOGO オプションが作業単位に及ぼす影響は、以下のとおりです。- グループ内または論理メッセージ内の最初の物理メッセージが 1 つの作業単位に書き込まれた場合、そのグループ内または論理メッセージ内の他の物理メッセージも、同じキュー・ハンドルが使用されていれば、すべて 1 つの作業単位に書き込む必要があります。 ただし、これらは同じ作業単位内で書き込む必要はありません。 これにより、複数の物理メッセージから成る 1 つのメッセージ・グループまたは論理メッセージを、キュー・ハンドルに対する 2 つ以上の連続した作業単位にまたがって分割できます。
- グループ内または論理メッセージ内の最初の物理メッセージが 1 つの作業単位に書き込まれていない場合、同じキュー・ハンドルが使用されていれば、そのグループ内または論理メッセージ内の他の物理メッセージはどれも 1 つの作業単位に書き込むことができません。
PMLOGO を指定した場合には、MQPUT 呼び出しで供給された MQMD が、MDVER2 より下位であってはなりません。 この条件が満たされない場合、呼び出しは失敗し、理由コードが出されます。RC2257.
PMLOGO を指定しないと、グループ内のメッセージおよび論理メッセージ内のセグメントは任意の順序で書き込まれます。また、完全なメッセージ・グループまたは完全な論理メッセージを書き込む必要はありません。
MDGID、MDSEQ、MDOFF、およびMDMFLフィールドが適切な値を持つようにするのは、アプリケーションの責任です。この手法を用いると、システム障害が発生した後に、メッセージ・グループまたは論理メッセージを途中から再開することができます。 システムが再始動すると、アプリケーションは
MDGID、MDSEQ、MDOFF、MDMFL、およびMDPERの各フィールドを適切な値に設定し、PMSYP または PMNSYP を必要に応じて設定して、PMLOGO を指定せずに MQPUT 呼び出しを発行することができます。 この呼び出しが成功した場合、キュー・マネージャーはグループとセグメントの情報を保存し、そのキュー・ハンドルを使用する後続の MQPUT 呼び出しで通常どおり PMLOGO を指定できます。MQPUT 呼び出しのためにキュー・マネージャーが保持しているグループおよびセグメント情報は、MQGET 呼び出しのためにキュー・マネージャーが保持しているグループおよびセグメント情報とは異なります。
キュー・ハンドルが指定されている場合には、アプリケーションでは、PMLOGO を指定した MQPUT 呼び出しと PMLOGO を指定していない MQPUT 呼び出しを自由に組み合わせて使用できます。ただし、以下の点に注意してください。- PMLOGO を指定していない場合は、MQPUT 呼び出しが成功するたびに、キュー・マネージャーが、キュー・ハンドルのグループおよびセグメント情報を、アプリケーションによって指定された値に設定します。これにより、キュー・ハンドルに対してキュー・マネージャーで保持されていた既存のグループおよびセグメント情報が置換されます。
- PMLOGO を指定していない場合、現行のメッセージ・グループまたは論理メッセージがあれば、呼び出しは失敗しません。ただし、CCWARN 完了コードで呼び出しが成功する場合もあります。 表 2 に、発生する可能性のあるさまざまなケースを示します。 これらの場合に、完了コードが CCOK 以外であれば、理由コードは以下のいずれか (該当するもの) になります。
- RC2241
- RC2242
- RC2185
- RC2245
注: キュー・マネージャーは、 MQPUT1 呼び出しのグループおよびセグメント情報を検査しません。
表 2. グループおよびセグメント情報と整合性のない MQPUT または MQCLOSE 呼び出しの結果 現行の呼び出し 直前の呼び出しは PMLOGO を指定している MQPUT だった 直前の呼び出しは PMLOGO を指定していない MQPUT だった PMLOGO を指定している MQPUT CCFAIL CCFAIL PMLOGO を指定していない MQPUT CCWARN CCOK 終了していないグループまたは論理メッセージを指定している MQCLOSE CCWARN CCOK 単にメッセージおよびセグメントを論理順序で書き込むアプリケーションでは、最も簡単に使える PMLOGO を指定するようにしてください。 このオプションを指定すると、キュー・マネージャーがグループおよびセグメント情報を管理するので、アプリケーションでこの情報を管理する必要はなくなります。 しかし、PMLOGO オプションで提供される制御以外の制御が必要となる 特殊なアプリケーションもあります。このようなアプリケーションでは、このオプションを指定しないようにしてください。 これを行う場合、アプリケーションは、それぞれの MQPUT または MQPUT1 呼び出しの前に、MQMD 内の
MDGID、MDSEQ、MDOFF、およびMDMFLフィールドが正しく設定されていることを確認する必要があります。例えば、受信した物理メッセージがグループに属していなくても、また論理メッセージのセグメントでなくても、そのメッセージを転送するアプリケーションでは、PMLOGO を指定しないようにしてください。 これには次の 2 つの理由があります。- メッセージが検索されて順番に書き込まれる場合、PMLOGO を指定するとメッセージに新しいグループ ID が割り当てられ、これによりメッセージの発信元がメッセージ・グループから得られた応答メッセージまたはレポート・メッセージとの相関をとることが困難になります。場合によっては相関をとることが不可能になります。
- 送信側のキュー・マネージャーと受信側のキュー・マネージャーの間にパスが複数あるような複雑なネットワークの場合には、物理メッセージが正しくない順序で到達することがあります。 PMLOGO およびこれに対応する MQGET 呼び出し上の GMLOGO を指定しないようにすると、転送側のアプリケーションでは、論理順序で次にあるメッセージが到着するのを待たなくても、それぞれの物理メッセージの到着と同時にそのメッセージを取り出し、転送することができます。
グループ内のメッセージまたは論理メッセージのセグメントに関するレポート・メッセージを生成するアプリケーションでも、レポート・メッセージを書き込むときには PMLOGO を指定してはなりません。
PMLOGO は、他のすべての PM* オプションと組み合わせて指定できます。
コンテキスト・オプション: 以下のオプションは、メッセージ・コンテキストの処理を制御します。- PMNOC
- このメッセージに関連するコンテキストはありません。コンテキストが存在しないことを示すために、識別コンテキストと起点コンテキストの両方が設定されます。 つまり、MQMD のコンテキスト・フィールドは次のように設定されます。
- 文字フィールドの場合はブランク
- バイト・フィールドの場合はヌル
- 数値フィールドの場合はゼロ
- PMDEFC
- デフォルトのコンテキストを使用します。
識別および発信元の両方のデフォルトのコンテキスト情報がメッセージに関連付けられます。 キュー・マネージャーは、メッセージ記述子のコンテキスト・フィールドを以下のように設定します。
メッセージ・コンテキストについて詳しくは、 メッセージ・コンテキスト および コンテキスト情報の制御を参照してください。MQMD のフィールド 使用される値 MDUID環境から決定できる場合はその値。それ以外のときは、ブランクに設定される。 MDACC可能な場合は、環境から判別される。判別できない場合は ACNONE に設定。 MDAIDブランクに設定されます。 MDPAT環境から決定される。 MDPAN環境から決定できる場合はその値。それ以外のときは、ブランクに設定される。 MDPDメッセージが書き込まれる日付に設定。 MDPTメッセージが書き込まれる時刻に設定。 MDAODブランクに設定されます。 これは、コンテキスト・オプションが設定されていないときのデフォルト・アクションです。
- PMPASI
- 入力キュー・ハンドルから識別コンテキストを渡します。
メッセージには、識別コンテキストに関連付けられているコンテキスト情報が含まれます。 識別コンテキストは、
PMCTフィールドで指定されたキュー・ハンドルから取得されます。 起点コンテキスト情報は、PMDEFC の場合と同様にキュー・マネージャーによって生成されます (値については上記の表を参照)。 メッセージ・コンテキストについて詳しくは、 メッセージ・コンテキスト および コンテキスト情報の制御を参照してください。MQPUT 呼び出しの場合、キューは OOPASI オプション (またはそれを暗黙的に指定するオプション) を指定してオープンされていることが必要です。 MQPUT1 呼び出しの場合、OOPASI オプションを指定した MQOPEN 呼び出しの場合と同様の許可検査が行われます。
- PMPASA
- 入力キュー・ハンドルからすべてのコンテキストを渡します。
メッセージには、識別コンテキストに関連付けられているコンテキスト情報が含まれます。 識別コンテキストと起点コンテキストの両方が、
PMCTフィールドに指定されたキュー・ハンドルから取得されます。 メッセージ・コンテキストについて詳しくは、 メッセージ・コンテキスト および コンテキスト情報の制御を参照してください。MQPUT 呼び出しの場合、キューは OOPASA オプション (またはそれを暗黙的に指定するオプション) を指定してオープンされていることが必要です。 MQPUT1 呼び出しの場合、OOPASA オプションを指定した MQOPEN 呼び出しの場合と同様の許可検査が行われます。
- PMSETI
- アプリケーションからすべての識別コンテキストを設定します。
メッセージには、識別コンテキストに関連付けられているコンテキスト情報が含まれます。 アプリケーションでは、MQMD 構造体の識別コンテキストを指定します。 起点コンテキスト情報は、PMDEFC の場合と同様にキュー・マネージャーによって生成されます (値については上記の表を参照)。 メッセージ・コンテキストについて詳しくは、 メッセージ・コンテキスト および コンテキスト情報の制御を参照してください。
MQPUT 呼び出しの場合、キューは OOSETI オプション (またはそれを暗黙的に指定するオプション) を指定してオープンされていることが必要です。 MQPUT1 呼び出しの場合、OOSETI オプションを指定した MQOPEN 呼び出しの場合と同様の許可検査が行われます。
- PMSETA
- アプリケーションから、すべてのコンテキストを設定します。
メッセージには、識別コンテキストに関連付けられているコンテキスト情報が含まれます。 アプリケーションでは、MQMD 構造体の識別コンテキストと起点コンテキストを指定します。 メッセージ・コンテキストについて詳しくは、 メッセージ・コンテキスト および コンテキスト情報の制御を参照してください。
MQPUT 呼び出しの場合、キューは OOSETA オプションを指定してオープンされていることが必要です。 MQPUT1 呼び出しの場合、OOSETA オプションを指定した MQOPEN 呼び出しの場合と同様の許可検査が行われます。
PM* コンテキスト・オプションのうち、1 つのみを指定できます。 このオプションを指定しないと、PMDEFC を指定したと見なされます。
応答タイプを書き込みます。 以下のオプションは、MQPUT または MQPUT1 呼び出しに戻される応答を制御します。 これらのオプションのどちらか 1 つだけを指定できます。 PMARES および PMSRES を指定しない場合は、PMRASQ または PMRAST を指定したものと見なされます。- PMARES
PMARES オプションは、アプリケーションがキュー・マネージャーによる呼び出しの完了を待機せずに、MQPUT または MQPUT1 操作を完了するように要求します。 このオプションを使用すると、メッセージング・パフォーマンスが改善される可能性があります。クライアント・バインディングを使用するアプリケーションの場合は特にそうです。 アプリケーションは、MQSTAT verb を使って、前の非同期呼び出し中にエラーが発生したかどうかを定期的に検査することができます。
このオプションの場合、MQMD の以下のフィールドだけに値が入れられることが保証されます。- MDAID
- MDPAT
- MDPAN
- MDAOD
- PMSRES
- この値を MQPMO 構造体の書き込みオプションに指定すると、MQPUT または MQPUT1 操作は常に同期して実行されます。 操作が正常に行われると、MQMD および MQPMO のすべてのフィールドに値が入れられます。 これは、同期応答がキューまたはトピック・オブジェクトで定義されるデフォルトの書き込み応答の値とは関係なくするためのものです。
- PMRASQ
- MQPUT 呼び出しでこの値が指定されている場合、使用される書き込み応答タイプは、アプリケーションによって開かれたときにキューで指定された DEFPRESP 値からとられます。 クライアント・アプリケーションが IBM WebSphere® MQ 7.0より前のレベルのキュー・マネージャーに接続されている場合、PMSRES が指定された場合と同様に動作します。
- PMRAST
- これは、トピック・オブジェクトで使用するための PMRASQ と同義語です。
その他のオプション: 以下のオプションは、許可検査を制御するほか、キュー・マネージャーが静止しているときに発生するイベントを制御します。- PMALTU
- 指定されたユーザー ID を用いて妥当性検査を行います。
これは、MQPUT1 呼び出しのOBJDSCパラメーターの
ODAUフィールドに、キューにメッセージを書き込む権限の妥当性検査に使用されるユーザー ID が含まれていることを示します。 呼び出しが成功するのは、このODAUが、指定されたオプションを使用してキューをオープンすることを許可されている場合のみです。これは、アプリケーションを実行しているユーザー ID が許可されているかどうかには関係ありません。 (ただし、これは、指定されたコンテキスト・オプションには適用されず、検査は常に、アプリケーションが実行されているユーザー ID に対して行われます。)このオプションは、MQPUT1 呼び出しの場合にのみ有効です。
- PMFIQ
- キュー・マネージャーが静止している場合は、失敗します。
このオプションを指定すると、キュー・マネージャーが静止状態にある場合、MQPUT または MQPUT1 呼び出しが強制的に失敗します。
呼び出しは、理由コードとともに完了コード CCFAIL を戻します。RC2161.
デフォルト・オプション: 上記のオプションのいずれも必要がない場合は、以下のオプションを使用することができます。- PMNONE
- 指定されるオプションはありません。
この値は、他のオプションが指定されなかったことを示すために使用できます。すべてのオプションはデフォルト値を取ります。 PMNONE は、プログラムの文書化をサポートするために定義します。したがって、このオプションは、他のオプションと同時に使用するためのものではありません。しかしこのオプションの値はゼロのため、他のオプションと同時に使用してもそれを検出できません。
これは入力フィールドです。
PMOPTフィールドの初期値は PMNONE です。- PMPRF (10 桁の符号付き整数)
どの MQPMR フィールドが存在しているかを示すフラグ。
このフィールドには、アプリケーションが提供する書き込みメッセージ・レコードにどの MQPMR フィールドが存在するかを示すように設定しなければならないフラグが入っています。
PMPRFは、メッセージが配布リストに書き込まれている間だけ使用されます。PMRECがゼロの場合、またはPMPROとPMPRPの両方がゼロの場合、このフィールドは無視されます。書き込みメッセージ・レコードにあるフィールドについては、キュー・マネージャーは宛先ごとに対応する書き込みメッセージ・レコードのフィールドにある値を使用します。 書き込みメッセージ・レコードにないフィールドについては、キュー・マネージャーは MQMD 構造体にある値を使用します。
以下のフラグを 1 つ以上指定して、書き込みメッセージ・レコードにどのフィールドがあるのか表示できます。- PFMID
- メッセージ ID フィールドがある。
- PFCID
- 相関 ID フィールドがある。
- PFGID
- グループ ID フィールドがある。
- PFFB
- フィードバック・フィールドがある。
- PFACC
- 会計トークン・フィールドがある。
このフラグを指定する場合は、
PMOPTフィールドに PMSETI または PMSETA のいずれかを指定する必要があります。この条件が満たされない場合、呼び出しは失敗し、理由コードが戻ります。RC2158.
MQPMR フィールドがない場合は、以下を指定できます。- PFNONE
- 書き込みメッセージ・レコードのフィールドがない。
この値を指定する場合は、
PMRECをゼロにするか、PMPROとPMPRPの両方をゼロにする必要があります。PFNONE は、プログラムの文書化を支援するために定義します。 この定数は他の定数と組み合わせて使用する実数ではありません。ただし、この定数の値はゼロと等価なので、ほかの実数と組み合わせて使用しても、エラーとして検出されることはありません。
PMPRFに無効なフラグが含まれている場合、または書き込みメッセージ・レコードが提供されているが、PMPRFの値が PFNONE である場合、呼び出しは失敗し、理由コードが戻ります。RC2158.これは入力フィールドです。 このフィールドの初期値は PFNONE です。
PMVERが PMVER2 より小さい場合、このフィールドは無視されます。- PMPRO (10 桁の符号付き整数)
MQPMO の先頭から最初の書き込みメッセージ・レコードのオフセット。
これは、MQPMO 構造体の先頭から最初の MQPMR 書き込みメッセージ・レコードのオフセットをバイト数で表したものです。 オフセットの値は、正負どちらの値にもなります。
PMPROは、メッセージが配布リストに書き込まれている間だけ使用されます。PMRECがゼロの場合、このフィールドは無視されます。メッセージが配布リストに書き込まれている間、1 つまたは複数の MQPMR 書き込みメッセージ・レコードの配列は、そのメッセージに特定の特性を、宛先に応じて個別に指定するために提供されます。ここで言う特性とは、以下のとおりです。- メッセージ ID
- 相関 ID
- グループ ID
- フィードバック値
- accounting token
上記のプロパティーをすべて指定する必要はありません。しかし、どのサブセットを選択する場合でも、フィールドは正しい順序で指定する必要があります。 詳細については、MQPMR 構造体を参照してください。
配布リストをオープンすると、通常は MQOD で指定されたオブジェクト・レコードと同じ数のメッセージ・レコードがあります。したがって、各書き込みメッセージ・レコードは、対応するオブジェクト・レコードで識別されたキューにメッセージ・プロパティーを供給します。 オープンに失敗した配布リストのキューでは、割り当てられた書き込みメッセージ・レコードが配列の該当する位置にまだ残っています。ただし、この場合メッセージ・プロパティーは無視されます。
書き込みメッセージ・レコードの数は、オブジェクト・レコードの数とは異なる可能性があります。 メッセージ・レコードがオブジェクト・レコードよりも少ない場合は、書き込みメッセージ・レコードのない宛先に対するメッセージ・プロパティーは、メッセージ記述子 MQMD の対応するフィールドから取得します。 書き込みメッセージ・レコードがオブジェクト・レコードよりも多い場合は、超過分は使用されません (それでも、超過分へのアクセスは可能です)。 書き込みメッセージ・レコードはオプションですが、指定する場合は、メッセージ・レコードの
PMRECが必要です。書き込みメッセージ・レコードは、
PMPROでオフセットを指定するか、PMPRPでアドレスを指定することによって、MQOD のオブジェクト・レコードと同様の方法で提供できます。 これを行う方法について詳しくは、 IBM iで説明されているODOROフィールドを参照してください。PMPROとPMPRPのいずれか 1 つしか使用できません。呼び出しは失敗し、理由コードが返されます。RC2159両方ともゼロ以外の場合。これは入力フィールドです。 このフィールドの初期値は 0 です。
PMVERが PMVER2 より小さい場合、このフィールドは無視されます。- PMPRP (ポインター)
最初の書き込みメッセージ・レコードのアドレス。
これは、最初の MQPMR 書き込みメッセージのアドレスです。
PMPRPは、メッセージが配布リストに書き込まれている間だけ使用されます。PMRECがゼロの場合、このフィールドは無視されます。PMPRPまたはPMPROのいずれかを使用して、書き込みメッセージ・レコードを指定できますが、両方を指定することはできません。詳しくは、PMRRO フィールドの説明を参照してください。PMPRPを使用しない場合は、ヌル・ポインターまたはヌル・バイトに設定する必要があります。これは入力フィールドです。 このフィールドの初期値は、ヌル・ポインターです。
PMVERが PMVER2 より小さい場合、このフィールドは無視されます。- PMREC (10 桁の符号付き整数)
書き込みメッセージ・レコードの数または存在する応答レコードの数。
これは、アプリケーションが提供した MQPMR 書き込みメッセージ・レコードまたは MQRR 応答レコードの数です。 この数はメッセージが配布リストに書き込まれる場合に限り、ゼロを超えることができます。 書き込みメッセージ・レコードおよび応答レコードはオプションです。アプリケーションはレコードを提供する必要はありませんが、いずれか一方のタイプのレコードだけを提供することができます。 ただし、アプリケーションが両方のタイプのレコードを提供する場合は、各タイプの
PMRECレコードを提供する必要があります。PMRECの値は、配布リスト内の宛先の数と同じである必要はありません。 提供されるレコードの数が多すぎる場合、超過分は使用されません。提供されるレコードの数が少なすぎる場合、書き込みメッセージ・レコードのない宛先のメッセージ・プロパティーにはデフォルト値が使用されます (このトピックで後述するPMPROを参照してください)。PMRECがゼロより小さいか、またはゼロより大きいが、メッセージが配布リストに書き込まれていない場合、呼び出しは失敗し、理由コードが戻ります。RC2154.これは入力フィールドです。 このフィールドの初期値は 0 です。
PMVERが PMVER2 より小さい場合、このフィールドは無視されます。- PMRMN (48 バイトの文字ストリング)
宛先キュー・マネージャーの解決された名前。
これは、ローカル・キュー・マネージャーが名前の解決を実行した後の宛先キュー・マネージャーの名前です。 戻される名前は、
PMRQNによって識別されるキューを所有するキュー・マネージャーの名前であり、ローカル・キュー・マネージャーの名前にすることができます。PMRQNが、ローカル・キュー・マネージャーが属するキュー共有グループが所有する共有キューである場合、PMRMNはそのキュー共有グループの名前です。 キューが他のキュー共有グループによって所有されている場合、PMRQNは、キュー共有グループの名前またはキュー共有グループのメンバーであるキュー・マネージャーの名前にすることができます (返される値の性質は、ローカル・キュー・マネージャーに存在するキュー定義によって異なります)。非ブランクの値が戻されるのは、オブジェクトが単一キューである場合のみです。オブジェクトが配布リストまたはトピックである場合、戻される値は未定義です。
これは出力フィールドです。 このフィールドの長さは LNQMN によって指定されます。 このフィールドの初期値は 48 個のブランク文字です。
- PMRQN (48 バイトの文字ストリング)
宛先キューの解決された名前。
これは、ローカル・キューが名前の解決を実行した後の宛先キュー・マネージャーの名前です。 戻される名前は、
PMRMNによって識別されるキュー・マネージャー上に存在するキューの名前です。非ブランクの値が戻されるのは、オブジェクトが単一キューである場合のみです。オブジェクトが配布リストまたはトピックである場合、戻される値は未定義です。
これは出力フィールドです。 このフィールドの長さは LNQN によって指定されます。 このフィールドの初期値は 48 個のブランク文字です。
- PMRRO (10 桁の符号付き整数)
MQPMO の先頭から最初の応答レコードのオフセット。
これは、MQPMO 構造体の先頭から最初の MQRR 応答レコードのオフセットをバイト数で表したものです。 オフセットの値は、正負どちらの値にもなります。
PMRROは、メッセージが配布リストに書き込まれている間だけ使用されます。PMRECがゼロの場合、このフィールドは無視されます。メッセージが配布リストに書き込まれるときに、メッセージが正常に送信されなかったキュー (MQRR の
RRCCフィールド)、および各障害の理由 (MQRR のRRREAフィールド) を識別するために、1 つ以上の MQRR 応答レコードの配列を提供できます。 メッセージの送信が失敗する原因としては、キューのオープン失敗や PUT 操作の失敗などが考えられます。 キュー・マネージャーが応答コードを設定するのは、呼び出しの結果が一定でない場合のみです。結果が一定でない場合とは、送信できたメッセージと送信できなかったメッセージが混在している場合や、どのメッセージの送信も失敗したが、失敗した理由がそれぞれ異なる場合などです。後者の場合は、呼び出しの結果として理由コード RC2136 が戻ります。 すべてのキューに同じ理由コードが適用される場合は、その理由コードが MQPUT または MQPUT1 呼び出しのREASONパラメーターに返され、応答レコードは設定されません。配布リストをオープンすると、通常は MQOD で指定されたオブジェクト・レコードと同じ数の応答レコードがあります。したがって各応答レコードは、対応するオブジェクト・レコードで識別されたキューへ書き込むために、必要に応じて完了コードおよび理由コードを設定します。 オープンに失敗した配布リストのキューには、割り当てられた応答レコードが配列の適切な位置にまだ残っています。ただし、この場合応答レコードには書き込み操作ではなくオープン操作で生じる完了コードおよび理由コードが設定されます。
応答レコードの数は、オブジェクト・レコードの数とは異なる可能性があります。 応答レコードの数がオブジェクト・レコードの数より少ない場合、アプリケーションは書き込み操作に失敗したすべての宛先や失敗の理由を識別することができない可能性があります。 応答レコードがオブジェクト・レコードよりも多い場合は、超過分は使用されません。ただし、依然として超過分へのアクセスは可能です。 応答レコードはオプションですが、指定する場合は、応答レコードの
PMRECが必要です。応答レコードは、
PMRROでオフセットを指定するか、またはPMRRPでアドレスを指定することによって、MQOD のオブジェクト・レコードと同様の方法で提供できます。 これを行う方法について詳しくは、 IBM iで説明されているODOROフィールドを参照してください。 ただし、PMRROとPMRRPのいずれか 1 つしか使用できません。呼び出しは失敗し、理由コードが戻ります。RC2156両方ともゼロ以外の場合。MQPUT1 呼び出しの場合は、このフィールドをゼロにする必要があります。 これは必要があれば、応答情報がオブジェクト記述子 MQOD で指定された応答レコードに戻るからです。
これは入力フィールドです。 このフィールドの初期値は 0 です。
PMVERが PMVER2 より小さい場合、このフィールドは無視されます。- PMRRP (ポインター)
最初の応答レコードのアドレス。
これは、最初の MQRR 応答レコードのアドレスです。
PMRRPは、メッセージが配布リストに書き込まれている間だけ使用されます。PMRECがゼロの場合、このフィールドは無視されます。PMRRPまたはPMRROのいずれかを使用して応答レコードを指定できますが、両方を指定することはできません。詳しくは、PMRRO フィールドの説明を参照してください。PMRRPを使用しない場合は、ヌル・ポインターまたはヌル・バイトに設定する必要があります。MQPUT1 呼び出しの場合は、このフィールドをヌル・ポインターまたはヌル・バイトにする必要があります。 これは必要があれば、応答情報がオブジェクト記述子 MQOD で指定された応答レコードに戻るからです。
これは入力フィールドです。 このフィールドの初期値は、ヌル・ポインターです。
PMVERが PMVER2 より小さい場合、このフィールドは無視されます。- PMSID (4 バイトの文字ストリング)
構造体 ID
値は次のものでなければなりません。- PMSIDV
- 書き込みメッセージ・オプション構造体の ID。
これは常に入力フィールドです。 このフィールドの初期値は PMSIDV です。
- PMSL (MQLONG)
このパブリケーションのターゲットになるサブスクリプションのレベル。
このパブリケーションを受け取るのは、
PMSLがこの値以下の最も高いサブスクリプションのみです。 この値はゼロから 9 までの範囲内でなければなりません。ゼロは最低レベルです。このフィールドの初期値は 9 です。
- PMTO (10 桁の符号付き整数)
予約済み。
これは、予約フィールドです。したがって、値に意味はありません。 このフィールドの初期値は
-1です。- PMUDC (10 桁の符号付き整数)
リモート・キューへの送信が成功したメッセージの数。
これは、現在の MQPUT 呼び出しまたは MQPUT1 呼び出しがリモート・キューを解決する配布リスト中のキューへの送信に成功したメッセージの数です。 キュー・マネージャーが配布リストの形式中に一時的に保存したメッセージは、これらの配布リストが含む個々の宛先の数として数えられます。 このフィールドは、配布リストにはない単一のキューにメッセージを書き込むときも設定されます。
これは出力フィールドです。 このフィールドの初期値は 0 です。
PMVERが PMVER2 より小さい場合、このフィールドは設定されません。- PMVER (10 桁の符号付き整数)
構造体のバージョン番号。
値は次のいずれかでなければなりません。- PMVER1
- バージョン 1 の書き込みメッセージ・オプション構造体。
- PMVER2
- バージョン 2 の書き込みメッセージ・オプション構造体。
これより新しいバージョンの構造体にのみ存在するフィールドは、そのフィールドの説明にその旨記載されています。 以下の定数は、現行バージョンのバージョン番号を指定しています。- PMVERC
- 書き込みメッセージ・オプション構造体の現行バージョン。
これは常に入力フィールドです。 このフィールドの初期値は PMVER1 です。
初期値
| フィールド名 | 定数の名前 | 定数の値 |
|---|---|---|
PMSID |
PMSIDV | 'PMO¬' |
PMVER |
PMVER1 | 1 |
PMOPT |
PMNONE | 0 |
PMTO |
なし | -1 |
PMCT |
なし | 0 |
PMKDC |
なし | 0 |
PMUDC |
なし | 0 |
PMIDC |
なし | 0 |
PMRQN |
なし | ブランク |
PMRMN |
なし | ブランク |
PMREC |
なし | 0 |
PMPRF |
PFNONE | 0 |
PMPRO |
なし | 0 |
PMRRO |
なし | 0 |
PMPRP |
なし | ヌル・ポインターまたはヌル・バイト |
PMRRP |
なし | ヌル・ポインターまたはヌル・バイト |
注:
|
||
RPG 宣言
D*..1....:....2....:....3....:....4....:....5....:....6....:....7..
D* MQPMO Structure
D*
D* Structure identifier
D PMSID 1 4 INZ('PMO ')
D* Structure version number
D PMVER 5 8I 0 INZ(1)
D* Options that control the action of MQPUT and MQPUT1
D PMOPT 9 12I 0 INZ(0)
D* Reserved
D PMTO 13 16I 0 INZ(-1)
D* Object handle of input queue
D PMCT 17 20I 0 INZ(0)
D* Number of messages sent successfully to local queues
D PMKDC 21 24I 0 INZ(0)
D* Number of messages sent successfully to remote queues
D PMUDC 25 28I 0 INZ(0)
D* Number of messages that could notbe sent
D PMIDC 29 32I 0 INZ(0)
D* Resolved name of destination queue
D PMRQN 33 80 INZ
D* Resolved name of destination queue manager
D PMRMN 81 128 INZ
D* Number of put message records or response records present
D PMREC 129 132I 0 INZ(0)
D* Flags indicating which MQPMR fields are present
D PMPRF 133 136I 0 INZ(0)
D* Offset of first put message record from start of MQPMO
D PMPRO 137 140I 0 INZ(0)
D* Offset of first response record from start of MQPMO
D PMRRO 141 144I 0 INZ(0)
D* Address of first put message record
D PMPRP 145 160* INZ(*NULL)
D* Address of first response record
D PMRRP 161 176* INZ(*NULL)
D* Original message handle
D PMOMH 177 184I 0
D* New message handle
D PMNMH 185 190I 0
D* The action being performed
D PMACT 191 194I 0
D* Reserved
D PMRE1 195 198I 0