체크포인트 알고리즘
눈금 엔드포인트는 체크포인트 알고리즘을 사용하여 일괄처리 단계가 호출되는 글로벌 트랜잭션을 커미트하는 시기를 결정합니다. 이러한 알고리즘은 xJCL(XML Job Control Language) 정의를 통해 일괄처리 작업에 적용됩니다. xJCL에 체크포인트 알고리즘에 대해 지정되는 특성은 체크포인트 동작(예: 트랜잭션 제한시간 및 체크포인트 간격)이 일괄처리 단계에 대해 사용자 정의되도록 허용합니다. 제품은 시간 기반의 체크포인트 알고리즘과 레코드 기반의 알고리즘 모두를 제공하며 추가 사용자 정의 체크포인트 알고리즘을 빌드하기 위해 SPI(Service Provider Interface)를 정의합니다.
processJobStep 메소드의 각 일괄처리 단계 반복에서 공통 일괄처리 컨테이너는 글로벌 트랜잭션 커미트 여부에 따라 해당 단계에 적용되는 체크포인트 알고리즘을 참고합니다. 체크포인트 알고리즘에서 콜백 메소드를 사용하면 공통 일괄처리 컨테이너가 글로벌 트랜잭션이 커미트되거나 시작되는 경우 이를 알고리즘에 통지합니다. 이 동작을 통해 알고리즘은 글로벌 트랜잭션 라이프사이클을 추적합니다. processJobStep 메소드의 각 반복에서 공통 일괄처리 컨테이너는 트랜잭션 커미트 여부를 판별하기 위해 알고리즘에서 ShouldCheckpointBeExecuted 콜백 메소드를 호출합니다. 알고리즘은 이 메소드를 통해 체크포인트 간격을 제어합니다.
사용자 정의 체크포인트 알고리즘을 작성하기 위해 사용할 수 있는 체크포인트 알고리즘 SPI에 대해서는 Information Center 참조 섹션에 있는 체크포인트 알고리즘 SPI에 대한 일괄처리 API를 검토하십시오. 클래스 이름은 com.ibm.wsspi.batch.CheckpointPolicyAlgorithm입니다.
제품은 두 개의 체크포인트 알고리즘인 시간 기반 알고리즘과 레코드 기반 알고리즘을 지원합니다. 둘 다 다음 절에서 설명됩니다.
시간 기반 알고리즘
<checkpoint-algorithm name="timebased">
<classname>com.ibm.wsspi.batch.checkpointalgorithms.timebased</classname>
<props>
<prop name="interval" value="15" />
<prop name="TransactionTimeOut" value="30" />
</props>
</checkpoint-algorithm>
이전 예의 TransactionTimeOut 특성과 간격 단위는 초 단위로 표시됩니다.
레코드 기반 알고리즘
레코드 기반 체크포인트 알고리즘은 일괄처리 단계의 processJobStep 메소드에 대해 지정된 반복 횟수만큼 글로벌 트랜잭션을 커미트합니다. processJobStep 메소드에 대한 각 호출은 하나의 레코드를 통한 반복으로 처리됩니다. processJobStep 메소드는 각 호출마다 일괄처리 데이터 스트림에서 여러 개의 레코드를 검색할 수 있습니다. 그러나 이 체크포인트 알고리즘의 경우, 하나의 레코드는 processJobStep 메소드에 대한 한 번의 호출과 같습니다.
<checkpoint-algorithm name="recordbased">
<classname>com.ibm.wsspi.batch.checkpointalgorithms.recordbased</classname>
<props>
<prop name="recordcount" value="1000" />
<prop name="TransactionTimeOut" value="60" />
</props>
</checkpoint-algorithm>
이전 예제의 TransactionTimeOut 특성 단위는 초로 표시됩니다.
xJCL에 지정하지 않은 경우, 기본 트랜잭션 제한시간은 60초이고 기본 레코드 수는 10000입니다.
일괄처리 단계에 체크포인트 알고리즘 적용
체크포인트 알고리즘은 xJCL을 통해 일괄처리 작업에 적용됩니다. 다중 체크포인트 알고리즘을 xJCL로 선언할 수 있으며 다른 알고리즘을 각 일괄처리 단계에 적용할 수 있습니다. 일괄처리 단계에는 하나의 체크포인트 알고리즘만 적용할 수 있습니다.
다음 예제는 xJCL에서 체크포인트 알고리즘을 적용합니다.
<job name="PostingsSampleEar">
<checkpoint-algorithm name="timebased">
<classname>com.ibm.wsspi.batch.checkpointalgorithms.timebased</classname>
<props>
<prop name="interval" value="15" />
<prop name=" TransactionTimeOut" value="30" />
</props>
</checkpoint-algorithm>
<checkpoint-algorithm name="recordbased">
<classname>com.ibm.wsspi.batch.checkpointalgorithms.recordbased</classname>
<props>
<prop name="recordcount" value="1000" />
<prop name="TransactionTimeOut" value="60" />
</props>
</checkpoint-algorithm>
<job-step name="Step1">
<checkpoint-algorithm-ref name="timebased" />
</job-step>
<job-step name="Step2">
<checkpoint-algorithm-ref name="recordbased" />
</job-step>
</job>