WebSphere MQ メッセージ・キュー・アクセス

EGL では、いずれのターゲット・プラットフォームにおいても、 WebSphere® MQ (以前の MQSeries®) メッセージ・キューのアクセスをサポートしています。

このようなアクセスを、次のいずれかの方法で提供できます。

これらの 2 つの方法をプログラム内で混在させることができます。ただし、ベスト・プラクティスとしては、 いずれか一方を排他的に使用します。

どちらの方法でも、オプション・レコードを使用することで、各種のランタイム条件を制御できます。 オプション・レコードは、特定の目的を持つグローバルな BasicRecord パーツに基づく変数のことです。 EGL は、呼び出し時のこれらの変数を WebSphere MQ へと渡します。EGL には多数のサンプル・レコード・パーツが用意されており、 それらのサンプルをオプション・レコードの基礎として使用することができます。

選択した方法により、EGL による WebSphere MQ に対するオプション・レコードの使用方法が決まります。
オプション・レコードの詳細、および WebSphere MQ にデフォルトで渡される値についての詳細は、 MQRecord のオプション・レコードを参照してください。WebSphere MQ そのものについての詳細は、次の資料を参照してください。

接続

キュー・マネージャー (接続キュー・マネージャー と呼んでいます) への接続は、 次のいずれかのステートメントを最初に使用するときに行います。
  • メッセージ・キューにアクセスする EGL add または get next ステートメント
  • EGL 関数 MQCONN または MQCONNX の呼び出し。

一度にアクセスできる接続キュー・マネージャーは、1 つのみです。 ただし、 接続キュー・マネージャーの制御下にある複数のキューへアクセスすることができます。 現行の接続キュー・マネージャー以外のキュー・マネージャーに直接アクセスするには、 MQDISC を呼び出して最初のキュー・マネージャーから切断し、次に addget next、MQCONN、または MQCONNX を呼び出して 2 番目のキュー・マネージャーに接続する必要があります。

また、リモート・キュー・マネージャー の制御下にあるキューへのアクセスも可能です。 リモート・キュー・マネージャーとは、接続キュー・マネージャーが対話することのできるキュー・マネージャーです。 2 つのキュー・マネージャー間でのアクセスは、 WebSphere MQ そのものがそのアクセスを許可するよう構成されている場合にのみ行えます。

接続キュー・マネージャーへのアクセスは、MQDISC の呼び出し時、またはコードの終了時に終了します。

トランザクションにメッセージを組み込む

キュー・アクセス・ステートメントを作業単位に組み込むことで、 キューへ行ったすべての変更が、単一の処理ポイントにおいてコミットまたはロールバックされるようにできます。 ステートメントを作業単位に含める場合、以下のことが当てはまります。
  • EGL get next ステートメント (または EGL MQGET 呼び出し) は、 コミットの発生時にのみメッセージを除去します。
  • EGL add ステートメント (または EGL MQPUT 呼び出し) によりキューに置かれたメッセージは、コミットの発生後にのみ作業単位外で可視となります。

キュー・アクセス・ステートメントが作業単位内になければ、メッセージ・キューに対する各変更は即時コミットされます。

WebSphere MQ 関連の EGL add または get next ステートメントは、 MQRecord に対して includeMsgInTransaction プロパティーが有効である場合に、 作業単位に組み込まれます。生成されたコードには、次のオプションが含まれます。
  • MQGET の場合、MQGMO_SYNCPOINT
  • MQPUT の場合、MQPMO_SYNCPOINT
MQRecord に includeMsgInTransaction プロパティーを指定しない場合、 キュー・アクセス・ステートメントは作業単位の外で実行されます。生成されたコードには、次のオプションが含まれます。
  • MQGET の場合、MQGMO_NO_SYNCPOINT
  • MQPUT の場合、MQPMO_NO_SYNCPOINT

コードで作業単位が終了すると、EGL はプログラムがアクセスしているすべての リカバリー可能リソースをコミットまたはロールバックします (データベース・メッセージ・キュー、回復可能ファイルを含む)。 これは、システム関数 (sysLib.commit, sysLib.rollback) または WebSphere MQ への EGL 呼び出し (MQCMIT、MQBACK) のどちらを使用する場合にも起こります。 いずれの場合も、適切な EGL システム関数が呼び出されます。

