EGL로 생성된 Java 코드 또는 디버거로부터 원격 CICS 프로그램 호출
EGL로 생성된 Java™ 코드 또는 EGL 디버거로부터 원격으로 CICS® 프로그램을 호출할 수 있습니다. 호출 대상 프로그램은 EGL 또는 VisualAge® Generator로 생성되거나 다른 언어로 작성될 수 있습니다.
디버그 또는 생성 시 연계 옵션 파트의 특성인 calllink 요소는 호출 대상 프로그램의 특성에 따라 달라집니다. 구체적인 내용은 다음과 같습니다.
- 호출 대상 프로그램이 EGL 또는 VisualAge Generator로 생성된 경우 특성 remotePgmType의 값은 EGL입니다.
참고: EGL로 생성되는 호출 프로그램은 특성 parmForm에 CHANNEL, COMMDATA 또는 COMMPTR 중 한 값을 사용하여 생성되어야 합니다. 세부사항은 "callLink 요소의 parmForm"을 참조하십시오.
- 호출 대상 프로그램이 EGL 또는 VisualAge Generator로 생성되지 않은 경우 특성 remotePgmType의 값은 EXTERNALLYDEFINED입니다.
런타임 시의 동작은 다음과 같습니다.
- EGL 런타임 코드는 호출자를 생성하는 데 사용된 연계 옵션 파트를 사용하며 해당 파트로부터 호출 대상 프로그램의 이름과 관련 CICS 트랜잭션 코드를 둘 다 가져옵니다.
- EGL 런타임 코드는 callLink 요소에 지정된 conversionTable 특성, 그리고 호출 대상 프로그램에 전달된 필드의 데이터 유형에 따라 데이터를 EBCDIC로 변환합니다.
- EGL 런타임 코드는 CICS Transaction Gateway를 커넥터를 사용하여 트랜잭션을 시작하고 호출 대상 프로그램 이름 및 매개변수를 식별하여 특정 CICS 리젼에 전달합니다. 정확한 경로는 remoteComType의 값이 CICSECI, CICSEXCI, CICSJ2C 또는 CICSSSL인지에 따라 달라집니다.
- 다음 이벤트는 calllink 요소의 특성 값에 따라 달라집니다.
- remotePgmType의 값이 EXTERNALLYDEFINED 또는 EGL이며 parmForm의 값이 COMMDATA인 경우 CICS 미러 프로그램은 호출 대상 프로그램을 직접 호출하며 런타임 코드는 COMMAREA를 사용하여 호출 대상 프로그램과 값을 교환합니다. (COMMDATA는 전달되는 모든 인수가 참조 변수가 아니라 값 변수 또는 리터럴인 경우에만 사용할 수 있습니다.)
- remotePgmType의 값이 EXTERNALLYDEFINED 또는 EGL이며 parmForm의 값이 COMMPTR인 경우
CICS 미러 프로그램은 EGL 캐처 프로그램을 호출합니다.
캐처 프로그램의 이름은 호출을 수행하는 클라이언트 런타임 코드의 버전에 따라 달라집니다. EGL 버전 7.0 이상의 경우 캐처 프로그램의 이름은 ELACSV7입니다. 이보다 이전 EGL 버전 또는 VisualAge Generator의 경우 캐처 프로그램의 이름은 ELACSV입니다.
- remotePgmType의 값이 EXTERNALLYDEFINED 또는 EGL이며 parmForm의 값이 CHANNEL인 경우 CICS 미러 프로그램은 EGL 캐처 프로그램을 호출하지만, 이 경우 캐처 프로그램의 이름은 ELACSV7C입니다.
- 캐처 프로그램이 사용 중인 경우에는 다음 내용이 적용됩니다.
- parmForm의 값이 COMMPTR인 경우 프로그램은 호출 매개변수를 포인터로 변환합니다. 이 경우 캐처 프로그램은 호출 대상 프로그램을 둘 중 한 가지 방법으로 호출하며, 한 가지 방법은 동적 COBOL 호출(remotePgmType의 값이 EGL인 경우)이고 다른 한 가지 방법은 CICS LINK를 사용하는 것(remotePgmType의 값이 EXTERNALLYDEFINED인 경우)입니다.
- parmForm의 값이 CHANNEL인 경우 각 매개변수는 컨텐츠가 포인터를 포함하지 않는 별도의 컨테이너로 전달됩니다. 이 경우 캐처 프로그램은 항상 CICS LINK를 사용하여 호출 대상 프로그램을 호출합니다.
캐처 프로그램은 호출 대상 프로그램을 둘 중 한 가지 방법으로 호출하며, 한 가지 방법은 동적 COBOL 호출(remotePgmType의 값이 EGL인 경우)이고 다른 한 가지 방법은 CICS LINK를 사용하는 것(remotePgmType의 값이 EXTERNALLYDEFINED인 경우)입니다.
- 호출 대상 프로그램은 실행된 후 이 프로그램을 실행하는 데 사용된 경로와 같은 경로(직접, 또는 EGL 캐처를 사용하여)를 통해 데이터를 리턴합니다.
- EGL 런타임 코드는 클라이언트 시스템의 로케일 및 호출 대상 프로그램에 전달된 필드의 데이터 유형에 따라 코드 페이지로 데이터를 변환합니다.
예제는 다음과 같습니다.
- CICS 시스템 프로그래머가 TRNX라는 트랜잭션을 작성하고 이를 CICS 미러 프로그램 DFHMIRS와 연관시킵니다. 이 트랜잭션 이름은 calllink 특성 serverID에 지정된 이름과 일치해야 합니다. 해당 트랜잭션의 특성은 다음 주제("callLink 요소의 serverID")에 설명되어 있습니다.
- CICS에서는 PGMX라는 기존 비EGL 프로그램에서 OMMAREA에 포함된 포인터 양식의 인수를 기다리고 있습니다.
- 사용자의 Java 프로그램에는 PGMX를 호출하는 명령문이 포함되어 있습니다.
- 호출자를 생성하는 데 사용된 빌드 디스크립터에서, linkage 빌드 디스크립터 옵션이 pgmLinkage라는 연계 옵션 파트를 참조합니다.
- 해당 연계 옵션 파트에서 다음 작업을 수행합니다.
- callLink 요소, serverID 특성을 적절한 트랜잭션 코드(이 경우에는 TRNX)로 설정합니다.
- 특성을 remoteComType CICSECI, CICSJ2C 또는 CICSSSL로 설정하여 프로그램이 CICS 환경에 있음을 표시합니다.
- 런타임 시에 EGL 런타임 코드는 데이터를 변환한 후 트랜잭션 코드(TRNX), 프로그램 이름(이 호출은 EGL 캐처 프로그램을 사용해야 하므로 ELACSV7) 및 매개변수(대상 호출 대상 프로그램의 이름 포함)를 CICS Transaction Gateway에 전송합니다.
- CICS Transaction Gateway는 TRNX를 CICS 서버에서 호출합니다. 이 트랜잭션은 DFHMIRS라는 CICS 미러 프로그램과 연관되어 있습니다.
- CICS 미러 프로그램은 ELACSV7이라는 EGL 캐처 프로그램을 호출합니다(EGL Java 런타임 코드가 버전 7.0 이상이라고 가정함).
- EGL 캐처 프로그램은 매개변수를 값으로 수신하고, 네트워크를 통해 전달된 값을 매개변수당 하나의 포인터로 변환한 후 PGMX를 호출합니다.
- PGMX가 완료되면 제어는 캐처 프로그램으로 반환되며 캐처 프로그램은 리턴된 데이터에 포인터를 수신하여 호출자에게 리턴할 데이터 값 버퍼를 빌드합니다.
- 캐처 프로그램은 미러 프로그램에 데이터를 리턴하며, 미러 프로그램은 데이터를 CICS Transaction Gateway를 통해 EGL Java 런타임 코드에 전송합니다.
- EGL Java 런타임은 이러한 값을 수신하여 적절한 로케일로 변환한 후 호출자의 실행을 재개합니다.