キューをオープンするとき,指定したキュー名についてMQOPEN命令は名前を解決します。これによって,キューマネジャは以降の操作を実行するキューを決定します。つまり,ユーザがオブジェクト記述子に別名キューまたはリモートキューの名前を指定するとき,命令はそれらをローカルキューまたは転送キューの名前に解決します。
登録,検索,または設定用にキューがオープンされる場合は,ローカルキューに解決されます。ローカルキューがなければ命令は失敗します。出力専用,照会専用,または出力と照会用にオープンされる場合は,ローカルキュー以外に解決されます。MQOPEN命令使用時のキュー名解決について,表8-1に示します。ユーザがObjectQMgrNameフィールドに指定した名前は,ObjectNameフィールドに指定した名前よりも先に解決されることに注意してください。
この表では,キューマネジャの別名を定義するために,リモートキューのローカル定義を使用する方法も示しています。ユーザはリモートキューにメッセージを登録するときに,どの転送キューを使用するか選択できます。例えば,複数のリモートキューマネジャあてのメッセージに一つの転送キューを使用できます。
この表を使用する場合は,"MQOD構造体の入力"列を参照して,該当する行を選択してください。同じ行の"解決後の名前"列には,どのキューマネジャのどのオブジェクトに解決されるかが示されます。
表8-1 MQOPEN命令使用時のキュー名解決
項番 | MQOD構造体の入力 | 解決後の名前 | 転送キュー | ||
---|---|---|---|---|---|
ObjectQMgrName | ObjectName | ObjectQMgrName | ObjectName | ||
1 | 空白またはローカルキューマネジャ | クラスタ属性のないローカルキュー | ローカルキューマネジャ | 入力値 | -(ローカルキューが使用されます。) |
2 | 空白 | クラスタ属性のローカルキュー | 負荷分散機能が選択したクラスタキューマネジャ,またはMQPUT命令で選択された特定のクラスタキューマネジャ | 入力値 | SYSTEM.CLUSTER.TARASMIT.QUEUEおよびローカルキューが使用されます。 |
3 | ローカルキューマネジャ | クラスタ属性のローカルキュー | ローカルキューマネジャ | 入力値 | -(ローカルキューが使用されます。) |
4 | 空白またはローカルキューマネジャ | モデルキュー | ローカルキューマネジャ | 生成された名前 | -(ローカルキューが使用されます。) |
5 | 空白またはローカルキューマネジャ | 別名キュー。クラスタ属性の有無は関係ありません。 | ObjectQMgrNameフィールドの値はそのままで別名キュー定義オブジェクトにあるBaseQNameの値をObjectNameに設定して名称解決を再度実行します。 別名キューには戻りません。 | - | - |
6 | 空白またはローカルキューマネジャ | リモートキューのローカル定義。クラスタ属性の有無は関係ありません。 | RemoteQMgrNameフィールドの値をObjectQMgrNameに,RemoteQNameの値をObjectNameに設定して名称解決を再度実行します。 リモートキューには戻りません。 | - | 空白でない場合はXmitQName属性の名前。それ以外の場合はリモートキュー定義オブジェクトのRemoteQMgrName |
7 | 空白 | 該当するローカルオブジェクトがなく,クラスタキューがあります。 | 負荷分散機能が選択したクラスタキューマネジャ,またはMQPUT命令で選択された特定のクラスタキューマネジャ | 入力値 | SYSTEM.CLUSTER.TARASMIT.QUEUE |
8 | 空白またはローカルキューマネジャ | 該当するローカルオブジェクトがなく,クラスタキューがありません。 | - | キューが見つからないエラー | - |
9 | ローカル転送キューの名前 | 解決されません。 | 入力値 | 入力値 | 入力値 |
10 | キューマネジャの別名定義(RemoteQMgrNameフィールドはローカルキューマネジャ) | 解決されません。リモートキューです。 | RemoteQMgrNameフィールドの値をObjectQMgrNameに設定して名称解決を再度実行します。 リモートキューには戻りません。 | 入力値 | 空白でない場合はXmitQName属性の名前。それ以外の場合はリモートキュー定義オブジェクトのRemoteQMgrName |
11 | ローカルオブジェクト以外のキューマネジャ(クラスタキューマネジャまたはキューマネジャの別名) | 解決されません。 | 入力値,またはMQPUT命令で選択された特定のクラスタキューマネジャ | 入力値 | SYSTEM.CLUSTER.TARASMIT.QUEUE |
12 | ローカルオブジェクト以外のキューマネジャ(クラスタオブジェクトはありません。) | 解決されません。 | 入力値 | 入力値 | キューマネジャのDefXmitQName属性 |
別名キューをオープンすると,別名の解決されたベースキューもオープンされます。リモートキューをオープンすると,転送キューもオープンされます。そのため,一方がオープンされている間は,指定したキューも解決されたキューも削除できません。
解決されたキュー名と解決されたキューマネジャ名は,MQOD構造体のResolvedQNameフィールドとResolvedQMgrNameフィールドに保存されます。