MQCLOSE命令 − オブジェクトのクローズ
機能
MQCLOSE命令で,オブジェクトの利用を終了します。MQOPEN命令の反対の命令です。
形式
引数
● Hconn(MQHCONN型) −input
コネクションハンドルです。
キューマネジャへの接続を示すハンドルです。MQCONN命令の戻り値を指定してください。
● Hobj(MQHOBJ型) −input/output
オブジェクトハンドルです。
クローズするオブジェクトを示すハンドルです。どんなオブジェクトタイプでもかまいません。MQOPEN命令の戻り値を指定してください。
命令が成功すると,この引数には次の値が返されます。
● Options(MQLONG型) −input
MQCLOSE命令の動作を制御するクローズオプションです。
オブジェクトのクローズの方法を示します。永続的動的キューの場合だけ,キューを残す方法または削除する方法のどちらかでクローズできます。なお,永続的動的キューは,DefinitionType属性がMQQDT_PERMANENT_DYNAMICのキューです。クローズオプションについては,表2-1に示します。
次のどれかの値を取れます。
- MQCO_NONE
-
特別なクローズオプションを要求しません。
次の場合に指定します。
-
キュー以外のオブジェクト
-
定義済みキュー
-
一時的動的キュー(ただし,Hobjのハンドルが,そのキューを生成したMQOPEN関数で返されたハンドルと異なる場合だけ指定できます)
-
配布リスト
上記の場合,オブジェクトは削除されないで残されます。
このオプションを一時的動的キューに指定した場合で,Hobjのハンドルがそのキューを生成したMQOPEN命令で返されたハンドルのとき,キューは削除されます。そのほかのハンドルのときは,キューは残ります。
このオプションを永続的動的キューに指定した場合,キューは削除されないで残ります。
-
- MQCO_DELETE
-
キューを削除します。
次のどちらかの場合,キューは削除されます。
-
永続的動的キューで,メッセージを格納しないで,かつコミットしていないトランザクションからの登録・取り出しがない場合
ほかのアプリケーションによる登録・取り出しがない場合も含みます。
-
一時的動的キューで,Hobjのハンドルがそのキューを生成したMQOPEN命令で返されたハンドルの場合
上記以外の場合,理由コードMQRC_OPTION_NOT_VALID_FOR_TYPEで命令は失敗します。このとき,キューは削除されません。
-
- MQCO_DELETE_PURGE
-
キューを強制的に削除します。
次のどちらかの場合,キューは削除されます。
-
永続的動的キューで,コミットしていないトランザクションからの登録・取り出しがない場合
ほかのアプリケーションによる登録・取り出しがない場合も含みます。
-
一時的動的キューで,Hobjのハンドルがそのキューを生成したMQOPEN命令で返されたハンドルの場合
上記以外の場合,理由コードMQRC_OPTION_NOT_VALID_FOR_TYPEで命令は失敗します。この場合,キューは削除されません。
-
クローズオプションとオブジェクトの関係を次の表に示します。
オブジェクト |
クローズオプション |
||
---|---|---|---|
MQCO_NONE |
MQCO_DELETE |
MQCO_DELETE_PURGE |
|
キュー以外 |
1 |
2 |
2 |
定義済みキュー |
1 |
2 |
2 |
永続的動的キュー |
1 |
3 |
4 |
一時的動的キュー (作成者) |
5 |
5 |
5 |
一時的動的キュー (作成者以外) |
1 |
2 |
2 |
配布リスト |
1 |
2 |
2 |
- (凡例)
-
1:オブジェクトは削除されません。
2:不正な組み合わせです。
3:キューが空であり,かつ未決着の登録・取り出しがないときだけ削除されます。
4:未決着の登録・取り出しがないときだけ削除されます。
5:オブジェクトは削除されます。
● CompCode(MQLONG型) −output
完了コードです。
次のどれかが返されます。
-
MQCC_OK:成功
-
MQCC_WARNING:警告(一部成功)
-
MQCC_FAILED:失敗
● Reason(MQLONG型) −output
理由コードです。
CompCode引数がMQCC_OKの場合
理由コード |
数値 |
意味 |
---|---|---|
MQRC_NONE |
0 |
理由コードはありません。 |
CompCode引数がMQCC_WARNINGの場合
理由コード |
数値 |
意味 |
---|---|---|
MQRC_INCOMPLETE_GROUP |
2241 |
メッセージグループが完全ではありません。 |
MQRC_INCOMPLETE_MSG |
2242 |
論理メッセージが完全ではありません。 |
CompCode引数がMQCC_FAILEDの場合
理由コード |
数値 |
意味 |
---|---|---|
MQRC_HCONN_ERROR |
2018 |
コネクションハンドルが不正です。 |
MQRC_HOBJ_ERROR |
2019 |
オブジェクトハンドルが不正です。 |
MQRC_OBJECT_DAMAGED |
2101 |
オブジェクトが破損しています。 |
MQRC_OPTION_NOT_VALID_FOR_TYPE |
2045 |
オブジェクトタイプに適合しないオプションが指定されました。 |
MQRC_OPTIONS_ERROR |
2046 |
オプションが不正です。または,指定されていません。 |
MQRC_Q_NOT_EMPTY |
2055 |
キューに一つ以上のメッセージがあります。または,キューに対する登録・取り出し要求がコミットしていません。 |
MQRC_RESOURCE_PROBLEM |
2102 |
システム資源が不足しています。 |
MQRC_STORAGE_NOT_AVAILABLE |
2071 |
記憶容量が不足しています。 |
MQRC_UNEXPECTED_ERROR |
2195 |
予期しないエラーが発生しました。 |
詳細は,「付録B.2 理由コード」を参照してください。
注意事項
-
アプリケーションがMQDISC命令を呼び出したとき,または正常終了・異常終了したときに,オープンしたままのオブジェクトはMQCO_NONEオプションで自動的にクローズされます。
-
キューをクローズするときは,次の点に注意してください。
-
トランザクション内で処理するときでも,同期点の結果に影響しません。同期点の前でもあとでもキューをクローズできます。
-
MQOO_BROWSEオプションでキューをオープンしていた場合,検索カーソルは消滅します。MQOO_BROWSEオプションで再びオープンしたときは,新しい検索カーソルが生成されます。MQOO_BROWSEオプションについては,この章の「MQOPEN命令 − オブジェクトのオープン」でOptions引数の説明を参照してください。
-
MQCLOSE命令を呼び出した時点で,そのハンドルで排他状態にしたメッセージがある場合,排他状態は解除されます。「1. データタイプ」の「MQGMO構造体 − メッセージ取り出しオプション」でOptionsフィールドのMQGMO_LOCKオプションの説明を参照してください。
-
-
クローズされるオブジェクトが動的キュー(永続的動的キューまたは一時的動的キュー)であるとき,次の点に注意してください。
-
一時的動的キューの場合で,Hobjのハンドルがそのキューを生成したMQOPEN命令で返されたハンドルのとき,キュー内にメッセージが格納されていてもキューは削除されます。このとき,Options引数に指定したオプションは関係ありません。これは,コミットしていないMQGET命令,MQPUT命令またはMQPUT1命令が,このハンドルを使用した場合,使用しなかった場合,およびそのキューに対して未決着のままの場合でも同様です。コミットしていない処理での更新が失われた場合も,トランザクションの失敗にはなりません。
-
動的キューが削除されるときにキューに対して未解決のMQGMO_WAITオプションを指定するMQGET命令は取り消され,理由コードMQRC_Q_DELETEDが返されます。
MQGMO_WAITオプションについては,「1. データタイプ」の「MQGMO構造体 − メッセージ取り出しオプション」でOptionsフィールドの説明を参照してください。
動的キューが削除されたあとで,取得済みのHobjハンドルを使用してMQCLOSE命令以外の命令がキューを参照しようとすると,理由コードMQRC_Q_DELETEDで失敗します。
削除されたキューにアプリケーションからアクセスできなくても,キューを参照するすべてのハンドルがクローズされ,キューに影響するすべてのトランザクションがコミットされるかロールバックされるまでは,キューはシステムから除去されず,関連リソースも解放されないことに注意してください。
-
一時的動的キューをクローズするときにMQCLOSE命令に指定したHobjハンドルが,キューを作成したMQOPEN命令が返したハンドルである場合,キューは削除されます。これはMQCLOSE命令のクローズオプションに関係なく発生します。キューにメッセージがある場合は破棄されます。報告メッセージは生成されません。
キューに影響を与える未コミットのトランザクションがあるときでも,キューとメッセージは削除されます。しかし,これによってトランザクションは失敗しません。ただし,上記のとおり,各トランザクションがコミットされるかロールバックされるまでは,トランザクションに関連するリソースは解放されません。
-
-
クローズされるオブジェクトが配布リストの場合,次の点に注意してください。
-
配布リストに対する適当なオプションはMQCO_NONEだけです。ほかのオプションが指定されると,理由コードMQRC_OPTIONS_ERRORまたはMQRC_OPTION_NOT_VALID_FOR_TYPEで失敗します。
-
配布リストがクローズされるとき,リスト中のキューについてのおのおのの完了コードと理由コードは,返却されません。CompCode引数とReason引数は結果を確認するためだけに利用できます。
キューのうち一つのクローズに失敗した場合も,キューマネジャは処理を続行し,配布リストの残りのキューをクローズしようとします。CompCode引数とReason引数は失敗を記述した情報を返します。しかし,ほとんどのキューのクローズに成功しても,完了コードがMQCC_FAILEDになる場合があります。なお,エラーの発生したキューは識別できません。
一つ以上のキューでクローズに失敗しても,どんな失敗がCompCode引数とReason引数に報告されるかは定義されていません。
-