メッセージ・キューに対する読み取りと書き込み

メッセージ・キューへの書き込みは EGL add ステートメントを使用し、メッセージ・キューからの読み取り は get next ステートメントを使用します。

プログラムで WebSphere® MQ レコードについて初めて EGL ステートメントを使用すると、EGL はキュー・マネージャーへのアクティブな接続があるかどうかを検査します。 ない場合には、1 つの接続を作成します。

メッセージ・キューに対して読み取りまたは書き込みを行った後で、変更のコミットまたはロールバックを行うことができます。

キュー・マネージャーへの接続

EGL プログラムで同時に接続できるのは 1 つのキュー・マネージャーのみです。

EGL は、プログラムの最初の add ステートメントまた は get next ステートメントでキュー・マネージャーに自動的に接続します。この際に、メッセージ・キュー・レコードに関連付けられたシステム・リソース名で指定されたキュー・マネージャー名を使用します。 キュー・マネージャー名が指定されていない場合は、ご使用のシステムに定義されている デフォルトのキュー・マネージャーが使用されます。 EGL は、プログラムの終了時に自動的にキュー・マネージャーから切断し、 開いているファイルをすべて閉じます。そして、作業単位がまだ開いている場合には、現在の作業単位をコミットします。

EGL は、MQCONN および MQDISC という名前のサンプル関数を備えています。これらは、WebSphere MQ API から MQCONN および MQDISC ルーチンを呼び出します。 以下の状況でこれらの関数を使用します。
  • 接続キュー・マネージャーとキューが属しているキュー・マネージャーが異なる 場合、MQCONN 関数呼び出しを使用して接続してから 、add ステートメント または get next ステートメントをプログラムで実行します。 その他の場合、add ステートメント または get next ステートメントは、システム・リソース名で 指定されたキュー・マネージャーへの接続を試行することなく、現在のオープン接続を使用します。
  • 長時間稼働するプログラムのプログラム終了前に、キュー・マネージャーからそのプログラムを切断したい場合は、MQCONN 関数呼び出しを使用して初回の接続を行い、すべてのキュー・アクセスの 完了後に MQDISC 関数呼び出しを使用して切断します。

MQCONN および MQDISC について詳しくは 、WebSphere MQ API 直接呼び出しの使用を参照してください。 ワークステーション環境 (Windows NT、OS/2、AIX®、Solaris、および HP) では、WebSphere MQ は、 プログラムがメッセージ・キュー・マネージャーと同じシステム上で稼働しているかどうかという点や 、サーバー・システム上のマネージャーと通信する WebSphere MQ クライアントとしてプログラムが稼働しているかどうかという点に応じて、WebSphere MQ プログラム用にさまざまなランタイム・ライブラリーを提供します。 AIX および HP システムでは、同様に、スレッド化環境および非スレッド化環境について、別々のライブラリーが提供されます。

キューへのメッセージの書き込み

I/O オブジェクトとして MQ メッセージ・キュー・レコードを 指定した add ステートメントを使用して、 キューにメッセージを書き込みます。 EGL は以下のアクションを実行します。
  1. キューへの接続を確立する。
  2. キューへの接続を開く。
  3. メッセージをキューに入れる。
以下の状況がいずれも該当する場合、現在接続しているキュー・マネージャーで、リモート・キューのローカル定義を使用する必要があります。
  • add ステートメントを使用して、別のキュー・マネージャーの、キューにメッセージを書き込もうとしている。
  • add ステートメントを使用して、以前にメッセージをキューに書き込んだ。

EGL は、今後の add ステートメントのために、接続ハンドルを保存します。

以下のいずれかの状況では、キューへの接続を閉じるため に、add ステートメントの 後に close ステートメントを使用する必要があります。
  • get next ステートメントを使用する前。
  • 別のプログラムによるアクセスのために、キューをリリースするため。
  • 長時間稼働するプログラムがあり、そのプログラムのキューの処理が完了した場合に、 キューをリリースするため。

EGL は、プログラムの終了処理時に、キューへの接続を自動的に閉じます。

キューからのメッセージの読み取り

I/O オブジェクトとしてメッセージ・キュー・レコードを指定 した get next ステートメントを使用して、キューから メッセージを読み取ります。 get next ステートメントを使用するときに、EGL は以下のアクションを実行します。
  1. キュー・マネージャーに接続していない場合、キュー・マネージャーに接続する。
  2. キューがまだ開いていない場合、キューを開く。
  3. キューから次のメッセージを取得する。
以下の状況がいずれも該当する場合、現在接続しているキュー・マネージャーで、リモート・キューのローカル定義を使用する必要があります。
  • get next ステートメントを使用して、別のキュー・マネージャーで、メッセージをキューから読み取っている。
  • get next ステートメントを使用して、以前にキューからメッセージを読み取った。
以下のいずれかの状況では、キューへの接続を閉じるため に、get next ステートメントの後 に close ステートメントを使用する必要があります。
  • add ステートメントを使用する前。
  • 別のプログラムによるアクセスのために、キューをリリースするため。
  • 長時間稼働するプログラムがあり、そのプログラムのキューの処理が完了した場合に、 キューをリリースするため。

EGL は、プログラムの終了処理時に、キューへの接続を自動的に閉じます。

メッセージのコミットまたはロールバック

作業単位を定義するトランザクションでメッセージを結合するときに、 メッセージをグループとしてコミットするかロールバックすることができます。 作業単位がコミットされると、トランザクションに含まれるものはすべてファイナライズされます。 作業単位がロールバックされると、トランザクションに含まれるものはすべて除去されます。

コミットおよびロールバックで使用される方式は、ご使用の環境によって異なります。 以下の環境では、MQ とは無関係に、コミットおよびロールバックを処理します。
  • AS/400®
  • CICS® for MVS/ESA
  • CICS for VSE/ESA
  • IMS™

これらのトランザクション環境において、メッセージ・キューのコミットおよびロールバックは、2 フェーズ・コミット・プロトコルを使用して、DB2® データベースのようなその他のリカバリー可能 リソースのコミットおよびロールバックと連動します。

その他の環境では、別々のマネージャーのリソースはそれぞれ単独でコミットされます。 sysLib.commit() および sysLib.rollback() を使用すると、EGL は、コミットおよびロールバック用の適切な WebSphere MQ 呼び出しを自動的に実行します。


フィードバック