EGL로 생성된 Java 코드 또는 디버거로부터 원격 IMS 프로그램 호출
EGL로 생성된 Java™ 코드 또는 EGL 디버거로부터 원격으로 IMS™ 프로그램을 호출할 수 있습니다. 호출 대상 프로그램은 EGL 또는 VisualAge® Generator로 생성되거나 다른 언어로 작성될 수 있습니다.
"EGL로 생성된 Java 코드 또는 디버거로부터 원격 IMS 트랜잭션 호출"에 설명되어 있는 바와 같이 IMS 트랜잭션을 원격으로 호출할 수도 있습니다.
트랜잭션이 아니라 IMS에 있는 프로그램을 호출할 때, 액세스되는 프로그램은 호출 대상 프로그램 자체가 아니라 Rational® COBOL Runtime for zSeries에 의해 제공되는 캐처 프로그램입니다. 뒷부분에 설명되어 있는 바와 같이 시스템 프로그래머는 해당 캐처 프로그램을 다시 링크해야 합니다. 이 태스크를 수행하면 EGL로 생성된 Java 코드에 의해 원격으로 호출되는 트랜잭션과 연관된 각 런타임 PSB에 별명이 지정됩니다.
런타임 프로세스는 다음과 같습니다.
- EGL 런타임은 호출 프로그램의 생성 시에 사용된 연계 옵션 파트로부터 IMS 트랜잭션 코드의 이름을 가져옵니다.
- EGL은 IMS Connect의 커넥터를 사용하여 IMS 메시지 큐에 이 트랜잭션 코드와 호출 대상 프로그램 이름 및 매개변수를 제출합니다.
- 캐처 프로그램은 메시지 큐에서 호출 대상 프로그램 이름 및 매개변수를 읽고 z/OS® 호출을 사용하여 요청된 프로그램을 호출합니다. 캐처 프로그램의 이름은 사용하는 EGL 버전에 따라 달라집니다. 버전 7.0 이상 EGL의 경우 캐처 프로그램 이름은 ELAISVN7입니다. 이보다 이전 버전 EGL의 경우 캐처 프로그램의 이름은 ELAISVN입니다.
- 캐처 프로그램은 제어를 다시 얻으면 리턴된 데이터를 IMS 큐에 제출합니다.
- IMS Connect는 큐에서 이 데이터를 읽어 호출 프로그램에 리턴합니다.
예제는 다음과 같습니다.
- IMS에서 시스템 프로그래머가 다음 태스크를 수행합니다.
- 트랜잭션(예: TRAN1)을 PSB(예: PSB1)에 연관시키는 시스템 정의를 작성합니다.
- 캐처 프로그램(EGL 버전 7 이상의 경우 ELAISVN7, 그 이전 버전의 경우 ELAISVN)을 링크하여 여기에 PSB1이라는 별명을 지정합니다. 이 연계는 이 유형의 별명을 최대 64개 포함할 수 있으며, 모듈 이름은 마음대로 선택할 수 있습니다. 64개보다 더 많은 별명을 추가하려는 경우에는 두 번째 로드 모듈을 작성하십시오.
- Java 프로그램에 PGMX를 호출하고 해당 프로그램의 매개변수를 제공하는 명령문을 삽입합니다.
- 프로그램을 생성하는 데 사용된 빌드 디스크립터에서 linkage 빌드 디스크립터 옵션을 pgmLinkage라는 연계 옵션 파트로 설정합니다.
- 프로그램 PGMX의 해당 연계 옵션 파트에서 callLink 요소, serverID 특성을 적절한 트랜잭션 코드(이 경우에는 TRAN1)로 설정합니다. remoteComType을 IMSTCP 또는 IMSJ2C로 설정하여 프로그램이 IMS 환경에 있음을 표시합니다.
- 런타임 시에 IMS Connect는 트랜잭션 코드(TRAN1), 프로그램 이름(PGMX) 및 매개변수를 IMS 메시지 큐에 전송합니다.
- TRAN1이 호출되었으므로 IMS는 캐처 프로그램을 시작하는 PSB1을 스케줄합니다.
- 캐처 프로그램은 메시지 큐에서 프로그램 이름(PGMX) 및 매개변수를 읽은 후 PGMX를 호출합니다.
- PGMX가 완료되면 제어는 캐처 프로그램에 리턴되며, 캐처 프로그램은 리턴된 데이터를 IMS 메시지 큐에 삽입합니다.
- IMS Connect는 데이터를 사용자의 Java 코드에 리턴합니다.
트랜잭션 TRAN1은 IMS에 메시지 처리 프로그램으로서 정의되어야 합니다. 다음 IMS 시스템 정의를 모델로 사용하십시오.
APPLCTN PGMTYPE=TP,PSB=PSB1
TRANSACT CODE=TRAN1,MODE=SNGL,EDIT=ULC
트랜잭션 정의에서 EDIT=ULC 문이 생략되면 데이터가 대문자로 변환됩니다.
다음 내용은 시스템 프로그래머가 별명 PSB1 및 PSB2를 지정하는 경우 캐처 프로그램 ELAISVN7을 다시 링크하는 데 사용할 수 있는 JCL의 예제입니다.
버전 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의 다른 트랜잭션에서도 호출 대상 프로그램이 호출되도록 하려면 다음 작업을 수행해야 합니다.
- 해당 트랜잭션의 첫 번째 프로그램 이름으로 이름 지정된 두 번째 PSB를 작성하십시오.
- 해당 PSB를 원격 호출에 대해 스케줄된 PSB와 동일하게 구조화하십시오.