런타임 PSB 및 PCB에 대한 EGL 지원

이 주제에서는 다음 경우에 적절한 태스크를 설명합니다.
  • When the target for EGL 생성의 대상이 IMS™ BMP 또는 IMS/VS인 경우, 또는
  • 코드가 DL/I 데이터베이스에 액세스하는 경우 대상 시스템이 CICS®, IMS/VS, IMS BMP 또는 z/OS® 일괄처리인 경우 가능합니다.
  • 코드가 GSAM 파일에 액세스하는 경우 이는 대상 시스템이 IMS BMP or z/OS 일괄처리인 경우에 가능합니다.

필요에 따라 EGL 프로그램 요소를 사용자 정의하여 조직의 PSB(Program Specification Block) 및 PCB(Program Communication Block)에 액세스할 수 있는 COBOL 프로그램을 생성합니다. 이러한 블록을 런타임 PSB 및 런타임 PCB라고 합니다.

먼저, 데이터베이스 PCB 레코드(있는 경우)에서 참조할 DLISegment 레코드 파트를 정의하십시오. 그런 다음, 다음과 같은 기본 태스크를 수행해야 합니다.
  1. PSB 보고서 파트를 정의하십시오. 해당 파트는 IMS 메시지 큐, DL/I 데이터베이스 또는 GSAM 파일에 액세스할 때 사용되는 PCB 레코드 파트를 포함합니다.
  2. 프로그램에서 PSB 및 PCB 정보를 사용 가능하게 하십시오.
    • PSB 레코드 파트을 기반으로 하는 레코드를 선언하십시오.
    • 프로그램 특성 @dli, 특성 필드 psb를 PSB 레코드의 이름으로 설정하십시오. 구문에 대한 자세한 정보는 값 설정 블록의 내용을 참조하십시오.
각 PCB 레코드는 사전 정의된 다음 PCB 레코드 중 하나를 기반으로 합니다.
IO_ PCBRecord
I/O PCB와 상호작용하는 데 사용됩니다. I/O PCB는 프로그램 또는 터미널의 입력을 허용하고 동일한 터미널(터미널로부터의 입력인 경우)에 출력을 기록할 수 있도록 합니다. 또한 I/O PCB는 다른 IMS 기능에 대한 액세스를 제공합니다. 예를 들어, 일괄처리 프로그램의 체크포인트 및 다시 시작에 대한 액세스를 제공합니다.
ALT_PCBRecord
I/O PCB가 아닌 텔레프로세싱 PCB를 참조하는 데 사용됩니다. 이 유형의 레코드를 사용하면 코드가 다른 트랜잭션과 연관되거나 I/O PCB와 연관된 터미널이 아닌 다른 디바이스와 연관된 메시지 큐에 출력을 기록할 수 있습니다. 런타임 PCB는 다음 유형 중 하나가 될 수 있습니다.
  • 커미트가 발생하는 경우에만 메시지가 대상으로 전송되는 대체 PCB
  • 커미트 또는 롤백의 발생 여부에 상관없이 메시지가 대상으로 전송되는 익스프레스 대체 PCB
DB_PCBRecord
프로그램에서 액세스할 수 있는 DL/I 데이터베이스를 표시하는 데이터베이스 PCB를 나타내는 데 사용됩니다. 런타임 데이터베이스 PCB는 액세스할 수 있는 데이터 및 올바른 액세스 유형을 지정합니다.
GSAM_PCBRecord
GSAM PCB를 나타내는 데 사용됩니다. GSAM PCB는 z/OS 일괄처리 또는 IMS BMP 프로그램이 루트 전용 DL/I 데이터베이스로 작동되는 연속 파일에 액세스할 때 사용됩니다.
다음 목록은 각 대상 시스템의 런타임 PSB에 대한 세부사항을 제공합니다.
CICS
PSB 레코드 특성 defaultPSBName의 값은 기본적으로 런타임 PSB의 이름입니다. EGL이 시스템 변수 dliLib.psbDatapsbName 필드에 해당 이름을 배치하지만 해당 라이브러리 필드에 다른 값을 지정할 수 있습니다. 프로그램이 DL/I 데이터베이스에 대해 I/O 조작을 시도하는 경우 psbName의 값은 사용되는 런타임 PSB를 판별합니다.
시스템 변수 dliLib.psbData에 두 번째 필드 psbRef가 있습니다. 필드의 초기값은 0이며 이는 PSB가 스케줄되지 않음을 표시합니다. 첫 번째 DL/I I/O가 발생하면 EGL 런타임은 다음과 같이 작동하는 PSB 스케줄 호출을 실행합니다.
  • dliLib.psbData.psbName의 값을 사용하여 런타임 PSB를 스케줄합니다.
  • dliLib.psbData.psbRef를 PSB가 액세스할 수 있는 주소로 설정합니다.
