EGL 生成の Java コードまたはデバッガーからのリモート IMS プログラムの呼び出し

EGL 生成の Java™ コードまたは EGL デバッガーから IMS™ プログラムをリモート側で呼び出すことができます。 呼び出し先プログラムは、EGL または VisualAge® Generator から生成できます。または、別の言語で作成できます。

『EGL 生成の Java コードまたはデバッガーからのリモート IMS トランザクションの呼び出し』で説明されているように、リモート側で IMS トランザクションを呼び出すこともできます。

トランザクションではなく IMS 上でプログラムを呼び出す場合、アクセス先のプログラムは呼び出し先プログラム自体ではなく、Rational® COBOL Runtime for zSeries によって提供されるキャッチャー・プログラムです。 後述するように、システム・プログラマーはそのキャッチャー・プログラムに再リンクする必要があります。そのタスクの効果は、EGL によって生成された Java コードによってリモートで呼び出されるトランザクションに関連付けられているランタイム PSB ごとに、別名を割り当てることです。

ランタイム・プロセスは以下のとおりです。
  1. EGL ランタイムは、呼び出し側プログラムの生成時に使用されるリンケージ・オプション・パーツから、IMS トランザクション・コードの名前を受け取ります。
  2. EGL は、IMS Connect のコネクターを使用して、このトランザクション・コードを、呼び出し先プログラムの名前およびパラメーターとともに IMS メッセージ・キューに送信します。
  3. キャッチャー・プログラムは、呼び出し先プログラムの名前とパラメーターをメッセージ・キューから読み取り、z/OS® 呼び出しを使用して、要求されたプログラムを起動します。キャッチャー・プログラムの名前は、使用する EGL のバージョンによって異なります。バージョン 7.0 以降の EGL の場合、キャッチャー・プログラムは ELAISVN7 です。それよりも前のバージョンの EGL の場合、キャッチャー・プログラムは ELAISVN です。
  4. キャッチャー・プログラムは、制御を取り戻すと、返されたデータを IMS キューに送信します。
  5. IMS Connect は、そのキューからデータを読み取り、そのデータを呼び出し側プログラムに返します。
以下に例を示します。
  1. IMS では、システム・プログラマーが以下のタスクを実行します。
    1. トランザクション (例えば TRAN1) を PSB (例えば PSB1) に関連付けるシステム定義を作成します。
    2. キャッチャー・プログラム (EGL バージョン 7 以降の場合は ELAISVN7、それよりも前のバージョンの場合は ELAISVN) をリンクして、それに別名 PSB1 を割り当てます。リンケージにはこの種類の別名を最大 64 個含めることができ、モジュールには任意の名前を付けることができます。 64 個を超えて別名を追加したい場合は、2 つ目のロード・モジュールを作成します。
  2. PGMX を呼び出し、Java プログラムにパラメーターを提供するためのステートメントをそのプログラム内に配置します。
  3. プログラムの生成に使用されるビルド記述子で、linkage ビルド記述子オプションを pgmLinkage という名前のリンケージ・オプション・パーツに設定します。
  4. プログラム PGMX のそのリンケージ・オプション・パーツで、callLink 要素の serverID プロパティーを、適切なトランザクション・コード (この場合は TRAN1) に設定します。remoteComType を IMSTCP または IMSJ2C に設定し、プログラムが IMS 環境にあることを示します。
  5. 実行時に IMS Connect はトランザクション・コード (TRAN1)、プログラム名 (PGMX)、およびパラメーターを IMS メッセージ・キューに送信します。
  6. TRAN1 が呼び出されたので、IMS は PSB1 をスケジュールに入れます。これにより、キャッチャー・プログラムが開始されます。
  7. キャッチャー・プログラムは、プログラム名 (PGMX) とパラメーターを取り出すためにメッセージ・キューを読み取り、PGMX を呼び出します。
  8. PGMX が完了すると、制御はキャッチャー・プログラムに戻り、返されたデータが IMS メッセージ・キューに配置されます。
  9. IMS Connect はそのデータを Java コードに返します。
トランザクション TRAN1 は、メッセージ処理プログラムとして IMS に定義する必要があります。以下の IMS システム定義をモデルとして使用します。
APPLCTN PGMTYPE=TP,PSB=PSB1
TRANSACT CODE=TRAN1,MODE=SNGL,EDIT=ULC

ステートメント EDIT=ULC がトランザクション定義から省略されている場合、データは大文字に変換されます。

以下に、システム・プログラマーが、キャッチャー・プログラム ELAISVN7 の再リンクに使用する JCL の例を示します。この場合は、別名 PSB1 と PSB2 を割り当てます。バージョン 7 よりも前のバージョンの EGL を使用している場合は、キャッチャー・プログラムの名前は ELAISVN です。
//L    EXEC ELARLINK 
//L.SYSLMOD DD DISP=SHR,DSN=loadLibraryName 
//L.SYSIN DD * 
INCLUDE SELALMD(ELAISVN7) 
ENTRY ELAISVN7 
ALIAS PSB1
ALIAS PSB2
NAME loadModuleName(R) 
/* 
loadLibraryName
ロード・ライブラリーの名前
loadModuleName
ロード・モジュールの名前。通常は ELAISVN7 (またはバージョン 7 よりも前のバージョンの EGL の場合は ELAISVN) です。
IMS では、ランタイム PSB の名前が、トランザクション内の最初のプログラムの名前 (または、この場合は別名) と同一である必要があります。呼び出し先プログラムを、リモート・コードからだけではなく、IMS 上の別のトランザクションからも呼び出したい場合は、以下を実行する必要があります。
  1. そのトランザクション内の最初のプログラムに由来する名前が付けられた 2 番目の PSB を作成します。
  2. その PSB を、リモート呼び出しのためにスケジュールされた PSB と同様に構造化します。

フィードバック