MQOPEN命令 - オブジェクトのオープン

機能

MQOPEN命令で,そのオブジェクトの利用を確立します。次の種類のオブジェクトをオープンできます。

形式

C言語の場合

MQOPEN(MQHCONN Hconn, PMQVOID ObjDesc, MQLONG Options,
      PMQHOBJ Hobj, PMQLONG CompCode, PMQLONG Reason)

COBOL言語の場合

CALL 'MQOPEN' USING HCONN, OBJDESC, OPTIONS, HOBJ,
               COMPCODE, REASON.

引数

● Hconn(MQHCONN型) -input

コネクションハンドルです。

キューマネジャへの接続を示すハンドルです。MQCONN命令の戻り値を指定してください。

ただし,MQOPEN命令では,Hconn引数の値としてMQCONN命令の戻り値以外を指定してもエラーにはなりません。それでも,MQCONN命令は必ず発行しなければならないため,MQCONN命令の戻り値を必ず指定してください。また,MQOPEN命令以降に発行する命令でも,同様にMQCONN命令の戻り値を指定してください。

● ObjDesc(MQOD構造体) -input/output

オブジェクト記述子です。

オープンするオブジェクトを識別する構造体です。詳細は,「1. データタイプ」の「MQOD構造体 - オブジェクト記述子」を参照してください。

ObjDesc引数のObjectNameフィールドがモデルキューの名称の場合,モデルキューの属性で動的キューが生成されます。これは,Options引数でどのオープンオプションを指定しても同様です。このMQOPEN命令で返されたHobjを使用すると,モデルキューではなく,生成された動的キューを利用することになります。これは,MQINQ命令とMQSET命令のときも同様です。ObjDesc引数のモデルキューの名称は,生成された動的キューの名称に置き換えられます。動的キューのタイプは,モデルキューのDefinitionType属性で決まります。動的キューに対するクローズオプションについては,この章の「MQCLOSE命令 - オブジェクトのクローズ」を参照してください。

● Options(MQLONG型) -input

MQOPEN命令の動作を制御するオープンオプションです。

少なくとも,次の一つのオプションを指定してください。

これらのオプションの意味を次に示します。また,ほかのオプションも指定できます。複数のオプションを指定する場合は,次のどちらかに従ってください。

同時に指定できない組み合わせは,そのつど示します。それ以外の組み合わせは自由です。ObjDescのオブジェクトに合ったオプションを指定してください。オプションおよびその指定方法の一覧については,「付録A 命令および引数の一覧」を参照してください。

アクセスオプション:

次に示すオプションはオブジェクトに実行される操作の種類を制御します。

MQOO_INPUT_AS_Q_DEF
キューの定義を省略するときの取り出しオプションで,取り出し用にオープンします。
以降のMQGET命令で使用するために,キューをオープンします。共用アクセスで取り出すか排他アクセスで取り出すかは,キューのDefInputOpenOption属性の値で決まります。
このオプションは,ローカルキュー,別名キュー,およびモデルキューのときだけ有効です。リモートキュー,配布リスト,キューではないオブジェクトについては不正となります。
MQOO_INPUT_SHARED
共用アクセスの取り出し用にオープンします。
以降のMQGET命令で使用するために,キューをオープンします。そのキューがほかのアプリケーションによってすでにオープンされていても,MQOO_INPUT_SHAREDオプションでオープンされている場合は,命令は成功します。MQOO_INPUT_EXCLUSIVEオプションでオープンされている場合は,理由コードMQRC_OBJECT_IN_USEで命令は失敗します。
このオプションは,ローカルキュー,別名キュー,およびモデルキューのときだけ有効です。リモートキュー,配布リスト,キューではないオブジェクトについては不正となります。
MQOO_INPUT_EXCLUSIVE
排他アクセスの取り出し用にオープンします。
以降のMQGET命令で使用するために,キューをオープンします。そのキューがほかのアプリケーションによってすでに取り出し用にオープンされていると,理由コードMQRC_OBJECT_IN_USEで命令は失敗します。
このオプションは,ローカルキュー,別名キュー,およびモデルキューのときだけ有効です。リモートキュー,配布リスト,キューではないオブジェクトについては不正となります。