EGL プログラムがエラーにより早く終了した場合、ロールバックが行われます。

カスタマイズ

add および get next ステートメントのデフォルトの処理を使用する代わりに、 WebSphere MQ との対話をカスタマイズすることができます。

EGL には、WebSphere MQ との対話に使用できる一連の DataTable パーツが提供されています。各パーツにより、 EGL 提供の関数が実行時に、メモリーをベースとするリストの値を取得できます。次のインストール済みの EGL ファイルを、変更を加えることなく、ご使用のプロジェクトに含める必要があります。
records.egl
オプション・レコードのソースである BasicRecord パーツが含まれます。 また、これらのレコードが使用し、カスタム・オプション・レコードの開発をサポートする、 構造パーツも含まれます。
functions.egl
次の 2 セットの関数を含みます。
  • WebSphere MQ コマンド関数。これは、WebSphere MQ に直接アクセスします。
  • 初期化関数。プログラムで使用するオプション・レコードに初期値を配置するために使用できます。
mqrcode.egl、mqrc.egl、mqvalue.egl
コマンドおよび初期化関数で使用される一連の EGL DataTable パーツを含みます。

次のタスクを実行する必要があります。

  1. 次のディレクトリーからファイルを EGL プロジェクトにインポートします。
    sharedInstallationDir¥plugins¥
    com.ibm.etools.egl.resources_version¥MqReusableParts
    sharedInstallationDir
    製品の共用インストール・ディレクトリー。例えば C:¥Program Files¥IBM¥SDP70Shared。 現在使用している製品をインストールする前に Rational® Developer 製品がインストール済みでこれを保持している場合は、 前のインストールによるディレクトリーを指定することが必要になる場合があります。
    version
    プラグインの最新バージョン。例えば、7.0.100.RFB_20080711_1614。
  2. プログラムでパーツをさらに簡単に使用しやすくするため、プログラムが含まれるファイル内に 1 つ以上の EGL import ステートメントを記述します。インポートするファイルが、コードを開発するプロジェクトと別のプロジェクトにある場合は、 そのプロジェクトを参照していることを確認する必要があります。

    詳しくは、import および use 文を参照してください。

  3. プログラム内でグローバル変数を宣言します。
    • mqrc、mqrcode、および mqvalue DataTable の use 宣言を組み込みます。
    • WebSphere MQ に渡す各オプション・レコードにつき、オプション・レコード・パーツを typedef として使用する基本レコードを宣言します。各パーツについての詳細は、MQRecord のオプション・レコードを参照してください。
  4. 関数内で、各レコードにつきインポートした EGL 初期化関数を呼び出して、 WebSphere MQ に渡すオプション・レコードを初期化します。各関数は、レコード・パーツ名に _INIT を続けた名前をとります。 例えば、 MQGMO_INIT。
  5. オプション・レコード内のフィールドの値を設定します。mqvalue DataTable には単一行のフィールドが含まれています。この各フィールドは、WebSphere MQ 資料に記述されているシンボルに対応します。オプション・レコード内のフィールドの値を設定するには、mqvalue DataTable 内のいずれかのフィールドを使用します。次に例を示します。
    mqgmo.options = mqvalue.mqgmo_lock[1];
    値を追加することにより、オプション・レコードの数値フィールドに値の組み合わせを設定できます。次にこの例を示します。
      mqgmo.options = mqvalue.mqgmo_lock[1] 
                      + mqvalue.mqgmo_accept_truncated_msg[1] 
                      + mqvalue.mqgmo_browse_first[1];
  6. いつテーブルを生成する必要があるかについての詳細は、ターゲット・プログラムの言語が COBOL または Java™ のどちらであるかによって異なります。プログラムで使用されるすべてのデータ・テーブルを生成するため、 ビルド記述子オプション genTables がデフォルトで YES になるようにします。詳しくは、DataTable パーツを参照してください。

COBOL のみでサポートされる機能

次の WebSphere MQ 機能は、 COBOL プログラムを生成する場合にのみサポートされます。
  • トリガー
  • 配布リスト

フィードバック