unloadOnExit
unloadOnExit 특성은 호출된 프로그램이 종료된 후 프로그램을 로드 해제할지 여부를 지정합니다. 올바른 값은 YES 또는 NO입니다.
- 다음 위치에서만 이 특성을 사용하십시오.
- BasicProgram 또는 TextUIProgram 스테레오타입이 있는 프로그램 내부에서 exit program 문과 함께 사용
- BasicProgram 또는 TextUIProgram 스테레오타입이 있는 프로그램의 프로그램 레벨에서 사용
프로그램 레벨과 명령문 레벨 모두에서 특성을 지정하는 경우 명령문 레벨의 우선순위가 높습니다. 이 주제의 "예제"를 참조하십시오.
- 이 특성은 호출된 프로그램에만 영향을 줍니다. 사용자가 로컬 호출
중이지 않은 경우에는 EGL에서 이 특성을 무시합니다. 로컬로 고려되려면
호출이 다음 조건을 모두 충족해야 합니다.
- 두 프로그램 모두 동일한 언어로 생성합니다.
- 두 프로그램 모두 동일한 시스템에서 실행됩니다.
- 연계 옵션 파트를 지정하지 않거나 callLink 요소의 type 특성이 localCall로 설정됩니다.
Java™ 생성의 경우 callLink 요소의 linkType 특성이 LIBRARY로 설정된 경우 unloadOnExit 특성은 아무 영향도 주지 않습니다.
- 호출된 프로그램이 메모리에 남아 있습니다.
- 프로그램에서 작성한 모든 SQL 결과 세트와 준비된 명령문이 열려 있습니다.
- 프로그램을 다시 호출하면 initNonIODataOnCall 빌드 디스크립터 옵션과 initIORecordsOnCall 빌드 디스크립터 옵션이 프로그램의 글로벌 데이터를 다시 초기화할지 여부를 제어합니다.
- 프로그램에 할당된 모든 메모리가 해제됩니다.
- 프로그램이 Java 또는 디버거에서 실행 중이고 localSqlScope 특성이 NO로 설정된 경우가 아니면 프로그램에서 작성한 모든 SQL 결과 세트와 준비된 명령문이 닫힙니다.
- 프로그램을 다시 호출하면 새 사본을 얻습니다.
프로그램을 로드 해제해도 해당 프로그램이 호출한 기타 프로그램은 자동으로 로드 해제되지 않습니다. 각 프로그램은 개별적으로 로드 해제되거나 보유됩니다.
보유된 프로그램은 후속 호출 후 로드 해제될 때까지 또는 실행 단위가 종료될 때까지 유지됩니다. transfer to transaction 문은 실행 단위를 종료하므로 unloadOnExit 특성의 값을 대체합니다. 보유된 프로그램은 transfer to program 문 이후에 유지됩니다.
- 파일
- 메시지 큐
- 데이터베이스 연결
- DataTables
- 라이브러리
DL/I 프로그램에서는 한 번에 하나의 스케줄된 PSB가 활성화됩니다. 이 PSB를 여러 프로그램에서 공유합니다. 호출된 프로그램을 로드 해제해도 PSB에는 영향을 주지 않습니다. PSB는 여전히 스케줄됩니다.
프로그램에서 사용하는 양식은 글로벌 데이터로 간주됩니다. 이 양식은 호출된 프로그램이 보유되는 경우 유지되고 프로그램이 로드 해제되면 버려집니다.
로드 해제는 커미트 또는 롤백을 의미하지 않습니다.
순환적 프로그램 호출
COBOL은 순환적 프로그램 호출을 지원하지 않습니다.
- ProgramA가 ProgramB를 직접 또는 간접으로 호출합니다.
- ProgramB가 리턴하고 보유됩니다.
- ProgramA가 ProgramB를 다시 호출합니다.
- ProgramB가 자신을 직접 또는 간접으로 호출합니다.
이 예에서 마지막 call 문으로 인해 InvocationException이 예외 처리(throw)됩니다. 따라서 로컬로 호출된 Java 프로그램이 리턴하고 보유된 후에는 나중에 로드 해제할 수 있어도 한 번에 프로그램의 사본 하나만 활성화할 수 있습니다.
값
- YES
- SQL 결과 세트를 포함하여 프로그램의 모든 메모리를 해제합니다. 이 값은 Java 생성의 경우 기본값입니다. 디버깅의 경우 호출된 프로그램이 리턴 시 기본적으로 자원 릴리스 환경 설정을 지정하십시오. EGL 디버거의 환경 설정 설정의 내용을 참조하십시오.
- NO
- 호출된 프로그램을 SQL 결과 세트, 기타 모든 변수와 함께 메모리에서 유지합니다. 이 값은 COBOL 생성에서 기본값입니다.
예제
다음 예제에서는 복구 불가능한 오류가 발생하지 않는 한 프로그램이 자신을 호출한 프로그램에 제어를 리턴한 후에도 메모리에 보유됩니다.
Program custProcess1 type basicProgram (custNum INT) {unloadOnExit = NO}
...
if(myErrorCode == TERM_ERROR)
exit program {unloadOnExit = YES};
endend