일괄처리 응용프로그램의 개별 타스크는 일괄처리 단계로 나눌 수 있습니다.
일괄처리 단계는 비즈니스 인터페이스로 com.ibm.websphere.batch.BatchJobStepLocalInterface를
지정하는 로컬 컨테이너 관리 EJB(Enterprise JavaBeans)로 구현됩니다.
BatchJobStepLocalInterface의 콜백 메소드를 사용하여
장기간 실행 환경(LREE)에서 일괄처리 작업 실행 시 일괄처리 단계를
실행할 수 있습니다.
일괄처리 단계 EJB에는 일괄처리 작업 부분에 대해 실행할 일괄처리 가능한
비즈니스 로직이 있습니다. 일반적으로, 일괄처리 단계에는 일괄처리 데이터 스트림에서
레코드를 읽고, 그 레코드로 비즈니스 로직을 수행한 후 계속해서
다음 레코드를 읽기 위한 코드가 있습니다. 일괄처리 단계 EJB의 processJobStep
메소드는 일괄처리 루프의 LREE에서 호출됩니다. 이 메소드는 데이터에 대해 일괄처리로
수행할 수 있는 모든 논리를 포함하고 있어야 합니다.
LREE는 글로벌 트랜잭션에서 일괄처리 단계 EJB 메소드를 호출합니다. 이
글로벌 트랜잭션은 LREE에서 관리됩니다. 트랜잭션 제한시간 또는 트랜잭션 확약
간격과 같은 트랜잭션 작동은 단계가 속하는 일괄처리 작업과 연관되는
체크포인트 알고리즘이 제어합니다.
다음은 BatchJobStepLocalInterface에서 나열된 순서대로
LREE가 호출하는 LREE 콜백 메소드입니다.
- setProperties(java.util.Properties properties) - xJCL에 정의된
특성이 java.util.Properties 오브젝트의 일괄처리 단계에 사용 가능하도록 만듭니다.
이 메소드는 글로벌 트랜잭션에서 호출됩니다.
- void createJobStep() - 초기화된 단계를 표시합니다.
일괄처리 데이터 스트림의 핸들 검색과 같은 초기화 논리를 여기에 위치시킬 수 있습니다.
이 메소드는 글로벌 트랜잭션에서 호출됩니다.
- int processJobStep() - 메소드의 리턴 코드 정수가 단계의 처리 완료를
표시할 때까지 일괄처리 루프에서 LREE에 의해 반복적으로 호출됩니다.
일괄처리 API에서 BatchConstants를 찾아서 리턴할 수 있는 리턴 코드를
확인하십시오. BatchConstants.STEP_CONTINUE의 리턴 코드는
일괄처리 루프에서 계속 이 메소드를 호출해야 함을 LREE에 알립니다.
BatchConstants.STEP_COMPLETE의 리턴 코드는 단계가 완료되어 이제는
destroyJobStep을 호출함을 LREE에 표시합니다.
- int destroyJobStep() - 단계에 완료되었음을 표시합니다.
이 메소드의 정수 리턴 코드는 완전히 임의적이므로
일괄처리 응용프로그램 개발자가 선택할 수 있습니다. 이 리턴 코드는 LREE
데이터베이스에 저장되며 일괄처리 단계의 리턴 코드를 표시합니다. 결과 알고리즘이 일괄처리 작업과 연관될 경우,
이 리턴 코드가 전달됩니다. 일괄처리 작업의 xJCL에 리턴 코드를 기반으로 하는
조건부 논리가 있을 경우, LREE는 이 리턴 코드를 사용하여 해당 논리를 평가합니다.
BatchJobStepLocalInterface에서 getProperties() 메소드는
현재 LREE에 의해 호출되지 않습니다. 이 메소드는 대칭을 위해 인터페이스에
포함되어 있으며 나중에 사용할 수 있을 것입니다.
일괄처리 개발에서의 문제점 해결
- 일괄처리 제어기 Bean의 전개 설명자는 일괄처리 응용프로그램의
EJB 전개 설명자에서 선언해야 하며, 일괄처리 응용프로그램에서 사용하는
단계 EJB에 대한 로컬 EJB 참조를 가지고 있어야 합니다. 일괄처리
응용프로그램마다 단 하나의 제어기 Bean만 정의할 수 있습니다.
- 모든 일괄처리 단계 메소드의 트랜잭션 속성은 필수(required)로 설정해야 합니다.
- 일괄처리 응용프로그램 개발자는 일괄처리 단계 콜백 메소드에서 수행된
트랜잭션 방식 작업이 LREE에서 시작된 글로벌 트랜잭션을 상속하는지
확인해야 합니다. 이로서 일괄처리 단계에서 수행된 작업은 모든 체크포인트에서 확약되며
단계에서 장애 조건이 발견될 경우 롤백됩니다.
- 일괄처리 단계에서 해당 데이터가 일괄처리 응용프로그램이 전개되는 Application Server의
파일 시스템에 로컬인 일괄처리 데이터 스트림(BDS)을 사용할 경우,
작업 재시작 시나리오를 지원하기 위한 특정 단계를 수행하는 것이 중요합니다.
여러 시스템에서 실행할 수 있는 Application Server에 이와 같은
일괄처리 응용프로그램을 전개했는데(예를 들어 노드
구성원이 여럿인 노드 그룹에 존재하는 동적 클러스터에 전개함)
이와 같은 응용프로그램에 대해 실행하는 일괄처리 작업이 취소된 후
재시작된 경우, 일괄처리 작업이 원래 실행된 시스템으로 재시작 요청이
전달된다고 보장할 수 없습니다. 노드 구성원이 여럿인
노드 그룹에 존재하는 동적 클러스터에 전개했는데
응용프로그램에 대해 실행하는 일괄처리 작업이 취소된 후
재시작된 경우, 재시작 요청이 동일 시스템에
전달된다고 보장할 수 없습니다. 이 시나리오에서는 장기간 실행 배치에 의해
다른 시스템에서 실행되는 Application Server로 재시작 요청이 전송됩니다. 따라서
파일 기반 유사성이 필요한 경우, 작업 재시작 시나리오를 지원하기 위해 다음과 같은
솔루션을 적용할 수 있습니다.
- 일괄처리 응용프로그램을 시작할 수 있는 모든 시스템에 대해 동등하게 데이터를
사용할 수 있는지 확인하십시오(예를 들어, 네트워크 파일 시스템을 통해(이 경우
응용프로그램 성능이 떨어질 수 있음)).
- 로컬 데이터가 존재하는 시스템에만 제공할 수 있는 응용프로그램을 Application Server에서
전개하십시오. 단 하나의 구성원 노드를 가지고 있는 노드 그룹에 존재하는
동적 클러스터에 응용프로그램을 전개하면 됩니다.