これらのオプションに対しては,次の注意があります。

MQOO_BROWSE
検索用にオープンします。
次のどれかのオプションでMQGET命令を使用するために,キューをオープンします。
 MQGMO_BROWSE_FIRST
 MQGMO_BROWSE_NEXT
 MQGMO_BROWSE_MSG_UNDER_CURSOR
これは,すでにMQOO_INPUT_EXCLUSIVEオプションでオープンされているキューに対しても,指定できます。MQOO_BROWSEオプションでMQOPEN命令を呼び出すと,検索カーソルが生成されます。検索カーソルの論理的な位置は,キューにある最初のメッセージの前になります。詳細については,「1. データタイプ」の「MQGMO構造体 - メッセージ取り出しオプション」でOptionsフィールドの説明を参照してください。
このオプションは,ローカルキュー,別名キュー,およびモデルキューのときだけ有効です。リモートキュー,配布リスト,キューではないオブジェクトについては不正となります。ObjectQMgrNameフィールドがキューマネジャの別名の場合,このオプションは指定できません。また,キューマネジャの別名として使用されるリモートキューのローカル定義のRemoteQMgrName属性がローカルキューマネジャ名の場合も同様です。名称解決については,マニュアル「TP1/Message Queue プログラム作成の手引」を参照してください。
MQOO_OUTPUT
登録用にオープンします。
以降のMQPUT命令で使用するために,キューをオープンします。
キューのInhibitPut属性がMQQA_PUT_INHIBITEDの場合でも,MQOPEN命令はこのオプションで成功します。ただし,この属性値が設定されている間は,MQPUT命令は失敗します。
このオプションは,配布リストを含むすべてのキューに有効です。
MQOO_INQUIRE
属性の照会用にオープンします。
以降のMQINQ命令で使用するために,キュー,プロセス定義,またはキューマネジャをオープンします。
このオプションは,配布リストを除くすべてのオブジェクトタイプに有効です。ObjectQMgrNameフィールドがキューマネジャの別名の場合は,このオプションは指定できません。これは,キューマネジャの別名として使用されるリモートキューのローカル定義のRemoteQMgrName属性がローカルキューマネジャ名の場合も同様です。名称解決については,マニュアル「TP1/Message Queue プログラム作成の手引」を参照してください。
MQOO_SET
属性の設定用にオープンします。
以降のMQSET命令で使用するために,キューをオープンします。
このオプションは,配布リストを除くすべてのキューに有効です。ObjectQMgrNameフィールドがキューマネジャの別名の場合,このオプションは指定できません。また,キューマネジャの別名として使用されるリモートキューのローカル定義のRemoteQMgrName属性がローカルキューマネジャ名の場合も同様です。名称解決については,マニュアル「TP1/Message Queue プログラム作成の手引」を参照してください。
 

バインディングオプション:

次に示すオプションは,オープンされたオブジェクトがクラスタキューである場合に適用されます。これらのオプションは,キューハンドルのバインディングを,クラスタキューの特定のインスタンスへと制御します。

