transfer to program 문을 사용한 프로그램 세그먼트화를 위한 계층 구조 구현

CICS® 환경에서 세그먼트된 모드로 잘 실행되는 EGL 프로그램 세트가 있습니다.

이러한 프로그램을 사용하여 얻을 수 있는 추가 이점은 동일한 모든 함수를 포함하는 하나의 EGL 프로그램보다 유지보수하고, 테스트하고 개선하기가 더 쉽다는 것입니다.

아래 다이어그램은 세 가지 태스크를 수행하는 네 EGL 프로그램 간의 관계를 보여줍니다. 메뉴 프로그램의 유일한 용도는 다른 세 프로그램에 액세스하는 것입니다. 사용자가 원하는 태스크를 선택하면, 메뉴 프로그램은 transfer to program 문을 사용하여 제어를 해당 프로그램에 전송합니다. 메뉴 프로그램은 요청을 추가로 정의하기 위해 작은 작업 스토리지 레코드를 전달합니다. 전송 대상 프로그램은 사용자에게 필요한 데이터를 입력하도록 프롬프트를 표시하고, 필요한 만큼 태스크를 수행한 후 transfer to program 문을 사용하여 메뉴 프로그램으로 돌아갑니다.

그림 1. transfer to program 문을 사용한 계층 구조transfer to program 문을 사용한 계층 구조
transfer to program 문을 사용하면 다음 세그먼트된 모드 제한사항을 해결할 수 있습니다.
  • 호출 대상 프로그램은 체인에 있는 모든 프로그램이 세그먼트되어있지 않으면 실행할 수 없습니다.
  • 호출 프로그램에 프로그램 제어가 반환되므로 호출 대상 프로그램이 호출자의 자원을 해제하지 않습니다.
  • 세그먼트된 converse 동안 롤인/롤아웃되는 데이터의 양이 훨씬 적습니다. 현재 제어를 보유한 프로그램의 데이터 영역만 저장됩니다.
IMS/VS 환경에서, transfer to program 문은 원래 프로그램을 위해 스토리지를 해제하지 않습니다. 제시된 예제에서는 메뉴 프로그램이 원래 프로그램입니다. IMS™ 및 CICS 환경 둘 다에서 실행되는 프로그램을 개발하는 경우에는 transfer to program 또는 transfer to transaction 문 중 하나를 사용할 수 있습니다. IMS에서만 실행되는 프로그램을 개발하는 경우에는 transfer to transaction 문을 사용하십시오. 그 이유는 다음과 같습니다.
  • 전송하는 프로그램의 자원을 해제하기 위해
  • 커미트 지점을 발생시키고 forUpdate 잠금을 해제하기 위해
  • 각 프로그램이 고유의 DB2® 계획 및 서로 다른 PSB를 보유할 수 있도록 하기 위해
  • 각 프로그램이 IMS 시스템 정의에 서로 다른 성능 튜닝 정보를 보유할 수 있도록 하기 위해
커미트 지점을 발생시키지 않으려는 경우 또는 두 프로그램이 모두 동일한 DB2 계획 및 PSB를 사용해야 하는 경우에는 IMS 환경에서 transfer to program 문을 사용하십시오.

세그먼트된 모드와 세그먼트되지 않은 모드의 동적 변경

참고: 이 기법은 VisualAge® Generator 호환 모드에서만 지원됩니다. 새 프로그램에는 이를 사용하지 않아야 합니다.
프로그램에 대해 segmented 특성을 지정할 때는 런타임 시에 converse 문이 처리되는 방식에 대한 기본 모드를 설정합니다. segmented 특성은 다음 방법을 사용하여 converseVar.segmentedMode 시스템 변수의 값을 초기화합니다.
0
프로그램이 세그먼트되어있지 않음을 표시함
1
프로그램이 세그먼트되어있음을 표시함
converseVar.segmentedMode 시스템 변수를 변경하여 런타임 시에 세그먼테이션을 동적으로 제어할 수 있습니다. converseVar.segmentedMode를 0 또는 1로 설정하여 다음 converse 문의 기본값을 대체할 수 있습니다. 각 converse 문 전에, EGL은 converseVar.segmentedMode의 값을 확인하고 converse 문을 다음과 같은 방식으로 처리합니다.
  • converseVar.segmentedMode가 1로 설정되어 있는 경우 EGL은 converse 문을 세그먼트된 상호작용으로 취급합니다.
  • converseVar.segmentedMode가 0으로 설정되어 있는 경우 EGL은 converse 문을 세그먼트되지 않은 상호작용으로 취급합니다.

converse 문이 완료되면 EGL은 프로그램의 segmented 특성에 따라 converseVar.segmentedMode를 기본값으로 재설정합니다.

converseVar.segmentedMode 시스템 변수를 사용하면 성능, 기능 및 대상 시스템의 차이를 고려하여 세그먼트된 모드를 설정하거나 해제할 수 있습니다. 세그먼테이션을 제어하려면 converse 문 앞에 다음 명령문 중 하나를 사용하십시오.
converseVar.segmentedMode = 1;  // force the next converse to be segmented
converseVar.segmentedMode = 0;  // force the next converse to be nonsegmented

converseVar.segmentedMode는 각 converse 문 이후 생성 시의 기본값으로 재설정된다는 점을 기억하십시오. 그러므로 특정 converse 문의 동작을 기본 처리로부터 변경하려는 경우에만 converseVar.segmentedMode를 설정해야 합니다.

참고: EGL은 IMS/VS 환경에서의 converseVar.segmentedMode 시스템 변수 사용을 무시합니다. IMS/VS 환경에서 converse 문을 포함하고 있는 모든 프로그램은 세그먼트된 모드로 실행되어야 합니다.