iSeriesC의 개발 중에 커미트 제어
iSeriesC의 프로그램 개발 중에 프로그램에서 명시적으로 커미트 제어를 지정할 수 있습니다. 그러나 프로그램이 실행될 대 IBM® Rational® EGL Server for IBM i에서 일부 암시적 커미트 제어를 수행합니다.
명시적 커미트 제어
EGL로 프로그램을 정의하는 중에 명시적 로직을 지정하여 IBM i 원시 데이터베이스 파일(상대 레코드, 연속 레코드, 색인화된 레코드 포함) 및 SQL 테이블 모두에 대해 롤백 및 커미트를 실행할 수 있습니다. 이 로직은 sysLib.commit() 및 sysLib.rollback() 시스템 함수에 대한 호출로 구성됩니다. 또한 converseVar.commitOnConverse 시스템 변수를 1로 설정할 수 있으며 converse 문이 사용자에게 양식을 표시할 때 변경사항이 커미트될 수 있습니다.
커미트 제어의 명시적 사용은 현재 복구 단위를 종료시키고 다른 복구 단위를 시작합니다. 변경사항이 커미트되거나 롤백될 때 커미트 제어 서비스가 레코드를 해제하고 보유되는 파일을 잠급니다.
암시적 커미트 제어
특정한 시간에 EGL이 커미트 제어를 자동으로 수행합니다. 이 암시적 커미트 제어는 명시적 커미트 제어의 인스턴스와는 관계가 없습니다. 프로그램을 디자인하면 암시적인 커미트 제어를 악용하고 명시적인 커미트 제어 사용을 피할 수 있습니다. 다음 테이블은 EGL이 수행하는 암시적 커미트 제어 처리를 요약합니다.
| 프로그램 종료의 원인 | 암시적 조치 | 기본 프로그램 | 호출된 프로그램 |
|---|---|---|---|
| transfer to transaction 또는 show | sysLib.commit() | 예 | N/A |
| SQL CLOSE CURSOR | 예 | N/A | |
| transfer to program | sysLib.commit() | 아니오 | N/A |
| SQL CLOSE CURSOR | 예 | N/A | |
| exit program | sysLib.commit() | 예 | 아니오 |
| SQL CLOSE CURSOR | 예 | 프로그램이 실행 단위를 시작한 경우, 예 | |
| 오류 | sysLib.rollback() | 예 | 아니오 |
| SQL CLOSE CURSOR | 예 | 프로그램이 실행 단위를 시작한 경우, 예 |