MQCLOSE - オブジェクトのクローズ
MQCLOSE 呼び出しは、オブジェクトへのアクセスを解放するもので、MQOPEN 呼び出しの逆です。
構文
MQCLOSE (HCONN, HOBJ, OPTS, CMPCOD, REASON)
使用上の注意
- アプリケーションが MQDISC 呼び出しを発行するか、正常終了または異常終了すると、このアプリケーションによってオープンされたままになっているすべてのオブジェクトは、CONONE オプションで自動的にクローズされます。
- クローズされるオブジェクトがキュー であるときに、以下の点が適用されます。
- キューに対する操作が作業単位の一部として実行される場合は、そのキューは、同期点の前後のいずれでも、同期点の結果に影響を与えることなくクローズすることができます。
- OOBRW オプションを指定してオープンされたキューの場合、ブラウズ・カーソルは破壊されます。 その後で OOBRW オプションによってキューを再オープンした場合は、新しいブラウズ・カーソルが作成されます (MQOPEN で説明している OOBRW オプションを参照してください)。
- MQCLOSE 呼び出しの時点でこのハンドルに対してメッセージが現在ロックされている場合、ロックは解除されます ( MQGMO-メッセージ取得オプション で説明されている GMLK オプションを参照してください)。
- クローズされるオブジェクトが動的キュー (永続または一時) であるとき、以下の点が適用されます。
- 動的キューの場合、オプション CODEL または COPURG は、対応する MQOPEN 呼び出し上に指定されたオプションに関係なく指定することができます。
- 動的キューが削除されると、キューに対して未解決になっている GMWT オプションを持つすべての MQGET 呼び出しは取り消され、理由コード RC2052 が戻ります。 MQGMO-メッセージ読み取りオプションで説明されている GMWT オプションを参照してください。
動的キューが削除された場合、MQCLOSE 以外の呼び出しが前に入手した
HOBJハンドルを使用してキューを参照しようとすると失敗し、理由コード RC2052 が戻ります。削除されたキューにアプリケーションからアクセスできなくても、キューを参照するすべてのハンドルがクローズして、キューに影響を与えるすべての作業単位がコミットされるか、またはバックアウトされるまでは、キューはシステムから除去されず、また関連リソースも解放されない点に注意してください。
- 永続動的キューが削除されると、MQCLOSE 呼び出しで指定した
HOBJハンドルが、キューを作成した MQOPEN 呼び出しによって戻されたハンドルではない 場合は、MQOPEN 呼び出しを妥当性検査するために使用されたユーザー ID が、キューを削除する許可を持っているかどうかが検査されます。 MQOPEN 呼び出し時に OOALTU オプションが指定された場合、検査されたユーザー ID はODAUになります。この検査は以下のような場合は実行されません。- 指定されたハンドルが、キューを作成した MQOPEN 呼び出しによって戻されたハンドルである場合。
- 削除されるキューが一時動的キューの場合。
- 一時動的キューがクローズされるときに、MQCLOSE 呼び出しで指定された
HOBJハンドルが、キューを作成した MQOPEN 呼び出しによって戻されたハンドルである場合、そのキューは削除されます。 これは MQCLOSE 呼び出し時にクローズ・オプションが指定されているか否かにかかわりなく起こります。 キューにメッセージがある場合、それらは廃棄されます。その際、レポート・メッセージは生成されません。キューに影響を与える、コミットされていない作業単位がある場合でも、キューとそのメッセージは削除されます。しかし、このことは作業単位が失敗する原因にはなりません。 ただし、前述のとおり、各作業単位がコミットされるか、またはバックアウトされるまでは、作業単位に関連するリソースは解放されません。
- クローズされるオブジェクトが配布リスト であるとき、以下の点が適用されます。
- 配布リストに有効なクローズ・オプションは CONONE のみです。この呼び出しは、他のオプションが指定されている場合には失敗し、理由コード RC2046 または RC2045 が戻ります。
- 配布リストがクローズされると、リスト内のキューについて個々の完了コードおよび理由コードは戻されません。診断目的に利用できるのは、この呼び出しの
CMPCODおよびREASONパラメーターのみです。いずれかのキューのクローズ時に障害が起こっても、キュー・マネージャーは処理を継続し、配布リスト内の残りのキューをクローズしようとします。 次に、この呼び出しの
CMPCODおよびREASONパラメーターが、その障害を記述する情報を戻すよう設定されます。 このため、キューのほとんどが正常にクローズされた場合でも、完了コードが CCFAIL になる場合があります。 クローズ中にエラーが発生したキューは、識別されません。複数のキュー内に障害がある場合、いずれの障害が
CMPCODおよびREASONパラメーターに報告されるかは定義されません。
- IBM® iでは、最初の MQOPEN 呼び出しが発行されたときにアプリケーションが暗黙的に接続されていた場合、最後の MQCLOSE が発行されたときに暗黙の MQDISC が発生します。互換モードで実行するアプリケーションのみ、暗黙に接続することができます。他のアプリケーションが明示的にキュー・マネージャーに接続するには、MQCONN 呼び出しか MQCONNX 呼び出しを発行しなければなりません。
重要: まだ互換モードを使用している場合は、アプリケーションを再コンパイルし、代わりに静的バインド呼び出しを使用することを検討してください。 IBM iでの RPG アプリケーションの互換モード を参照してください。
パラメーター
MQCLOSE 呼び出しには、以下のパラメーターがあります。
- HCONN (10 桁の符号付き整数) - 入力
接続ハンドル。
このハンドルは、キュー・マネージャーに対する接続を表します。
HCONNの値は、先行の MQCONN または MQCONNX 呼び出しによって戻されたものです。互換モードで実行するアプリケーションの IBM i では、MQCONN 呼び出しを省略できます。また、HCONNには以下の値を指定できます。- HCDEFH
- デフォルトの接続ハンドル。
重要: まだ互換モードを使用している場合は、アプリケーションを再コンパイルし、代わりに静的バインド呼び出しを使用することを検討してください。 IBM iでの RPG アプリケーションの互換モード を参照してください。- HOBJ (10 桁の符号付き整数) - 入出力
オブジェクト・ハンドル
このハンドルは、クローズするオブジェクトを表します。 オブジェクトは、どのタイプでも構いません。
HOBJの値は、前の MQOPEN 呼び出しで戻されたものです。呼び出しが正常に完了すると、キュー・マネージャーは、環境に対して有効なハンドルでない値にこのパラメーターを設定します。 値は、以下のとおりです。- HOUNUH
- 使用できないオブジェクト・ハンドル。
- OPTS (10 桁の符号付き整数) - 入力
MQCLOSE のアクションを制御するオプション。
OPTSパラメーターのオブジェクトのクローズ方法を制御します。 複数の方法でクローズできるのは、永続動的キューおよびサブスクリプションのみです。 永続動的キューは、保持することも削除することもできます。これらは、値 QDPERM を持つDefinitionType属性を持つキューです ( キューの属性 で説明されているDefinitionType属性を参照してください)。 クローズ・オプションは、このトピックの後の表に要約されています。永続サブスクリプションは保持することも除去することもできます。これらは、SODUR オプションを指定した MQSUB 呼び出しを使用して作成されます。
管理対象の宛先 (SOMAN オプションを使用した MQSUB 呼び出しで戻される
Hobjパラメーター) へのハンドルを閉じる場合、関連したサブスクリプションも除去されたときには、キュー・マネージャーは取得されていないパブリケーションをすべてクリーンアップします。 これは、MQSUB 呼び出しで戻されるHsubパラメーターで CORMSB オプションを使用することによって行われます。 非永続サブスクリプションの場合、CORMSB は MQCLOSE でのデフォルトの振る舞いであることに注意してください。非管理対象の宛先へのハンドルを閉じる場合、パブリケーションが送信されるキューのクリーンアップはユーザーの責任で行います。 まず CORMSB を使用してサブスクリプションを閉じてから、キューに何も残らなくなるまでメッセージを処理することをお勧めします。
以下のいずれかを 1 つのみ指定する必要があります。
- CMPCOD (10 桁の符号付き整数) - 出力
完了コード。
これは、以下のいずれかになります。- CCOK
- 正常終了。
- CCWARN
- 警告 (部分完了)。
- CCFAIL
- 呼び出し失敗。
- REASON (10 桁の符号付き整数) - 出力
CMPCODを限定する理由コード。CMPCODが CCOK の場合- RCNONE
- (0, X'000') レポートする理由コードはありません。
CMPCODが CCWARN の場合- RC2241
- (2241, X'8C1') メッセージ・グループが不完全である。
- RC2242
- (2242, X'8C2') 論理メッセージが不完全である。
CMPCODが CCFAIL の場合- RC2219
- (2219, X'8AB') 前の呼び出しが完了する前に MQI 呼び出しが再入力されました。
- RC2009
- (2009, X'7D9') キュー・マネージャーとの接続が失われました。
- RC2018
- (2018, X'7E2') 接続ハンドルが無効です。
- RC2019
- (2019, X'7E3') オブジェクト・ハンドルが無効です。
- RC2035
- (2035, X'7F3') アクセスは許可されません。
- RC2101
- (2101, X'835') オブジェクトが損傷しました。
- RC2045
- (2045, X'7FD') オプションが、オブジェクト・タイプとして無効です。
- RC2046
- (2046, X'7FE') オプションが無効であるか、矛盾しています。
- RC2058
- (2058, X'80A') キュー・マネージャー名が無効であるか、認識されていません。
- RC2059
- (2059, X'80B') キュー・マネージャーを接続に使用できません。
- RC2162
- (2162, X'872') キュー・マネージャーのシャットダウン中です。
- RC2055
- (2055, X'807') メッセージ、またはコミットされていない 書き込み要求か取得要求が、1 つ以上キューに入っています。
- RC2102
- (2102, X'836') 使用できるシステム・リソースが不足しています。
- RC2063
- (2063, X'80F') セキュリティー・エラーが発生しました。
- RC2071
- (2071, X'817') ストレージが不足しています。
- RC2195
- (2195, X'893') 予期しないエラーが発生しました。
RPG 宣言
C*..1....:....2....:....3....:....4....:....5....:....6....:....7..
C CALLP MQCLOSE(HCONN : HOBJ : OPTS :
C CMPCOD : REASON)
D*..1....:....2....:....3....:....4....:....5....:....6....:....7..
DMQCLOSE PR EXTPROC('MQCLOSE')
D* Connection handle
D HCONN 10I 0 VALUE
D* Object handle
D HOBJ 10I 0
D* Options that control the action of MQCLOSE
D OPTS 10I 0 VALUE
D* Completion code
D CMPCOD 10I 0
D* Reason code qualifying CMPCOD
D REASON 10I 0