참고: dliLib.psbData.psbRef에 값을 지정하는 로직을 쓰는 것을 피해야 합니다.

호출 중에 변수 dliLib.psbData를 사용하여 "PSB를 전달"할 수 있습니다(실제로는 이름 및 관련 주소를 전달).

전송 중에 런타임 동작의 세부사항은 전송이 발생하는 방법에 따라 다릅니다.
  • returning 절을 사용하여 show 문에 의해 전송되거나 transfer to transaction 문에 의해 전송되는 경우, 전송 중에 커미트 지점이 발생하고 PSB가 대상 프로그램에 전달되지 않으므로 스케줄된 PSB가 종료됩니다.
  • transfer to program 문에 의해 전송되는 경우 기본 동작은 psb가 스케줄되었는지 여부에 따라 달라집니다.
    • PSB가 스케줄되지 않는 경우 커미트 지점이 발생하지 않습니다.
    • PSB가 스케줄되는 경우 전송 중에 커미트 지점이 발생하므로 PSB가 종료되고 PSB가 대상 프로그램으로 전달되지 않습니다. 하지만 이 경우 대체 결과가 발생할 수 있으며, 전송 프로그램이 CICS에 대해 생성되는 경우와 프로그램이 IMS/VS에 대해 생성되는 경우를 비교할 때 동작에서의 차이를 최소화할 수 있는 이점이 있습니다. 대체 결과는 네 개의 조건이 충족된 경우 발생합니다.
      • 대상 시스템은 z/OS CICS입니다.
      • 대상 프로그램은 EGL에 의해 생성됩니다.
      • 빌드 디스크립터 옵션 synchOnPgmTransfer는 아니오로 설정됩니다.
      • 전송되는 프로그램의 PSB 레코드에서 참조되는 기본 PSB는 대상 프로그램의 PSB 레코드에서 참조되는 기본 PSB와 동일합니다.

      이 경우 커미트 지점이 발생하지 않으며 EGL이 스케줄된 PSB를 대상 프로그램으로 전달합니다.

      참고: 기본 PSB는 defaultPSBName 특성의 값이며 이 특성은 프로그램 PSB 레코드의 기초가 되는 PSB 레코드 파트에 설정됩니다. 해당 특성의 기본값은 레코드 파트의 이름입니다. PSB 레코드의 예제를 보려면 DLISegment 스테레오타입의 내용을 참조하십시오.

DB PCB는 런타임 PSB에서 유효합니다.

IMS BMP
런타임 JCL의 PSB 매개변수는 작업 단계 전체에서 사용되는 런타임 PSB를 식별합니다. 배치 시 JCL을 사용자 정의할 수 있지만 EGL이 PSB 레코드 특성 defaultPSBName의 값을 지정하여 런타임 JCL에서 기본 PSB 매개변수 값을 생성합니다.
IMS BMP의 경우, EGL에서는 다음 PCB가 런타임 PSB에 있어야 합니다.
  1. 0(첫 번째) 위치의 I/O PCB. 일괄처리 지향 BMP를 생성하는 경우에도 IMS 시스템 프로그래머가 PSBGEN 작업을 개발할 때 CMPAT를 예로 설정해야 합니다.
  2. 일반적으로 두 번째 위치의 대체 PCB
  3. 일반적으로 세 번째 위치의 익스프레스 대체 PCB

DB 및 GSAM PCB도 유효합니다.

IMS/VS
IMS 시스템 정의의 규칙은 기본 프로그램의 이름이 트랜잭션 전체에서 사용 가능한 런타임 PSB의 이름이 되도록 합니다.
IMS/VS의 경우 EGL에서는 런타임 PSB에 다음 PCB가 있어야 합니다.
  1. 0(첫 번째) 위치의 I/O PCB. 조치가 선택사항이지만 PSBGEN 작업을 개발 중인 경우 IMS 시스템 프로그래머가 CMPAT를 예로 설정할 수 있습니다.
  2. 일반적으로 두 번째 위치의 대체 PCB
  3. 일반적으로 세 번째 위치의 익스프레스 대체 PCB

DB PCB도 유효합니다.