MQOO_BIND_ON_OPEN
キューがオープンされたときにハンドルをあて先にバインドします。
このオプションを指定すると,キューがオープンされたとき,ローカルキューマネジャはキューハンドルを特定のあて先キューに固定します。その結果,このハンドルを使用して登録されるすべてのメッセージは,あて先キューの同じインスタンスへ同じルートで送信されます。
このオプションはキューにだけ使用でき,クラスタキューにだけ意味があります。
クラスタキューではないキューに指定された場合,このオプションは無視されます。
MQOO_BIND_NOT_FIXED
特定のあて先にバインドしません。
このオプションを指定すると,ローカルキューマネジャがキューハンドルを特定のあて先キューに固定しないようにします。その結果,このハンドルを使用する後続のMQPUT命令では,メッセージはあて先キューの異なるインスタンスに送信されるか,同じインスタンスであっても異なるルートで送信されます。ローカルキューマネジャ,リモートキューマネジャ,またはMCAによって,ネットワークの条件に従って,あて先がそのつど変更されます。
注意
トランザクションを完了させるために,連続するメッセージを交換する必要のあるクライアントおよびサーバアプリケーションは,MQOO_BIND_NOT_FIXED,またはDefBind属性がMQBND_BIND_NOT_FIXEDの場合のMQOO_BIND_AS_Q_DEFを指定しないでください。なぜなら,連続している後続メッセージはサーバアプリケーションの異なるあて先に送信される可能性があるためです。
MQOO_BROWSEまたはMQOO_INPUT_*オプションの一つがクラスタキューに指定された場合,キューマネジャはクラスタキューの中でローカルなインスタンスを選択します。その結果,MQOO_BIND_NOT_FIXEDが指定されていても,キューハンドルのバインディングは固定されます。
MQOO_INQUIREがMQOO_BIND_NOT_FIXEDとともに指定された場合,このハンドルを使用した後続のMQINQでは,クラスタキューの異なるインスタンスを照会することがあります。通常はすべてのインスタンスは同じ属性値を持ちます。
MQOO_BIND_NOT_FIXEDはキューに対してだけ使用でき,クラスタキューに対して意味があります。クラスタキューではないキューに指定された場合,オプションは無視されます。
MQOO_BIND_AS_Q_DEF
キューについてのデフォルトバインディングを使用します。
このオプションを指定すると,ローカルキューマネジャは,DefBindキュー属性で定義された方法でキューハンドルをバインドします。この属性の値は,MQBND_BIND_ON_OPENまたはMQBND_BIND_NOT_FIXEDのどちらかです。
MQOO_BIND_ON_OPENおよびMQOO_BIND_NOT_FIXEDのどちらも指定されていない場合,MQOO_BIND_AS_Q_DEFがデフォルト値となります。
MQOO_BIND_AS_Q_DEFは,プログラムの文書化のために定義されています。
このオプションは,ほかに二つあるバインドオプションのどちらかと一緒に指定されることは意図していません。しかし,値が0であるため,そのような指定を検知できません。
 

コンテキストオプション:

次に示すオプションは,メッセージコンテキストの処理を制御します。

