MQOPEN命令のOptionsパラメタには,オブジェクトへのアクセスを制御するオプションを設定してください。オプションを次に示します。
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構造体にローカルキューマネジャの名前を指定する場合は,クラスタキューのローカルインスタンスが選択されます。キューマネジャ名が空白の場合は,任意のインスタンスが選択されます。
メッセージを登録するためにキューをオープンするには,MQOPEN命令にMQOO_OUTPUTオプションを使用してください。
キューのメッセージを検索するためにキューをオープンするには,MQOPEN命令にMQOO_BROWSEオプションを使用してください。キューマネジャがキューの次メッセージを識別するために使用する検索カーソルが作成されます。
キューからメッセージを削除するために,キューのオープンを制御するオプションは三つあります。これらのうちの一つをMQOPEN命令に使用できます。これらのオプションは,アプリケーションがキューに排他アクセスや共用アクセスをすることを指定します。
排他アクセスでは,キューをクローズするまで,該当アプリケーションだけがメッセージを削除できます。他アプリケーションがメッセージを削除するためにキューをオープンすると,MQOPEN命令は失敗します。共用アクセスでは,複数のアプリケーションがキューからメッセージを削除できます。
キューの定義時に指定されたアクセス方法を使用することをお勧めします。キューの定義には,SharebilityおよびDefInputOpenOption属性があります。この方法を利用するには,MQOO_INPUT_AS_Q_DEFオプションを使用してください。
キュー属性とMQOPEN命令オプションに対応するキューアクセスについて,次の表に示します。
表8-2 キュー属性とMQOPEN命令オプションに対応するキューアクセス
キュー属性 | MQOPEN命令オプション | |||
---|---|---|---|---|
Sharebility | DefInputOpenOption | AS_Q_DEF | SHARED | EXCLUSIVE |
SHAREABLE | SHARED | 共用 | 共用 | 排他 |
SHAREABLE | EXCLUSIVE | 排他 | 共用 | 排他 |
NOT_SHAREABLE※ | SHARED※ | 排他 | 排他 | 排他 |
NOT_SHAREABLE | EXCLUSIVE | 排他 | 排他 | 排他 |
MQOPEN命令の使い方を次に示します。
属性を設定するためにキューをオープンするには,MQOO_SETオプションを使用してください。ほかの種類のオブジェクトには,属性を設定できません。
属性を照会するためにキューをオープンするには,MQOO_INQUIREオプションを使用してください。
キューにメッセージを登録するときに,コンテキスト情報をメッセージに関連づけるには,キューのオープン時にメッセージコンテキストオプションを使用してください。
このオプションによって,メッセージの登録元ユーザに関連するコンテキスト情報とメッセージ登録元アプリケーションに関連するコンテキスト情報を区別できます。また,キューにメッセージを登録するときにコンテキスト情報を設定したり,ほかのキューハンドルから自動的にコンテキスト情報を取得したりできます。
メッセージコンテキストの詳細については,「3.12 メッセージコンテキスト」を参照してください。
MQOPEN命令を使用してオブジェクトをオープンするとき,キューマネジャはユーザがオブジェクトをオープンする権限を持つかどうかを確認します。権限がない場合,命令は失敗します。
しかし,サーバプログラムではキューマネジャに,サーバ自身の権限ではなく,サービスの提供先であるユーザの権限を確認させたいことがあります。これを実行するには,MQOO_ALTERNATE_USER_AUTHORITYオプションをMQOPEN命令に使用し,代替ユーザ識別子をMQOD構造体のAlternateUserIdフィールドに指定してください。
通常,サーバは処理するメッセージにあるコンテキスト情報を基にユーザ識別子を取得します。
TP1/Message Queueはキューマネジャの停止状態とMQOO_FAIL_IF_QUIESCINGオプションをサポートしません。