EGL で生成された Java コードからの IMS プログラムの呼び出し

EGL で生成された Java™ コードから IMS™ プログラムをリモートで呼び出すことができます。呼び出し先プログラムは、EGL または VisualAge® Generator から生成することも、他の言語で作成することもできます。

IMS 上でアクセスされるプログラムは、呼び出し先プログラムそのものではなく、Enterprise Developer Server for z/OS® によって提供される catcher プログラムです。後で示すように、システム・プログラマーは、その catcher プログラムを再リンクする必要があります。そのような作業の結果、EGL で生成された Java コードによってリモートで呼び出されるトランザクションと関連付けられているそれぞれのランタイム PSB の別名が割り当てられます。

ランタイム・プロセスは、以下のとおりです。
  1. EGL ランタイムが、呼び出し側プログラムの生成時に使用されたリンケージ・オプション・パーツから、IMS トランザクション・コードの名前を取り出す。
  2. EGL が、IMS Connect のコネクターを使用して、呼び出し先プログラム名およびパラメーターと共にこのトランザクション・コードを IMS メッセージ・キューに送信する。
  3. catcher プログラムが呼び出し先プログラム名およびパラメーターをメッセージ・キューから読み取り、z/OS 呼び出しを使用して、要求されたプログラムを起動する。
  4. 制御権を再び取得する際、catcher プログラムは、戻されたデータを IMS キューに送信する。
  5. IMS Connect がそのデータをキューから読み取り、データを呼び出し側プログラムに戻す。
以下に例を示します。
  1. IMS で、システム・プログラマーが以下の作業を行うものとします。
    1. トランザクション (例: TRAN1) を PSB (例: PSB1) と関連付けるシステム定義を作成する。
    2. catcher プログラム ELAISVN に別名 PSB1 を割り当てるため、その catcher プログラムをリンクする。 このリンケージには、この種の別名を最大 64 個組み込むことができます。 モジュール名は、ユーザーが選択した任意の名前にすることができます。 64 個を超える別名を追加する場合には、2 つ目のロード・モジュールを作成してください。
  2. Java プログラムに、PGMX を呼び出すため、およびそのプログラム用のパラメーターを提供するための文を入れる。
  3. プログラムの生成に使用するビルド記述子で、linkage ビルド記述子オプションを、pgmLinkage というリンケージ・オプション・パーツに設定する。
  4. プログラム PGMX のリンケージ・オプション・パーツで、callLink エレメントおよび serverID プロパティーを、該当するトランザクション・コード (この例では TRAN1) に設定する。
  5. 実行時には、IMS Connect がトランザクション・コード (TRAN1)、プログラム名 (PGMX)、およびパラメーターを IMS メッセージ・キューに送信する。
  6. TRAN1 が呼び出されたので、IMS は PSB1 をスケジュールする。 この PSB1 によって catcher プログラムが開始される。
  7. catcher プログラムがメッセージ・キューからプログラム名 (PGMX) およびパラメーターを読み取り、それから PGMX を呼び出す。
  8. PGMX が完了すると、制御権が catcher プログラムに戻される。 catcher プログラムは、戻されたデータを IMS メッセージ・キューに入れる。
  9. IMS Connect がそのデータを Java コードに戻す。
IMS に対してトランザクション TRAN1 をメッセージ処理プログラムとして定義する必要があります。次の IMS システム定義をモデルとして使用してください。
APPLCTN PGMTYPE=TP,PSB=PSB1
TRANSACT CODE=TRAN1,MODE=SNGL,EDIT=ULC

EDIT=ULC をトランザクション定義で指定しない場合、データは大文字変換されます。

JCL システム・プログラマーが catcher プログラム ELAISVN を再リンクするときに利用できるコードの例を以下に示します。 この例では、別名 PSB1 と PSB2 を割り当てるものとします。
//L    EXEC ELARLINK
//L.SYSLMOD DD DISP=SHR,DSN=load-library-name
//L.SYSIN DD *
INCLUDE SELALMD(ELAISVN)
ENTRY ELAISVN
ALIAS PSB1
ALIAS PSB2
NAME load-module-name(R)
/* 
load-library-name
ロード・ライブラリーの名前。
load-module-name
ロード・モジュールの名前。 通常は ELAISVN。
IMS では、ランタイム PSB の名前はトランザクションの最初のプログラムの名前 (または、この例のように別名) と同じでなければなりません。呼び出し先プログラムが、リモート・コードからだけでなく、IMS 上の別のトランザクション内で呼び出せるようにしたい場合は、以下のようにします。
  1. 2 つ目の PSB を作成し、そのトランザクションの最初のプログラムと同じ名前を付ける。
  2. その PSB がリモート呼び出しのためにスケジュールされた PSB のように動作するよう、構成する。

関連概念
ランタイム PSB および PCB の EGL サポート
IMS ランタイム・ サポート
リンケージ・オプション・パーツ

関連項目
callLink エレメント

フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.