EGL
で生成された Java™ コードから
IMS™
プログラムをリモートで呼び出すことができます。呼び出し先プログラムは、EGL または
VisualAge®
Generator から生成することも、他の言語で作成することもできます。
IMS
上でアクセスされるプログラムは、呼び出し先プログラムそのものではなく、Enterprise Developer
Server for z/OS®
によって提供される catcher プログラムです。後で示すように、システム・プログラマーは、その
catcher プログラムを再リンクする必要があります。そのような作業の結果、EGL
で生成された Java
コードによってリモートで呼び出されるトランザクションと関連付けられているそれぞれのランタイム
PSB の別名が割り当てられます。
ランタイム・プロセスは、以下のとおりです。
-
EGL
ランタイムが、呼び出し側プログラムの生成時に使用されたリンケージ・オプション・パーツから、IMS
トランザクション・コードの名前を取り出す。
- EGL が、IMS Connect
のコネクターを使用して、呼び出し先プログラム名およびパラメーターと共にこのトランザクション・コードを
IMS
メッセージ・キューに送信する。
- catcher プログラムが呼び出し先プログラム名およびパラメーターをメッセージ・キューから読み取り、z/OS 呼び出しを使用して、要求されたプログラムを起動する。
- 制御権を再び取得する際、catcher プログラムは、戻されたデータを IMS キューに送信する。
- IMS Connect
がそのデータをキューから読み取り、データを呼び出し側プログラムに戻す。
以下に例を示します。
- IMS
で、システム・プログラマーが以下の作業を行うものとします。
- トランザクション (例: TRAN1) を PSB (例: PSB1) と関連付けるシステム定義を作成する。
- catcher プログラム ELAISVN に別名 PSB1 を割り当てるため、その catcher プログラムをリンクする。
このリンケージには、この種の別名を最大 64 個組み込むことができます。
モジュール名は、ユーザーが選択した任意の名前にすることができます。
64
個を超える別名を追加する場合には、2 つ目のロード・モジュールを作成してください。
- Java
プログラムに、PGMX を呼び出すため、およびそのプログラム用のパラメーターを提供するための文を入れる。
- プログラムの生成に使用するビルド記述子で、linkage
ビルド記述子オプションを、pgmLinkage というリンケージ・オプション・パーツに設定する。
- プログラム PGMX のリンケージ・オプション・パーツで、callLink エレメントおよび serverID プロパティーを、該当するトランザクション・コード (この例では TRAN1) に設定する。
- 実行時には、IMS Connect
がトランザクション・コード (TRAN1)、プログラム名 (PGMX)、およびパラメーターを
IMS メッセージ・キューに送信する。
- TRAN1 が呼び出されたので、IMS は PSB1 をスケジュールする。
この PSB1 によって catcher プログラムが開始される。
- catcher プログラムがメッセージ・キューからプログラム名 (PGMX)
およびパラメーターを読み取り、それから PGMX を呼び出す。
- PGMX が完了すると、制御権が catcher プログラムに戻される。
catcher プログラムは、戻されたデータを IMS メッセージ・キューに入れる。
- 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 上の別のトランザクション内で呼び出せるようにしたい場合は、以下のようにします。
- 2 つ目の PSB を作成し、そのトランザクションの最初のプログラムと同じ名前を付ける。
- その PSB がリモート呼び出しのためにスケジュールされた PSB のように動作するよう、構成する。
関連項目
callLink エレメント