MQSeries のサポート

EGL では任意のターゲット・プラットフォーム上で MQSeries® メッセージ・キューへのアクセスがサポートされます。 以下のいずれかの方法でアクセスを提供できます。

1 つのプログラムで上記の 2 つの方法を組み合わせて使用することもできます 。しかし、通常はいずれか一方のみを使用します。

どの方法を使用するかにかかわらず、オプション・レコード を カスタマイズすることによってさまざまなランタイム条件を制御できます。 このレコードは、EGL ランタイム・サービスが MQSeries への 呼び出しで渡すグローバル基本レコードです。 オプション・レコードをプログラム変数として宣言すると、EGL のインストール済みオプション・レコード・パーツを typedef として使用でき ます。つまり、インストール済みパーツを自身の EGL ソース・ファイルにコピーしてパーツをカスタ マイズし、カスタマイズしたパーツを typedef として使用することができます。

どの方法を使用するかによって、EGL ランタイム・サービスで MQSeries が オプション・レコードを使用できるようにする方法が異なります。
オプション・レコードおよびデフォルトで MQSeries に渡される値の詳細については、『MQ レコード用のオプション・レコード』を参照してください。 MQSeries 自体の詳細については、以下の資料を参照してください。

接続

以下を実行して最初に文を呼び出したときに、キュー・マネー ジャー (接続キュー・マネージャー) に接続されます。
  • メッセージ・キューにアクセスする EGL の add または get next
  • EGL 関数 MQCONN または MQCONNX の呼び出し

1 度に接続できる接続キュー・マネージャーは 1 つのみです。ただし、接続キ ュー・マネージャーの管理下にあるキューであれば 1 度に複数のキューに接続で きます。現行の接続キュー・マネージャー以外のキュー・マネージャーに直接接続す るには、まず MQDISC を呼び出して最初のキュー・マネージャーを切断してから、addget next、MQCONN、MQCONNX のいずれかを呼び出して 2 番目のキュー・マネージ ャーに接続する必要があります。

また、リモート・キュー・マネージャー の管理下にあるキューにアクセスでき ます。リモート・キュー・マネージャーとは、接続キュー・マネージャーとの相互作用 が可能なキュー・マネージャーです。2 つのキュー・マネージャー間のアクセスは、MQSeries 自体がこのようなアクセスを許可するよう構成されている場合にのみ可能です。

接続キュー・マネージャーへのアクセスが終了するのは、MQDISC を呼び出すか 、コードが終了した場合です。

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

作業単位 (UOW) に queue-access 文を組み込むことができま す。これにより、キューに対する変更すべてを単一の処理ポイントでコミ ットまたはロールバックできます。文が作業単位内にある場合、以下のことが当てはま ります。
  • EGL の get next 文 (または EGL の MQGET 呼び出し) によってメッセージが除 去されるのは、コミットが発生した場合のみである
  • EGL の add 文 (または EGL の MQPUT 呼び出し) によってキューに入 れられたメッセージは、コミットが発生した場合にのみ作業単位の外部から見える

queue-access 文が作業単位内にない場合は、メッセージ・ キューに対する変更はそれぞれ即時にコミットされます。

MQSeries 関連の EGL の add 文または get next 文は、 プロパティー includeMsgInTransaction が MQ レコードに対して有効である場合に作業単位に組み込まれます。 生成されたコードには以下のオプションが含まれています 。
  • MQGET の場合は MQGMO_SYNCPOINT
  • MQPUT の場合は MQPMO_SYNCPOINT
プロパティー includeMsgInTransaction を MQ レコードに対して指定しないと、queue-access 文が作業単位の外部で実行されます。生成されたコードには以下のオプションが含まれています 。
  • MQGET の場合は MQGMO_NO_SYNCPOINT
  • MQPUT の場合は MQPMO_NO_SYNCPOINT

コードによって作業単位が終了すると、EGL はプログラムによってアクセスさ れているすべて の回復可能リソースをコミットまたは ロールバックします。これにはデータベース、メッセージ・キュー、およ び回復可能ファイルが含まれます。このような結果は、システム機能 (sysLib.commitsysLib.rollback) を使用する場合、または EGL が MQSeries (MQCMIT, MQBACK) を呼び出す場合にも発生します。いずれの場合も適切な EGL システム機能が呼び出されます。

