Sie können ein IMS-Programm vom EGL-generierten Java™-Code oder vom EGL-Debugger aus fern aufrufen. Das aufgerufene Programm kann von EGL oder VisualAge Generator generiert oder in einer anderen Sprache geschrieben werden.
Sie können eine IMS-Transaktion auch fern aufrufen, wie in "Eine ferne IMS-Transaktion vom EGL-generierten Java-Code oder vom Debugger aufrufen" beschrieben.
Wenn Sie ein Programm unter IMS statt eine Transaktion aufrufen, ist das Programm, auf das zugegriffen wird, nicht das aufgerufene Programm selbst, sondern ein Catcher-Programm, das von Rational COBOL Runtime für zSeries bereitgestellt wird. Der Systemprogrammierer muss, wie später beschrieben, das Catcher-Programm neu verbinden. Dies hat folgende Auswirkungen auf diese Task: eine Zuordnung eines Alias für jeden Laufzeit-PSB, der mit allen Transaktionen verbunden ist, die vom EGL-generierten Java-Code fern aufgerufen werden.
Der Laufzeitprozess lautet wie folgt:
- Die EGL-Laufzeit übernimmt den Namen des IMS-Transaktionscodes aus dem Verbindungsoptionsabschnitt, der zum Zeitpunkt der Generierung des aufrufenden Programms verwendet wird.
- EGL verwendet die Connectors von IMS Connect, um diesen Transaktionscode einzureichen sowie den aufgerufenen Programmnamen und die Parameter an die IMS-Nachrichtenwarteschlange zu übergeben.
- Das Catcher-Programm liest den aufgerufenen Programmnamen und die Parameter aus der Nachrichtenwarteschlange und verwendet einen z/OS-Aufruf, um das angeforderte Programm aufzurufen. Der Name des Catcher-Programms hängt von der Version der verwendeten EGL ab. Für die EGL-Version 7.0 oder höher lautet das Catcher-Programm ELAISVN7. Für ältere EGL-Versionen lautet das Catcher-Programm ELAISVN.
- Bei der erneuten Entgegennahme der Steuerung reicht das Catcher-Programm die zurückgegebenen Daten an die IMS-Warteschlange zurück.
- IMS Connect liest die Daten aus der Warteschlange und gibt die Daten an das aufrufende Programm zurück.
Beispiel:
- Der Systemprogrammierer führt unter IMS die folgenden Tasks aus:
- Erstellen einer Systemdefinition, die eine Transaktion (z. B. TRAN1) mit einem PSB (z. B. PSB1) verbindet.
- Verbinden des Catcher-Programms (ELAISVN7 bei EGL-Version 7 oder höher oder ELAISVN bei älteren Versionen), um es mit dem Alias PSB1 zu verbinden. Die Verbindung kann bis zu 64 Aliasse dieser Art enthalten und Sie können dem Modul einen beliebigen Namen geben. Wenn Sie mehr als 64 Aliasse hinzufügen möchten, erstellen Sie ein zweites Lademodul.
- Sie platzieren eine Anweisung in das Java-Programm, um PGMX aufzurufen und dem Programm Parameter bereitzustellen.
- In dem zum Generieren des Programms verwendeten Erstellungsdeskriptor legen Sie die Erstellungsdeskriptoroption "linkage" auf den Verbindungsoptionsabschnitt "pgmLinkage" fest.
- Legen Sie in diesem Verbindungsoptionsabschnitt für das Programm PGMX das Element "callLink", Eigenschaft "serverID", auf den entsprechenden Transaktionscocde (in diesem Fall auf TRAN1) fest. Legen Sie "remoteComType" auf IMSTCP oder IMSJ2C fest, um anzugeben, dass sich das Programm in der IMS-Umgebung befindet.
- Während der Laufzeit sendet IMS Connect
den Transaktionscode (TRAN1), den Programmnamen (PGMX) und die Parameter an die IMS-Nachrichtenwarteschlange.
- Da TRAN1 aufgerufen wurde, terminiert IMS
PSB1, wodurch das Catcher-Programm gestartet wird.
- Das Catcher-Programm liest die Nachrichtenwarteschlange im Hinblick auf den Programmnamen
(PGMX) und die Parameter und ruft dann PGMX auf.
- Wenn PGMX beendet wurde, kehrt die Steuerung zum Catcher-Programm zurück, das die zurückgegebenen Daten in die IMS-Nachrichtenwarteschlange platziert.
- IMS Connect gibt die Daten an Ihren Java-Code zurück.
Die Transaktion TRAN1 muss für IMS als Nachrichtenverarbeitungsprogramm definiert sein. Verwenden Sie die folgende IMS-Systemdefinition als Modell:
APPLCTN PGMTYPE=TP,PSB=PSB1
TRANSACT CODE=TRAN1,MODE=SNGL,EDIT=ULC
Die Daten werden in Großbuchstaben umgewandelt, wenn die Anweisung EDIT=ULC in der Transaktionsdefinition ausgelassen wird.
Im Folgenden sehen Sie ein Beispiel der JCL, die der Systemprogrammierer verwenden kann, um das Catcher-Programm ELAISVN7 neu zu verbinden, um in diesem Fall die Aliasse PSB1 und PSB2 zuzuordnen. Wenn Sie eine ältere EGL-Version als Version 7 verwenden, ist das Catcher-Programm 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
- Name der Ladebibliothek.
- loadModuleName
- Name des Lademoduls; in der Regel ELAISVN7 (oder ELAISVN bei älteren EGL-Versionen als Version 7).
Für IMS ist es erforderlich, dass der Name des Laufzeit-PSB mit dem Namen (oder in diesem Fall mit dem Alias) des ersten Programms in einer Transaktion übereinstimmt. Wenn Ihr aufgerufenes Programm nicht nur von fernem Code aus, sondern auch in einer anderen Transaktion unter IMS aufgerufen werden soll, gehen Sie wie folgt vor:
- Erstellen Sie einen zweiten PSB, der den Namen des ersten Programms in dieser Transaktion trägt.
- Strukturieren Sie diesen PSB wie den PSB, der für den fernen Aufruf terminiert wurde.