MQOO_SAVE_ALL_CONTEXT
取り出し時にコンテキストを保存します。
コンテキスト情報は,このキューハンドルに関連づけられます。このハンドルを使用して取り出したメッセージのコンテキストから,この情報が取り出されます。メッセージコンテキストについては,マニュアル「TP1/Message Queue プログラム作成の手引」を参照してください。
このコンテキスト情報は,以降のMQPUT命令およびMQPUT1命令で登録するメッセージに引き渡せます。コンテキスト情報の引き渡しについては,「1. データタイプ」の「MQPMO構造体 - メッセージ登録オプション」で,OptionsフィールドのMQPMO_PASS_IDENTITY_CONTEXTオプションとMQPMO_PASS_ALL_CONTEXTオプションの説明を参照してください。
一度もメッセージを取り出さないうちは,登録するメッセージにコンテキストを引き渡せません。
MQGMO_*検索オプションを使用した取り出しでは,コンテキスト情報は保存されません。ただし,MsgDesc引数のコンテキストフィールドには返されます。
このオプションは,ローカルキュー,別名キュー,およびモデルキューのときだけ有効です。リモートキュー,配布リスト,キューではないオブジェクトについては不正となります。
MQOO_INPUT_*オプションのどれかと同時に指定してください。
MQOO_PASS_IDENTITY_CONTEXT
識別コンテキストを引き渡せるようにします。
このオプションを指定することで,メッセージ登録時のPutMsgOpts引数にMQPMO_PASS_IDENTITY_CONTEXTオプションを指定できるようになります。具体的には,MQOO_SAVE_ALL_CONTEXTオプションでオープンした入力キューからの識別コンテキストの情報をメッセージに組み込みます。メッセージコンテキストについては,マニュアル「TP1/Message Queue プログラム作成の手引」を参照してください。
MQOO_OUTPUTオプションと同時に指定してください。
このオプションは,配布リストを含むすべてのキューに有効です。
MQOO_PASS_ALL_CONTEXT
全コンテキストを引き渡せるようにします。
このオプションを指定することで,メッセージ登録時のPutMsgOpts引数にMQPMO_PASS_ALL_CONTEXTオプションを指定できるようになります。具体的には,MQOO_SAVE_ALL_CONTEXTオプションでオープンした入力キューからの識別コンテキストと登録元コンテキストの情報をメッセージに組み込みます。メッセージコンテキストについては,マニュアル「TP1/Message Queue プログラム作成の手引」を参照してください。
このオプションは,MQOO_PASS_IDENTITY_CONTEXTオプションの内容を含みます。このため,同時にMQOO_PASS_IDENTITY_CONTEXTオプションを指定する必要はありません。MQOO_OUTPUTオプションと同時に指定してください。
このオプションは,配布リストを含むすべてのキューに有効です。
MQOO_SET_IDENTITY_CONTEXT
識別コンテキストを設定できるようにします。
このオプションを指定することで,メッセージ登録時のPutMsgOpts引数にMQPMO_SET_IDENTITY_CONTEXTオプションを指定できるようになります。具体的には,MQPUT命令またはMQPUT1命令のMsgDesc引数に指定した識別コンテキストの情報をメッセージに組み込みます。メッセージコンテキストについては,マニュアル「TP1/Message Queue プログラム作成の手引」を参照してください。
このオプションは,MQOO_PASS_IDENTITY_CONTEXTオプションの内容を含みます。このため,同時にMQOO_PASS_IDENTITY_CONTEXTオプションを指定する必要はありません。MQOO_OUTPUTオプションと同時に指定してください。
このオプションは,配布リストを含むすべてのキューに有効です。
MQOO_SET_ALL_CONTEXT
全コンテキストを設定できるようにします。
このオプションを指定することで,メッセージ登録時のPutMsgOpts引数にMQPMO_SET_ALL_CONTEXTオプションを指定できるようになります。具体的には,MQPUT命令またはMQPUT1命令のMsgDesc引数に指定した識別コンテキストと登録元コンテキストの情報をメッセージに組み込みます。メッセージコンテキストについては,マニュアル「TP1/Message Queue プログラム作成の手引」を参照してください。
このオプションは,次のオプションの内容を含みます。このため,同時にこれらのオプションを指定する必要はありません。
 MQOO_PASS_IDENTITY_CONTEXT
 MQOO_PASS_ALL_CONTEXT
 MQOO_SET_IDENTITY_CONTEXT
MQOO_OUTPUTオプションと同時に指定してください。
このオプションは,配布リストを含むすべてのキューに有効です。
 

そのほかのオプション:

次に示すオプションは権限チェックおよびキューマネジャ停止時の動作を制御します。

MQOO_ALTERNATE_USER_AUTHORITY
代替ユーザ識別子を使用します。
オブジェクトを利用するユーザの識別子として,アプリケーションを実行しているユーザ識別子ではなく,ObjDesc引数のAlternateUserIdの代替ユーザ識別子が使用されます。
このオプションは,すべてのオブジェクトタイプに有効です。
MQOO_FAIL_IF_QUIESCING
TP1/Message Queueでは意味がありません。
このオプションを指定しても,TP1/Message Queueの動作には影響しません。これは,アプリケーションの移植性を向上させるために定義されています。

