PSB와 PCB를 사용하는 데이터 액세스
PSB(Program Specification Block)와 PCB(Program Communication Block)를 사용하여 COBOL을 위해 생성하는 프로그램에서 논리 구조를 설명할 수 있습니다.
EGL은 PSB를 PSBRecord 스테레오타입으로 나타냅니다. 이 스테레오타입을 사용하여 레코드 파트를 사용자 정의하는 경우, 다른 레코드 파트에서처럼 PSB 레코드 정의를 기반으로 변수를 선언합니다. 또한 EGL은 네 가지 유형의 PCB 레코드 정의를 포함합니다. PCB 레코드 정의를 사용하여 PSB 레코드 정의 내에 PCB 레코드 변수를 선언하십시오.
또한 COBOL 환경에서 실제 PSB 및 PCB를 작성해야 합니다. 이러한 PSB 및 PCB에 있는 정보는 EGL PSB 및 PCB에 있는 정보와 일치해야 합니다.
- EGL 생성의 대상이 IMS™ BMP 또는 IMS/VS입니다.
- 사용자의 코드가 CICS®, IMS/VS, IMS BMP 또는 z/OS® 일괄처리 대상 시스템에 있는 DL/I 데이터베이스에 액세스합니다.
- 사용자의 코드가 IMS BMP 또는 z/OS 일괄처리 대상 시스템에 있는 GSAM 파일에 액세스합니다.
- DL/I 데이터베이스에 액세스하는 경우, PCB 레코드에서 참조할 DLISegment 레코드를 정의하십시오.
- PSBRecord 스테레오타입으로 레코드를 정의하십시오. 이 레코드에는 IMS 메시지 큐, DL/I 데이터베이스 또는 GSAM 파일에 액세스할 때 사용하는 PCB 레코드 변수 세트가 포함됩니다.
- 프로그램에서 PSB 및 PCB 정보를 사용 가능하게 하십시오.
- 1단계에서 정의한 PSB 레코드를 기반으로 변수를 선언하십시오.
- @DLI 프로그램 특성의 psb 특성 필드를 해당 PSB 레코드 변수의 이름으로 설정하십시오.
각 PCB 레코드는 EGL이 제공하는 사전 정의된 PCB 레코드 정의 중 하나를 기반으로 합니다. PCB 레코드 스테레오타입의 내용을 참조하십시오.
특정 플랫폼에서 초기 I/O PCB와 하나 이상의 원격 처리 PCB를 선언해야 합니다. 자세한 정보는 이 주제의 "호환성"을 참조하십시오. EGL PSB에서 해당 PCB를 선언하는 경우 런타임 환경이 PCB를 지원하지 않으면 관련된 EGL PCB는 생성된 COBOL에 포함되지 않습니다.
callInterface = DLICallInterfaceKind.CBLTDLI
이 지정은 I/O 및 원격 처리 PCB에 대한 CICS 지원의 결핍을 조정하기 위해 DL/I 호출에서 PCB 수를 조정합니다.
PSB 레코드 정의에 대한 요구사항
- 대상 시스템은 PSB 레코드 파트에 필요한 PCB에 영향을 미칩니다(이 주제의 "호환성" 참조).
- 또한 @DLI 복합 프로그램 특성(AIBTDLI 또는 CBLTDLI)의 callInterface 특성 필드 값은 PSB 레코드 정의의 요구사항에 영향을 미칩니다. 자세한 정보는 이 주제의 다음 두 절을 참조하십시오.
callInterface가 AIBTDLI인 경우
- IMS/VS, IMS BMP 또는 z/OS 일괄처리의 경우 런타임 PSB에 있는 첫 번째 PCB는 I/O PCB여야 합니다. IMS는 항상 IOPCB라는 이름을 I/O PCB의 이름으로 사용합니다.
- IMS/VS 및 IMS BMP의 경우, EGL은 필요한 다른 PCB에 대해 다음 이름을 사용합니다.
- 대체 PCB의 경우, ELAALT
- 익스프레스 대체 PCB의 경우, ELAEXP
- IMS/VS 환경에서 DL/I 데이터베이스를 EGL 작업 데이터베이스로 사용하는 경우, ELAWORK. 이 경우에는 EGL PCB 레코드에 데이터베이스 계층 구조 정보를 포함할 필요가 없으며, IMS 시스템 프로그래머는 나중에 나타내는 것처럼 런타임 PSB를 정의할 때 매크로 ELAPCB를 사용해야 합니다. 생성 시 workDBType 빌드 디스크립터 옵션의 기본값을 승인하여 작업 데이터베이스가 DL/I 데이터베이스임을 표시하십시오.
다음 방법 중 하나로 이러한 PCB의 이름을 지정할 수 있습니다.- IMS 시스템 프로그래머에게 런타임 PSB를 작성하는 PSBGEN 작업에서 EGL에 필요한 PCB 이름을 지정하도록 요청하십시오. 다음 예제는
레이블을 사용하여 대체 PCB에
이름을 제공하고 PCBNAME 매개변수를 포함시켜 익스프레스 대체 PCB 및 작업 데이터베이스
PCB에 이름을 제공합니다.
ELAALT PCB TYPE=TP,MODIFY=YES PCB TYPE=TP,MODIFY=YES,EXPRESS=YES,PCBNAME=ELAEXP ELAPCB LABEL=ELAWORK이 경우, PCB 레코드를 PSB 레코드 파트에 포함시킬 필요가 없습니다.
- IMS 프로그래머가 EGL에 필요한 이름과
다른 이름을 사용하는 경우, PSB 레코드 파트에 필수 PCB 레코드를 포함시켜야 하며
EGL에 필요한 이름을 런타임 PSB에 있는 이름과 연관시켜야 합니다. 예를 들어, 런타임 PSB에 다음 PCB가 포함되어 있다고
가정하십시오.
PCB TYPE=TP,MODIFY=YES,PCBNAME=MYALTPCB PCB TYPE=TP,MODIFY=YES,EXPRESS=YES,PCBNAME=MYEXPPCB ELAPCB LABEL=MYWORKDB이 경우, 다음과 같이 PSB 레코드 파트에 PCB 레코드가 포함됩니다.Record MYPSB type PSBRecordPart ELAALT ALT_PCBRecord {@PCB {pcbType = PCBKind.TP, PCBName = "MYALTPCB"}}; ELAEXP ALT_PCBRecord {@PCB {pcbType = PCBKind.TP, PCBName = "MYEXPPCB"}}; ELAWORK DB_PCBRecord {@PCB {pcbType = PCBKind.DB, PCBName = "MYWORKDB"}}; end
callInterface 특성 필드가 AIBTDLI로 설정된 경우, EGL에 필요한 이름과 다른 런타임 이름을 갖는 필수 PCB 및 프로그램에서 사용되는 PCB 레코드만 선언해야 합니다. 이 규칙은 기본 프로그램과 호출된 프로그램에 적용됩니다.
callInterface가 CBLTDLI인 경우
callInterface 특성 필드를 CBLTDLI로 설정하는 경우, 주어진 런타임 PCB에 대한 액세스는 이름이 아닌 주소를 통해 수행됩니다.
- PSB 레코드에는 런타임 PSB에 있는 PCB 수보다 더 많은 PCB 레코드가 포함될 수 없지만, 더 적은 수의 레코드는 포함될 수 있습니다.
- 각 PCB 레코드의 위치는 관련된 런타임 PCB의 위치와 일치해야 하며 해당 PCB와 동일한 유형이어야 합니다.
대상 시스템이 IMS/VS이고 EGL 작업 데이터베이스로 DL/I 데이터베이스를 사용하는 경우, 데이터베이스 계층 구조 정보를 EGL PCB 레코드에 포함시킬 필요가 없으며 IMS 시스템 프로그래머는 런타임 PSB를 정의할 때 ELAPCB 매크로를 사용해야 합니다. 생성 시 workDBType 빌드 디스크립터 옵션의 기본값을 승인하여 작업 데이터베이스가 DL/I 데이터베이스임을 표시하십시오.
- PSB 레코드를 호출된 프로그램으로 전달하는 경우, 런타임 PSB 액세스에 사용되는 주소를 전달합니다. 기본 프로그램에서처럼 최소한 PSB 레코드 파트의 초기 파트를 설정해야 합니다. 여기에는 I/O에 대한 PCB 레코드, 대체 및 대체 익스프레스 PCB(특정 환경에서 사용되는 경우)와 호출된 프로그램에 필요한 기타 PCB 레코드가 포함됩니다. 또한 @DLI 프로그램 특성을 위한 psbParm 특성 필드도 설정해야 합니다.
- PCB 레코드를 호출된 프로그램으로 전달하는 경우(우수 사례처럼), 각 런타임 PCB 액세스에 사용되는 주소를 전달합니다. 여전히 최소한 I/O, 대체 및 대체 익스프레스 PCB를 설정해야 합니다(특정 환경에서 사용되는 경우). 여기에 추가로 호출된 프로그램에서 필요한 PCB 레코드만 선언하십시오. 또한 @DLI 프로그램 특성을 위한 pcbParms 특성 필드도 설정해야 합니다.
호출된 프로그램에서 pcbParms 및 psbParm 특성을 지정하는 경우, pcbParms의 PCB 특정 주소는 psbParm의 동등한 주소를 대체합니다. 전달된 PSB 레코드는 무시됩니다.
- 두 번째 PCB 레코드는 대체 PCB를 참조합니다.
- 세 번째 PCB 레코드는 익스프레스 대체 PCB를 참조합니다.
두 번째 레코드가 아닌 다른 레코드의 이름으로 ELAALT를 사용하거나 세 번째 레코드가 아닌 다른 레코드의 이름으로 ELAEXP를 사용하는 경우, 해당 이름의 우선순위가 높습니다. EGL은 이름 지정된 PCB 레코드가 적절한 유형의 런타임 PCB를 참조한다고 가정합니다.
호환성
| 플랫폼 | 문제 |
|---|---|
| Java™ 생성 | PSBRecord 스테레오타입은 지원되지 않습니다. |
| CICS | 기본적으로 defaultPSBName PSB 레코드 특성의 값은 런타임 PSB의 이름입니다. EGL은 이 이름을 dliLib.psbData 시스템 변수의 psbName 필드에 배치하지만 해당 라이브러리 필드에 다른 값을 지정할 수 있습니다. 프로그램이 DL/I 데이터베이스에 대해 I/O 조작을 시도하는 경우, psbName의 값에 따라 사용할 런타임 PSB가 결정됩니다. dliLib.psbData 시스템 변수에는
두 번째 필드 psbRef가 있습니다. 이 필드의 초기값은 0이며, 이는 PSB가 스케줄되지 않았음을 나타냅니다.
첫 번째 DL/I I/O가 발생할 때 EGL 런타임은 PSB 스케줄 호출을 실행합니다. 이 호출은 다음 조치를 수행합니다.
dliLib.psbData.psbRef에 값을 지정하는 로직을 쓰지 마십시오. 호출 중에 dliLib.psbData 변수를 "PSB로 전달"로 사용하십시오(이름 및 관련 주소를 전달하려면). 전송 중에 런타임 동작의 세부사항은 전송 수행 방법에 따라
달라집니다.
DB PCB는 런타임 PSB에서 유효합니다. |
| IMS BMP | 런타임 JCL의 PSB 매개변수는 작업 단계 전체에서 사용된 런타임 PSB를 식별합니다. 배치할 때 JCL을 사용자 정의할 수 있지만 EGL은 defaultPSBName PSB 레코드 특성의 값을 지정하여 런타임 JCL에 기본 매개변수 값을 생성합니다. IMS BMP의 경우, EGL을 사용하려면
런타임 PSB에 다음 PCB가 있어야 합니다.
DB 및 GSAM PCB도 유효합니다. |
| IMS/VS | IMS 시스템 정의의 규칙은 기본 프로그램의 이름이 트랜잭션 전체에서 사용 가능한 런타임 PSB의 이름이 되도록 합니다. IMS/VS의 경우, EGL에서는 런타임 PSB에 다음 PCB가 있어야 합니다.
DB PCB도 유효합니다. workDBType 빌드 디스크립터 옵션의 값이 DLI(기본값)인 경우, EGL 작업 데이터베이스를 위해 런타임 DB PCB 중 하나를 설정하십시오. EGL 작업 데이터베이스는 런타임 PSB에서 ELAWORK로 식별되거나 EGL PCB 레코드의 이름으로 식별됩니다. 최대 유연성을 위해 런타임 PSB에서 마지막 데이터베이스 PCB를 ELAWORK로 지정하십시오. 나중에 SQL 작업 데이터베이스로 변경하기로 결정하는 경우 해당 PCB를 쉽게 제거할 수 있습니다. |
| z/OS 일괄처리 | 런타임 JCL의 PSB 매개변수는 작업 단계 전체에서 사용된 런타임 PSB를 식별합니다. 배치할 때 JCL을 사용자 정의할 수 있지만 EGL은 defaultPSBName PSB 레코드 특성의 값을 지정하여 기본 매개변수 값을 생성합니다. z/OS 일괄처리의 경우, EGL에서 첫 번째 런타임 PCB가 I/O PCB이어야 합니다. PSBGEN 작업을 개발할 때 IMS 시스템 프로그래머가 CMPAT를 YES로 설정하는지 확인하십시오. 또한 EGL에서는 유형에 관계없이 두 개의 추가 PCB가 런타임 PSB에 있어야 합니다. DB 및 GSAM PCB는 대체 PSB이므로 유효합니다. 그러나 사용자의 코드는 대체 PSB를 사용할 수 없습니다. 유효한 경우 z/OS 일괄처리와 IMS BMP에 동일한 런타임 PSB를 사용할 수 있습니다. |