キューを削除します。
次のどちらかの場合,キューは削除されます。
• 永続的動的キューで,メッセージを格納しないで,かつコミットしていないトランザクションから の登録・取り出しがない場合
ほかのアプリケーションによる登録・取り出しがない場合も含みます。
• 一時的動的キューで,Hobj のハンドルがそのキューを生成した MQOPEN 命令で返されたハンド ルの場合
上記以外の場合,理由コード MQRC_OPTION_NOT_VALID_FOR_TYPE で命令は失敗します。こ のとき,キューは削除されません。
MQCO_DELETE_PURGE
キューを強制的に削除します。
次のどちらかの場合,キューは削除されます。
• 永続的動的キューで,コミットしていないトランザクションからの登録・取り出しがない場合 ほかのアプリケーションによる登録・取り出しがない場合も含みます。
• 一時的動的キューで,Hobj のハンドルがそのキューを生成した MQOPEN 命令で返されたハンド ルの場合
上記以外の場合,理由コード MQRC_OPTION_NOT_VALID_FOR_TYPE で命令は失敗します。こ の場合,キューは削除されません。
クローズオプションとオブジェクトの関係を次の表に示します。
表 2‒1 クローズオプションとオブジェクトの関係
オブジェクト クローズオプション
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_AVAILABL E
2071 記憶容量が不足しています。
MQRC_UNEXPECTED_ERROR 2195 予期しないエラーが発生しました。
詳細は,「付録 B.2 理由コード」を参照してください。
注意事項
1. アプリケーションが MQDISC 命令を呼び出したとき,または正常終了・異常終了したときに,オープ ンしたままのオブジェクトは MQCO_NONE オプションで自動的にクローズされます。
2. キューをクローズするときは,次の点に注意してください。
• トランザクション内で処理するときでも,同期点の結果に影響しません。同期点の前でもあとでも キューをクローズできます。
• MQOO_BROWSE オプションでキューをオープンしていた場合,検索カーソルは消滅します。
MQOO_BROWSE オプションで再びオープンしたときは,新しい検索カーソルが生成されます。
MQOO_BROWSE オプションについては,この章の「MQOPEN 命令 − オブジェクトのオー
プン」で Options 引数の説明を参照してください。
• MQCLOSE 命令を呼び出した時点で,そのハンドルで排他状態にしたメッセージがある場合,排他 状態は解除されます。「1. データタイプ」の「MQGMO 構造体 − メッセージ取り出しオプ
ション」で Options フィールドの MQGMO_LOCK オプションの説明を参照してください。
3. クローズされるオブジェクトが動的キュー(永続的動的キューまたは一時的動的キュー)であるとき,
次の点に注意してください。
• 一時的動的キューの場合で,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 命令のクローズオプションに関係なく発生します。キューにメッセージがある場合は破棄されます。
報告メッセージは生成されません。
キューに影響を与える未コミットのトランザクションがあるときでも,キューとメッセージは削除 されます。しかし,これによってトランザクションは失敗しません。ただし,上記のとおり,各ト ランザクションがコミットされるかロールバックされるまでは,トランザクションに関連するリソー スは解放されません。
4. クローズされるオブジェクトが配布リストの場合,次の点に注意してください。
• 配布リストに対する適当なオプションは MQCO_NONE だけです。ほかのオプションが指定され ると,理由コード MQRC_OPTIONS_ERROR または
MQRC_OPTION_NOT_VALID_FOR_TYPE で失敗します。
• 配布リストがクローズされるとき,リスト中のキューについてのおのおのの完了コードと理由コー ドは,返却されません。CompCode 引数と Reason 引数は結果を確認するためだけに利用できます。
キューのうち一つのクローズに失敗した場合も,キューマネジャは処理を続行し,配布リストの残 りのキューをクローズしようとします。CompCode 引数と Reason 引数は失敗を記述した情報を 返します。しかし,ほとんどのキューのクローズに成功しても,完了コードが MQCC_FAILED に なる場合があります。なお,エラーの発生したキューは識別できません。
一つ以上のキューでクローズに失敗しても,どんな失敗が CompCode 引数と Reason 引数に報告 されるかは定義されていません。
MQCONN 命令 − キューマネジャへの接続
機能
MQCONN 命令で,アプリケーションをキューマネジャへ接続できます。この命令では,キューマネジャ のコネクションハンドルが返されます。コネクションハンドルは,以降のそのキューマネジャへの命令で 使用します。
形式
C 言語の場合
MQCONN(PMQCHAR Name, PMQHCONN Hconn, PMQLONG CompCode, PMQLONG Reason)
COBOL 言語の場合
CALL 'MQCONN' USING NAME, HCONN, COMPCODE, REASON.
引数
● Name(MQCHAR48 型) −input
キューマネジャ名です。アプリケーションが接続するキューマネジャの名前です。名前には,次に示す文字を使用できます。
• 英大文字(A〜Z)
• 英小文字(a〜z)
• 数字(0〜9)
• ピリオド(.),スラント(/),アンダスコア(_),パーセント(%)
名前の先頭および中間には,空白を使用できません。末尾には空白を使用できます。名前の中で有効なデー タの末尾を示すためにヌル文字を使用できます。ヌル文字とそれに続く文字はすべて空白として処理され ます。
すべて空白の名前を指定した場合,省略時のキューマネジャ名が使用されます。
指定するキューマネジャ名は接続可能なキューマネジャの名前にする必要があります。
接続できるキューマネジャは,環境に依存します。TP1/Message Queue では,アプリケーションと同じ OpenTP1 で動作するキューマネジャにだけ接続できます。
この引数の長さは,MQ_Q_MGR_NAME_LENGTH に定義されています。
● Hconn(MQHCONN 型) −output
コネクションハンドルです。キューマネジャへの接続を示すハンドルです。以降に呼び出すメッセージキューイング機能の命令で指定 してください。MQDISC 命令を呼び出すと,またはこのハンドルの範囲の処理が終了すると,このハン ドルは無効になります。
このハンドルの範囲は,環境のパラレル処理の最小単位に制限されます。MQCONN 命令を呼び出したパ ラレル処理の単位以外では,このハンドルは無効です。TP1/Message Queue では,パラレル処理の最小 単位はプロセスです。
● CompCode(MQLONG 型) −output
完了コードです。次のどれかが返されます。
•
MQCC_OK:成功
•
MQCC_WARNING:警告(一部成功)
•
MQCC_FAILED:失敗
● Reason(MQLONG 型) −output
理由コードです。CompCode 引数が MQCC_OK の場合
理由コード 数値 意味
MQRC_NONE 0 理由コードはありません。
CompCode 引数が MQCC_WARNING の場合
理由コード 数値 意味
MQRC_ALREADY_CONNECTED 2002 アプリケーションはすでに接続されています。
CompCode 引数が MQCC_FAILED の場合
理由コード 数値 意味
MQRC_HCONN_ERROR 2018 コネクションハンドルが不正です。
MQRC_Q_MGR_NAME_ERROR 2058 キューマネジャ名が不正です。または,キューマネジャ名を認識でき ません。
MQRC_Q_MGR_NOT_AVAILABLE 2059 キューマネジャが接続できる状態ではありません。
MQRC_Q_MGR_STOPPING 2162 キューマネジャが終了処理中です。