8.2.4 MQOPEN命令オプションの使用
MQOPEN命令のOptionsパラメタには,オブジェクトへのアクセスを制御するオプションを設定してください。オプションを次に示します。
-
該当するキューに登録されたすべてのメッセージが,同じインスタンスに格納されるようにキューをオープンします。
-
メッセージの登録を許可するようにキューをオープンします。
-
メッセージの検索を許可するようにキューをオープンします。
-
メッセージの削除を許可するようにキューをオープンします。
-
属性の照会と設定を許可するようにオブジェクトをオープンします。設定できるのはキューの属性だけです。
-
コンテキスト情報をメッセージに関連づけます。
-
代替ユーザ識別子を使用してキューをオープンします。
- 〈この項の構成〉
(1) クラスタキューへのMQOPEN命令オプション
MQPUT命令でキューに登録されたすべてのメッセージを,同じ経路で同じキューマネジャに導くにはMQOPEN命令にMQOO_BIND_ON_OPENオプションを使用してください。MQPUT命令時にメッセージ単位であて先を指定するには,MQOPEN命令にMQOO_BIND_NOT_FIXEDオプションを使用してください。どちらも指定しない場合は,デフォルトのMQOO_BIND_AS_Q_DEFが使用されます。この場合は,キューハンドルに使用されるバインディングはキューのDefBind属性から取得されます。DefBind属性にはMQBND_BIND_ON_OPENまたはMQBND_BIND_NOT_FIXEDの値が設定されます。MQOD構造体にローカルキューマネジャの名前を指定する場合は,クラスタキューのローカルインスタンスが選択されます。キューマネジャ名が空白の場合は,任意のインスタンスが選択されます。
(2) メッセージ登録のMQOPEN命令オプション
メッセージを登録するためにキューをオープンするには,MQOPEN命令にMQOO_OUTPUTオプションを使用してください。
(3) メッセージ検索のMQOPEN命令オプション
キューのメッセージを検索するためにキューをオープンするには,MQOPEN命令にMQOO_BROWSEオプションを使用してください。キューマネジャがキューの次メッセージを識別するために使用する検索カーソルが作成されます。
- 注意
-
-
リモートキューのメッセージは検索できません。そのため,MQOO_BROWSEオプションを使用してリモートキューをオープンできません。
-
配布リストをオープンするときには,このオプションは指定できません。
-
(4) メッセージ削除のMQOPEN命令オプション
キューからメッセージを削除するために,キューのオープンを制御するオプションは三つあります。これらのうちの一つをMQOPEN命令に使用できます。これらのオプションは,アプリケーションがキューに排他アクセスや共用アクセスをすることを指定します。
排他アクセスでは,キューをクローズするまで,該当アプリケーションだけがメッセージを削除できます。他アプリケーションがメッセージを削除するためにキューをオープンすると,MQOPEN命令は失敗します。共用アクセスでは,複数のアプリケーションがキューからメッセージを削除できます。
キューの定義時に指定されたアクセス方法を使用することをお勧めします。キューの定義には,SharebilityおよびDefInputOpenOption属性があります。この方法を利用するには,MQOO_INPUT_AS_Q_DEFオプションを使用してください。
キュー属性とMQOPEN命令オプションに対応するキューアクセスについて,次の表に示します。
キュー属性 |
MQOPEN命令オプション |
|||
---|---|---|---|---|
Sharebility |
DefInputOpenOption |
AS_Q_DEF |
SHARED |
EXCLUSIVE |
SHAREABLE |
SHARED |
共用 |
共用 |
排他 |
SHAREABLE |
EXCLUSIVE |
排他 |
共用 |
排他 |
NOT_SHAREABLE※ |
SHARED※ |
排他 |
排他 |
排他 |
NOT_SHAREABLE |
EXCLUSIVE |
排他 |
排他 |
排他 |
- 注※
-
この組み合わせもキューに定義できますが,DefInputOpenOption属性は,Sharebility属性で上書きされます。
MQOPEN命令の使い方を次に示します。
-
他アプリケーションがキューからメッセージを同時に削除する場合にも,アプリケーションが正常に動作できるときには,MQOO_INPUT_SHAREDオプションを使用してください。表8-2に示すように,このオプション指定時でもキューに排他アクセスが設定されることがあります。
-
他アプリケーションが同時にキューからメッセージを削除できない場合にだけ,アプリケーションが正常に動作できるときには,MQOO_INPUT_EXCLUSIVEオプションを指定してください。
- 注意
-
-
リモートキューからはメッセージを削除できません。そのため,MQOO_INPUT_*オプションを使用してリモートキューをオープンできません。
-
配布リストをオープンするときは,このオプションは指定できません。詳細については,「9.6 配布リスト」を参照してください。
-
(5) 属性の設定と照会のMQOPEN命令オプション
属性を設定するためにキューをオープンするには,MQOO_SETオプションを使用してください。ほかの種類のオブジェクトには,属性を設定できません。
属性を照会するためにキューをオープンするには,MQOO_INQUIREオプションを使用してください。
- 注意
-
配布リストをオープンするときは,このオプションは指定できません。
(6) メッセージコンテキストに関連するMQOPEN命令オプション
キューにメッセージを登録するときに,コンテキスト情報をメッセージに関連づけるには,キューのオープン時にメッセージコンテキストオプションを使用してください。
このオプションによって,メッセージの登録元ユーザに関連するコンテキスト情報とメッセージ登録元アプリケーションに関連するコンテキスト情報を区別できます。また,キューにメッセージを登録するときにコンテキスト情報を設定したり,ほかのキューハンドルから自動的にコンテキスト情報を取得したりできます。
メッセージコンテキストの詳細については,「3.12 メッセージコンテキスト」を参照してください。
(7) 代替ユーザ認証のMQOPEN命令オプション
MQOPEN命令を使用してオブジェクトをオープンするとき,キューマネジャはユーザがオブジェクトをオープンする権限を持つかどうかを確認します。権限がない場合,命令は失敗します。
しかし,サーバプログラムではキューマネジャに,サーバ自身の権限ではなく,サービスの提供先であるユーザの権限を確認させたいことがあります。これを実行するには,MQOO_ALTERNATE_USER_AUTHORITYオプションをMQOPEN命令に使用し,代替ユーザ識別子をMQOD構造体のAlternateUserIdフィールドに指定してください。
通常,サーバは処理するメッセージにあるコンテキスト情報を基にユーザ識別子を取得します。
(8) キューマネジャ停止状態のMQOPEN命令オプション
TP1/Message Queueはキューマネジャの停止状態とMQOO_FAIL_IF_QUIESCINGオプションをサポートしません。