unloadOnExit

unloadOnExit 특성은 호출된 프로그램이 종료된 후 프로그램을 로드 해제할지 여부를 지정합니다. 올바른 값은 YES 또는 NO입니다.

unloadOnExit 특성에 다음 제한사항이 적용됩니다.
  • 다음 위치에서만 이 특성을 사용하십시오.
    • BasicProgram 또는 TextUIProgram 스테레오타입이 있는 프로그램 내부에서 exit program 문과 함께 사용
    • BasicProgram 또는 TextUIProgram 스테레오타입이 있는 프로그램의 프로그램 레벨에서 사용

    프로그램 레벨과 명령문 레벨 모두에서 특성을 지정하는 경우 명령문 레벨의 우선순위가 높습니다. 이 주제의 "예제"를 참조하십시오.

  • 이 특성은 호출된 프로그램에만 영향을 줍니다. 사용자가 로컬 호출 중이지 않은 경우에는 EGL에서 이 특성을 무시합니다. 로컬로 고려되려면 호출이 다음 조건을 모두 충족해야 합니다.
    • 두 프로그램 모두 동일한 언어로 생성합니다.
    • 두 프로그램 모두 동일한 시스템에서 실행됩니다.
    • 연계 옵션 파트를 지정하지 않거나 callLink 요소의 type 특성이 localCall로 설정됩니다.

    Java™ 생성의 경우 callLink 요소의 linkType 특성이 LIBRARY로 설정된 경우 unloadOnExit 특성은 아무 영향도 주지 않습니다.

unloadOnExit 특성을 NO로 설정하면 다음과 같은 결과를 얻습니다.
  • 호출된 프로그램이 메모리에 남아 있습니다.
  • 프로그램에서 작성한 모든 SQL 결과 세트와 준비된 명령문이 열려 있습니다.
  • 프로그램을 다시 호출하면 initNonIODataOnCall 빌드 디스크립터 옵션과 initIORecordsOnCall 빌드 디스크립터 옵션이 프로그램의 글로벌 데이터를 다시 초기화할지 여부를 제어합니다.
unloadOnExit 특성을 YES로 설정하는 경우 결과는 다음과 같습니다.
  • 프로그램에 할당된 모든 메모리가 해제됩니다.
  • 프로그램이 Java 또는 디버거에서 실행 중이고 localSqlScope 특성이 NO로 설정된 경우가 아니면 프로그램에서 작성한 모든 SQL 결과 세트와 준비된 명령문이 닫힙니다.
  • 프로그램을 다시 호출하면 새 사본을 얻습니다.

프로그램을 로드 해제해도 해당 프로그램이 호출한 기타 프로그램은 자동으로 로드 해제되지 않습니다. 각 프로그램은 개별적으로 로드 해제되거나 보유됩니다.

보유된 프로그램은 후속 호출 후 로드 해제될 때까지 또는 실행 단위가 종료될 때까지 유지됩니다. transfer to transaction 문은 실행 단위를 종료하므로 unloadOnExit 특성의 값을 대체합니다. 보유된 프로그램은 transfer to program 문 이후에 유지됩니다.

실행 단위에 있는 모든 프로그램이 다음 요소를 공유하므로 호출된 프로그램이 로드 해제될 때 해당 요소는 영향을 받지 않습니다.
  • 파일
  • 메시지 큐
  • 데이터베이스 연결
  • DataTables
  • 라이브러리

DL/I 프로그램에서는 한 번에 하나의 스케줄된 PSB가 활성화됩니다. 이 PSB를 여러 프로그램에서 공유합니다. 호출된 프로그램을 로드 해제해도 PSB에는 영향을 주지 않습니다. PSB는 여전히 스케줄됩니다.

프로그램에서 사용하는 양식은 글로벌 데이터로 간주됩니다. 이 양식은 호출된 프로그램이 보유되는 경우 유지되고 프로그램이 로드 해제되면 버려집니다.

로드 해제는 커미트 또는 롤백을 의미하지 않습니다.

순환적 프로그램 호출

COBOL은 순환적 프로그램 호출을 지원하지 않습니다.

Java에서는 다음 예제와 같은 상황 외에는 순환적 로컬 호출을 지원합니다.
  1. ProgramA가 ProgramB를 직접 또는 간접으로 호출합니다.
  2. ProgramB가 리턴하고 보유됩니다.
  3. ProgramA가 ProgramB를 다시 호출합니다.
  4. ProgramB가 자신을 직접 또는 간접으로 호출합니다.

이 예에서 마지막 call 문으로 인해 InvocationException이 예외 처리(throw)됩니다. 따라서 로컬로 호출된 Java 프로그램이 리턴하고 보유된 후에는 나중에 로드 해제할 수 있어도 한 번에 프로그램의 사본 하나만 활성화할 수 있습니다.

unloadOnExit 특성은 다음 값을 갖습니다.
YES
SQL 결과 세트를 포함하여 프로그램의 모든 메모리를 해제합니다. 이 값은 Java 생성의 경우 기본값입니다. 디버깅의 경우 호출된 프로그램이 리턴 시 기본적으로 자원 릴리스 환경 설정을 지정하십시오. EGL 디버거의 환경 설정 설정의 내용을 참조하십시오.
NO
호출된 프로그램을 SQL 결과 세트, 기타 모든 변수와 함께 메모리에서 유지합니다. 이 값은 COBOL 생성에서 기본값입니다.

예제

다음 예제에서는 복구 불가능한 오류가 발생하지 않는 한 프로그램이 자신을 호출한 프로그램에 제어를 리턴한 후에도 메모리에 보유됩니다.

Program custProcess1 type basicProgram (custNum INT) {unloadOnExit = NO}

  ...

  if(myErrorCode == TERM_ERROR)
    exit program {unloadOnExit = YES};
  endend