次に,MQOPEN命令のオプションとキュータイプとの関係を示します。

オプション別名キュー1ローカルキューおよびモデルキューリモートキュー非ローカルクラスタキュー配布リスト
MQOO_INPUT_AS_Q_DEF×××
MQOO_INPUT_SHARED×××
MQOO_INPUT_EXCLUSIVE×××
MQOO_BROWSE×××
MQOO_OUTPUT
MQOO_INQUIRE×
MQOO_SET××
MQOO_BIND_ON_OPEN2
MQOO_BIND_NOT_FIXED2
MQOO_BIND_AS_Q_DEF2
MQOO_SAVE_ALL_CONTEXT×××
MQOO_PASS_IDENTITY_CONTEXT
MQOO_PASS_ALL_CONTEXT
MQOO_SET_IDENTITY_CONTEXT
MQOO_SET_ALL_CONTEXT
MQOO_ALTERNATE_USER_AUTHORITY
MQOO_FAIL_IF_QUIESCING
(凡例)
○:有効
×:無効
△:リモートキューのローカル定義にだけ有効
注※1
別名キューに対するオプションの有効性は,別名が解決されるキューでのオプションの有効性に依存します。
注※2
このオプションは任意のキュータイプに指定できますが,キューがクラスタキューではない場合は無視されます。

● Hobj(MQHOBJ型) -output

オブジェクトハンドルです。

利用するオブジェクトを示すハンドルです。以降の命令でこのオブジェクトを利用するときに,このハンドルを指定します。MQCLOSE命令を呼び出すと,またはこのハンドルの範囲の処理が終了すると,このハンドルは無効になります。

返されるオブジェクトハンドルの有効範囲は,命令に指定されたコネクションハンドルと同じです。コネクションハンドルの有効範囲については,この章の「MQCONN命令 - キューマネジャへの接続」でHconn引数を参照してください。

● CompCode(MQLONG型) -output

完了コードです。

次のどれかが返されます。

● Reason(MQLONG型) -output

理由コードです。

CompCode引数がMQCC_OKの場合

理由コード数値意味
MQRC_NONE0理由コードはありません。

CompCode引数がMQCC_WARNINGの場合

理由コード数値意味
MQRC_MULTIPLE_REASONS2136複数のリターンコードが返されました。

CompCode引数がMQCC_FAILEDの場合