빌드 디스크립터 옵션 workDBType의 값이 DLI(기본값)인 경우 EGL 작업 데이터베이스에 대해 런타임 DB PCB 중 하나를 설정하십시오. 이 작업 데이터베이스는 런타임 PSB에서 ELAWORK로 지정되거나 EGL PCB 레코드 이름으로 지정됩니다.
참고: SQL 작업 데이터베이스로 변경하려는 경우 해당 PCB를 쉽게 제거할 수 있도록 런타임 PSB의 마지막 데이터베이스 PCB를 ELAWORK로 지정하는 것이 좋습니다.
z/OS 일괄처리
런타임 JCL의 PSB 매개변수는 작업 단계 전체에서 사용되는 런타임 PSB를 식별합니다. 배치 중에 JCL을 사용자 정의할 수 있지만 EGL은 PSB 레코드 특성 defaultPSBName의 값을 지정하여 기본 PSB 매개변수 값을 생성합니다.

z/OS 일괄처리의 경우 EGL에서는 첫 번째 런타임 PCB가 I/O PCB이어야 합니다. PSBGEN 작업을 개발할 때 IMS 시스템 프로그래머가 CMPAT를 예로 설정해야 합니다.

또한 EGL에서는 유형에 상관없이 2개의 PCB가 런타임 PSB에 있어야 합니다. DB 및 GSAM PCB가 대체 PSB로 유효합니다. 그러나 코드는 대체 PSB를 사용할 수 없습니다. 해당 유효성은 z/OS 일괄처리 및 IMS BMP에 대해 동일한 런타임 PSB를 사용하도록 허용합니다.

PSB 레코드에 선언되었지만 런타임 PSB에 없는 경우 EGL은 처음 두 개 또는 세 개의 I/O 및 텔레프로세싱 PCB에 맞게 조정합니다. 이 조정을 통해 서로 다른 환경에서 동일한 프로그램을 생성할 수 있습니다. 예를 들어, CICS의 경우 EGL 런타임은 코드에 있는 초기 I/O 및 대체 PCB 레코드를 무시합니다.

PSB 레코드 파트의 요구사항

PSB 레코드 파트의 구조는 런타임 PSB의 구조와 밀접하게 관련되며 다음 두 가지 사항이 적용됩니다.
  • 이전에 설명된 대로 대상 시스템은 PSB 레코드 파트에서 필요한 PCB에 영향을 미칩니다.
  • 프로그램 특성 @dli, 특성 필드 callInterface(AIBTDLI 또는 CBLTDLI)의 값은 또한 PSB 레코드 파트의 요구사항에 영향을 줍니다.

callInterface가 AIBTDLI인 경우

callInterface 필드가 AIBTDLI(기본값)로 설정된 경우 지정된 런타임 PCB에 대한 액세스는 PCB 이름으로 수행되고 프로그램에 있는 PSB 레코드 구조가 런타임 PSB 구조를 반영할 필요가 없습니다. 그러나 EGL에서 런타임 PCB를 사용할 수 있도록 해야 합니다.
  • IMS/VS, IMS BMP 또는 z/OS 일괄처리의 경우 런타임 PSB에 있는 첫 번째 PCB는 I/O PCB이어야 합니다. IMS는 항상 I/O PCB 이름으로 IOPCB 이름을 사용합니다.
  • IMS/VS 및 IMS BMP의 경우 EGL은 필요한 다른 PCB에 대해 다음 이름을 사용합니다.
    • 대체 PCB의 경우 ELAALT
    • 익스프레스 대체 PCB의 경우 ELAEXP
    • IMS/VS 환경에서 EGL 작업 데이터베이스로 DL/I 데이터베이스를 사용하는 경우, 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에 대한 액세스는 이름이 아닌 주소를 통해 수행됩니다.

서로 다른 환경에서 동일한 프로그램을 생성할 수 있도록 EGL이 무시하는 I/O 및 대체 PCB 레코드를 제외하고 기본 프로그램의 PSB 레코드 구조는 적어도 런타임 PSB의 초기 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를 설정해야 합니다.

호출된 프로그램에서 pcbParmspsbParm 특성을 지정하면 전자의 PCB 특정 주소가 후자의 해당 주소를 대체하므로 전달된 PSB 레코드가 무시됩니다.

IMS/VS 또는 IMS BMP에 대해 생성된 기본 또는 호출된 프로그램의 경우 기본 동작은 다음과 같습니다.
  • 두 번째 PCB 레코드는 대체 PCB라고 합니다.
  • 세 번째 PCB 레코드는 익스프레스 대체 PCB라고 합니다.

두 번째 레코드가 아닌 다른 레코드의 이름으로 ELAALT를 사용하거나 세 번째 레코드가 아닌 다른 레코드의 이름으로 ELAEXP를 사용하는 경우 이름이 우선순위를 갖습니다. EGL은 이름 지정된 PCB 레코드가 해당 유형의 런타임 PCB를 나타낸다고 가정합니다.