ロールバックが発生するのは、EGL ランタイム・サービスにより検出された エラーが原因で EGL プログラムが早期に終了した場合です。

カスタマイズ

add 文と get next 文のデフォルト処理に依存せずに MQSeries との相互作用をカスタマイズする場合は、このセクションの情報を検討してください。

EGL dataTable パーツ

EGL dataTable パーツ一式は、MQSeries と対話する場合に有効です。 実行時に、各パーツにより、EGL 提供の関数がメモリー・ベースのリストから値を検索できるようにします。次のセクションでは、 データ・テーブルの配置方法の詳細について説明します。

カスタマイズを可能にする方法

カスタマイズを可能にするには、各種のインストール済み EGL ファイル を一切変更せずに プロジェクトに導入する必要があります。ファイルには以下のものがあります。
records.egl
プログラムで使用されるオプション・レコード用の typedefs として使用可能 な、基本レコード・パーツが含まれています。また、それらのレコ ードによって使用される構造体パーツも含まれています。これによって柔軟性が提供 されるため、独自のレコード・パーツを開発することができます。
functions.egl
以下の 2 組の関数が含まれています。
  • MQSeries コマンド機能。MQSeries に直接アクセスします。
  • 初期化関数。プログラムで使用されるオプション・レコードに初 期値を設定できます。
mqrcode.egl、mqrc.egl、mqvalue.egl
コマンドおよび初期化関数によって使用される一連の EGL dataTable パー ツが含まれています。

作業内容は次のとおりです。

  1. ワークベンチにファイルをインポートするためのプロセスを使用し、それらのファイルを EGL プロジェクトに導入します。ファイルは以下のディレクトリーに存在します。
    installationDir¥egl¥eclipse¥plugins¥
    com.ibm.etools.egl.generators_version¥MqReusableParts
    installationDir
    製品のインストール・ディレクトリー。例えば、C:¥Program Files¥IBM¥RSPD¥6.0 など。 これから使用しようとしている製品をインストールする前に Rational® Developer 製品をインストールし、保持していた場合は、以前のインストール時に使用されていたディレクトリーを指定することが必要になる場合があります。
    version
    最新バージョンのプラグイン (例: 6.0.0)
  2. これらのパーツをプログラムで使用可能にするには、1 つまたは複数の EGL import 文を プログラム・ファイルに記述します。 インポートするファイルが、コードを開発中のプロジェクト以外の プロジェクトにある場合は、作業中のプロジェクトが他のプロジェクトを参照する ようにしてください。

    詳細については、『インポート』を参照してください。

  3. プログラムで、グローバル変数を宣言します。
    • MQRC、MQRCODE、および MQVALUE を宣言します。それぞれが、変数と同じ 名前を持つ dataTable パーツを typedef として使用する必要があります。
    • MQSeries に渡すオプション・レコードごとに、オプション・レコード・パーツを typedef として使用する基本レコードを宣言します。各パーツの詳細については、『MQ レコード用のオプション・レコード』を参照してください。
  4. 関数で、MQSeries に渡すオプション・レコードを初期化します。これを簡単に実行するには、インポートされた EGL 初期化関数を所 定のオプション・レコードに対して呼び出します。それぞれの関数の名前は、レコードに対する typedef として使用されるパーツの名前の後ろに _INIT を付けた名前になります。例えば、MQGMO_INIT となります。
  5. オプション・レコードに値を設定します。多くの場合、値を設定するには定数を表す EGL シンボルを割り当てます。これらの各 EGL シンボルは、MQSeries の資料に記載されたシンボルに基づきます。以下の例に示すように、個々のシンボルを連結して複数の EGL シンボルを指定することができます。
      MQGMO.GETOPTIONS = MQGMO_LOCK
                         + MQGMO_ACCEPT_TRUNCATED_MSG
                         + MQGMO_BROWSE_FIRST
  6. MQSeries サポートのカスタマイズ・フィーチャーを使用する特定プログラムを最初に生成するときに、そのプログラムによって使用されるデータ・テーブルも生成します。プログラムで使用されるすべてのデータ・テーブルを生成するには、 ビルド記述子オプション genTables をデフォルトの YES にします。追加情報については、『DataTable パーツ』を参照してください。
フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.