理由コード数値意味
MQRC_CLUSTER_PUT_INHIBITED2268クラスタ内のすべてのキューに対して登録が禁止されています。
MQRC_CLUSTER_RESOLUTION_ERROR2189クラスタ名称の解決に失敗しました。
MQRC_CLUSTER_RESOURCE_ERROR2269クラスタリソースのエラーです。
MQRC_DEF_XMIT_Q_USAGE_ERROR2199省略時の転送キューの使用方法に誤りがあります。
MQRC_DYNAMIC_Q_NAME_ERROR2011動的キュー名が不正です。
MQRC_HANDLE_NOT_AVAILABLE2017現在そのハンドルは有効ではありません。
MQRC_HCONN_ERROR2018コネクションハンドルが不正です。
MQRC_HOBJ_ERROR2019オブジェクトハンドルが不正です。
MQRC_MULTIPLE_REASONS2136複数の理由コードが返されました。
MQRC_NAME_NOT_VALID_FOR_TYPE2194オブジェクトタイプに対してオブジェクト名が不正です。
MQRC_OBJECT_ALREADY_EXISTS2100オブジェクトがすでにあります。
MQRC_OBJECT_DAMAGED2101オブジェクトが破損しています。
MQRC_OBJECT_IN_USE2042オブジェクトは衝突するオプションですでにオープンされています。
MQRC_OBJECT_NAME_ERROR2152オブジェクト名が不正です。
MQRC_OBJECT_Q_MGR_NAME_ERROR2153オブジェクトキューマネジャ名が不正です。
MQRC_OBJECT_RECORDS_ERROR2155オブジェクトレコードが不正です。
MQRC_OBJECT_TYPE_ERROR2043オブジェクトタイプが不正です。
MQRC_OD_ERROR2044オブジェクト記述子の構造体が不正です。
MQRC_OPTION_NOT_VALID_FOR_TYPE2045オブジェクトタイプに対してオプションが不正です。
MQRC_OPTIONS_ERROR2046オプションが不正です。または,指定されていません。
MQRC_Q_TYPE_ERROR2057キュータイプが不正です。
MQRC_RECS_PRESENT_ERROR2154存在するレコードの数が不正です。
MQRC_REMOTE_Q_NAME_ERROR2184リモートキュー名が不正です。
MQRC_RESOURCE_PROBLEM2102システム資源が不足しています。
MQRC_RESPONSE_RECORDS_ERROR2156応答レコードが不正です。
MQRC_STORAGE_NOT_AVAILABLE2071記憶容量が不足しています。
MQRC_UNEXPECTED_ERROR2195予期しないエラーが発生しました。
MQRC_UNKNOWN_ALIAS_BASE_Q2082別名キューのベースキューを認識できません。
MQRC_UNKNOWN_DEF_XMIT_Q2197省略時の転送キューを認識できません。
MQRC_UNKNOWN_OBJECT_NAME2085オブジェクト名を認識できません。
MQRC_UNKNOWN_OBJECT_Q_MGR2086オブジェクトのキューマネジャを認識できません。
MQRC_UNKNOWN_REMOTE_Q_MGR2087リモートキューマネジャを認識できません。
MQRC_UNKNOWN_XMIT_Q2196転送キューを認識できません。
MQRC_XMIT_Q_USAGE_ERROR2092転送キューの使用方法に誤りがあります。

詳細は,「付録B.2 理由コード」を参照してください。

注意事項

  1. オブジェクトをオープンする用途は,次のとおりです。
    • キューをオープンする場合
      - メッセージの取り出し,または検索(MQGET命令)
      - メッセージの登録(MQPUT命令)
      - キューの属性の照会(MQINQ命令)
      - キューの属性の設定(MQSET命令)
      モデルキューの名称を指定した場合,動的キューが生成されます。詳細については「ObjDesc引数」の説明を参照してください。
      配布リストはキューのリストを含む特別なキューオブジェクトです。メッセージ登録のためにだけオープンできます。次に示す場合はオープンできません。詳細については,「注意事項」の6.を参照してください。
      - メッセージの取り出し,または検索
      - キューの属性の照会,または設定
    • プロセス定義をオープンする場合
      - プロセス定義の属性の照会(MQINQ命令)
    • キューマネジャをオープンする場合
      - ローカルキューマネジャの属性の照会(MQINQ命令)
  2. 一つのアプリケーションが,同じオブジェクトを2回以上オープンすることもできます。それぞれのオープンに対して,異なるハンドルが返されます。そのハンドルは,それをオープンした目的の機能でそれぞれ使用できます。
  3. MQOPEN命令を呼び出したときに,ローカルキューマネジャ内の実名で置き換えられます。つまり,次のようになります。
    • 別名キューの実名は,ベースキューの名称になります。
    • リモートキューのローカル定義の実名は,リモートキューマネジャ名とそれに定義されるキューの名称になります。
    • リモートキューマネジャ名の実名は,転送キューの名称になります。
    ただし,以降にそのハンドルを使用してMQINQ命令またはMQSET命令を呼び出す場合でも,オープンしたときの名称を照会することに注意してください。実名に置き換えられた名称を照会するわけではありません。例えば,別名キューをオープンした場合,MQINQ命令で返される属性は,別名キューの属性です。別名キューのベースキューの属性ではありません。実名のチェックはされますが,MQOPEN命令のOptions引数の指定内容とは関係ありません。
    オープンされるオブジェクトがクラスタキューである場合,名称解決はMQOPEN命令発行時,またはあとで解決されます。名称解決が発生する場合は,MQOPEN命令の次に示すMQOO_BIND_*オプションで制御されます。
     MQOO_BIND_ON_OPEN
     MQOO_BIND_NOT_FIXED
     MQOO_BIND_AS_Q_DEF
  4. この命令のObjDesc引数にリモートキューを指定する方法に,次の2とおりがあります。詳細については,「1. データタイプ」の「MQOD構造体 - オブジェクト記述子」でObjectNameフィールドとObjectQMgrNameフィールドの説明を参照してください。
    • リモートキューのローカル定義の名称をObjectNameフィールドに指定します。この場合,ローカルキューマネジャを参照するためのObjectQMgrNameフィールドには,空白またはC言語の場合はヌル文字列を指定できます。
    • リモートキューマネジャが認識できるリモートキュー名を,ObjectNameフィールドに指定します。この場合,ObjectQMgrName属性にリモートキューマネジャの名称を指定します。
    メッセージがリモートキューマネジャに到着したとき,登録元ユーザのユーザ識別子によっては,リモートキューマネジャがメッセージを拒否することがあります。
  5. MQOO_BROWSEオプションを指定してMQOPEN命令を呼び出すと,検索カーソルが生成されます。検索カーソルは,オブジェクトハンドルと検索オプションを指定したMQGET命令で使用します。これによって,内容を変更しないでキューを検索できます。メッセージを検索したあとに,MQGMO_MSG_UNDER_CURSORオプションを使用して,キューから削除できます。
    同じキューに対して何回かMQOPEN命令を実行することで,一つのアプリケーションで複数の検索カーソルを持てます。
  6. 配布リスト使用時には,次の点に注意してください。
    • 配布リストをオープンするとき,MQOD構造体のフィールドの値は,次の条件を満たさなければなりません。
      ・Versionフィールドの値はMQOD_VERSION_2以上である。
      ・ObjectTypeフィールドの値はMQOT_Qである。
      ・ObjectNameフィールドは空白またはヌル文字列である。
      ・ObjectQMgrNameフィールドは空白またはヌル文字列である。
      ・RecsPresentフィールドは0より大きい。
      ・ObjectRecOffsetフィールドおよびObjectRecPtrフィールドのどちらかが0で,他方は0以外である。
      ・ResponseRecOffsetフィールドおよびResponseRecPtrフィールドは両方とも0か,どちらかが0で他方は0以外である。
      ・ObjectRecOffsetフィールドまたはObjectRecPtrフィールドのどちらかで指定されるRecsPresentフィールドのオブジェクトレコードが存在しなければならない。オブジェクトレコードは,オープンするあて先キューの名称を設定しなければならない。
      ・ResponseRecOffsetフィールドおよびResponseRecPtrフィールドのどちらかが0以外の場合は,RecsPresentフィールドの応答レコードが存在しなければならない。これは,命令がMQRC_MULTIPLE_REASONSの理由コードで完了すると,キューマネジャによって設定される。
       
      バージョン2のMQOD構造体は,RecsPresentフィールドが0であることを保証すると,配布リストではない単一のキューをオープンするときも使用できます。
    • Options引数には,次のオプションだけが指定できます。
       MQOO_OUTPUT
       MQOO_PASS_*_CONTEXT
       MQOO_SET_*_CONTEXT
       MQOO_ALTERNATE_USER_AUTHORITY
       MQOO_FAIL_IF_QUIESCING
    • 配布リストのあて先キューは,ローカルキュー,別名キュー,またはリモートキューです。モデルキューは指定できません。モデルキューが指定されると,キューのオープンが理由コードMQRC_Q_TYPE_ERRORで失敗します。ただし,リストにあるほかのキューのオープンを妨げることはしません。
    • 完了コードおよび理由コードの引数は,次のように設定されます。
      ・配布リストのキューに対する操作が同じ方法で,すべて成功またはすべて失敗した場合,完了コードと理由コードの引数は,共通の結果を記述するように設定されます。アプリケーションによって指定されている場合も,MQRR構造体の応答レコードは設定されません。
      例えば,オープンが成功すると,完了コードにMQCC_OK,理由コードにMQRC_NONEがそれぞれ設定されます。キューが存在しないで,オープンに失敗した場合,引数はMQCC_FAILEDおよびMQRC_UNKNOWN_OBJECT_NAMEに設定されます。
      ・配布リストのキューに対するオープン操作が,同じ方法で部分的に成功または失敗した場合は次のとおりです。
      -少なくとも一つのオープンに成功すると,完了コードの引数にはMQCC_WARNINGが設定されます。すべてが失敗するとMQCC_FAILEDが設定されます。
      -理由コードの引数は,MQRC_MULTIPLE_REASONSに設定されます。
      -応答レコードがアプリケーションによって指定されている場合は,配布リストのキューに対して個別の完了コードと理由コードを設定します。
    • 配布リストのオープンが成功すると,返却されたHobjハンドルは,配布リストのキューにメッセージを登録するための次のMQPUT命令で使用できます。また,配布リストへのアクセスを廃止するために,MQCLOSE命令でも使用できます。配布リストをクローズするのに適当なオプションはMQCO_NONEだけです。
      MQPUT1命令は,配布リストにメッセージを登録するときも使用できます。リスト中のキューを定義するMQOD構造体は,MQPUT1命令の引数として指定されます。
    • 配布リスト中のオープンに成功したあて先は,アプリケーションが一つのタスクでオープンできる最大のハンドル数を超えたかどうかチェックするとき,別々のハンドルとしてカウントされます。オープンできる最大のハンドル数については「3. オブジェクトの属性」の「キューマネジャの属性」でMaxHandles属性を参照してください。
      配布リスト中の二つ以上のあて先が,同じ物理キューに受信されるときも同様に処理されます。
      オープンに成功したあて先は,OpenOutputCount属性の値を1ずつ増加させます。
  7. クラスタキューを使用するときには,次の点に注意してください。
    • クラスタキューが最初にオープンされた場合で,かつローカルキューマネジャがフルリポジトリキューマネジャではない場合,ローカルキューマネジャはフルリポジトリキューマネジャからクラスタキューについての情報を取得します。ネットワークがビジー状態の場合,ローカルキューマネジャがリポジトリキューマネジャから必要な情報を受信するために数秒掛かるときがあります。その結果,MQOPEN命令を発行したアプリケーションが,MQOPEN命令がリターンするまでに10秒以上待つことがあります。ローカルキューマネジャがこの時間内にクラスタキューについての必要な情報を受信しないと,命令はMQRC_CLUSTER_RESOLUTION_ERRORで失敗します。
    • クラスタキューがオープンされ,クラスタ内に複数のキューインスタンスがある場合,実際にオープンされるインスタンスはMQOPEN命令で指定されるオプションに依存します。
      ・次に示すどれかのオプションを指定したとき,オープンされるクラスタキューインスタンスは,ローカルインスタンスでなければいけません。キューのローカルインスタンスがないとき,MQOPEN命令は失敗します。
       MQOO_BROWSE
       MQOO_INPUT_AS_Q_DEF
       MQOO_INPUT_EXCLUSIVE
       MQOO_INPUT_SHARED
       MQOO_SET
      ・上記のオプションは指定されていない場合で,MQOO_INQUIREとMQOO_OUTPUTの一方または両方を指定するとき,ローカルインスタンスがオープンされます。ローカルインスタンスがなければリモートインスタンスがオープンされます。