Retry-step 처리
processJobStep 메소드가 트랜잭션 일괄처리 작업에서 오류를 만나면 retry-step 처리를 사용하여 작업 단계를 다시 시도합니다. xJCL에서 retry-step 정책을 지정합니다.
각 작업 단계에는 자체 retry-step 정책 구성이 있습니다. xJCL에서 com.ibm.batch.step.retry.count 작업 단계 특성에 대해 0(영)이 아닌 값을 지정하여 retry-step 처리를 사용합니다.
단계 실패 시 다시 시도될 수 있는 예외를 지정하도록 com.ibm.batch.step.retry.include.exception.class.<n> 특성을 사용하고 단계 실패 시 다시 시도될 수 없는 예외를 지정하도록 com.ibm.batch.step.retry.exclude.exception.class.<n> 특성을 사용하여 retry-step 처리를 개선할 수 있습니다. 두 특성은 상호 배타적입니다.
일괄처리 프레임워크는 로컬 작업 상태 데이터베이스에서 각 단계 기반으로 retry-step 처리를 추적합니다. 단계 처리 끝에서 메시지는 작업 로그에 기록됩니다. 메시지는 단계를 다시 시도하는 횟수 및 단계가 사용하는 전체 클럭 시간을 표시합니다. 클럭 시간의 포맷은 HH:MM:SS:MMM이며, 여기서 HH는 시간이고, MM은 분이며, SS는 초이고 MMM은 밀리초입니다.
다음 목록은 설명이 이어지는 retry-step 특성을 포함합니다.
- com.ibm.batch.step.retry.count
processJobStep 메소드를 처리하는 단계에서의 오류 때문에 단계를 다시 시도할 수 있는 횟수를 지정합니다. 한계에 도달하면 추가 단계 오류는 다시 시도되지 않습니다.
BatchJobStepInterface.processJobStep 메소드는 throws java.lang.Exception 절을 지원합니다. processJobStep 메소드의 예외는 retry-step 처리에 적합합니다.
단계를 다시 시도하는 것은 다시 시작하는 것과 동등합니다. BatchJobStepInterface.destroyJobStep 메소드는 단계 오류 후 호출됩니다. 체크포인트 트랜잭션은 단계 다시 시작 전에 롤백됩니다. 단계가 다시 시도되면 BatchJobStepInterface.createJobStep 메소드가 호출됩니다. 단계와 연관된 모든 일괄처리 데이터 스트림이 처리완료되고 재시도 시 다시 열립니다.
단계 재시도를 위한 한계에 도달한 후 단계에 대해 오류가 발생하면, 단계가 실패하고 다시 시작 가능한 상태로 작업이 완료됩니다.
작업 단계 컨텍스트로 재시도 리스너를 등록하는 경우, 재시도 리스너는 다시 시도될 수 있는 모든 예외에 대한 제어를 수신합니다. 실패된 단계가 destroyJobStep 메소드를 입력하기 전 및 체크포인트 트랜잭션이 롤백되기 전에 RetryListener.onError(Throwable t) 메소드가 호출됩니다. 단계가 재시도되면 RetryListener.onRetry(Throwable t) 메소드는 제어를 수신하지만, BatchJobStepInterface.createJobStep 메소드가 호출됩니다.
재시도 리스너는 RetryListener.onRetry 메소드가 호출된 후 즉시 등록 해제됩니다. 일괄처리 애플리케이션이 추가 시도를 인식하여 다시 단계를 시도하려는 경우, 재시도 리스너를 다시 등록합니다.
단계가 다시 시도될 수 있는 횟수의 실행 개수는 모든 체크포인트에서 0(영)으로 재설정됩니다. 이는 재시도 한계가 사실상 체크포인트당 한계임을 의미합니다.
Retry-step 처리는 기본적으로 사용 불가능합니다.
- com.ibm.batch.step.retry.delay.time
단계를 다시 시도하기 전에 대기할 시간(밀리초)을 지정합니다. 실패한 단계가 destroyJobStep 메소드를 통해 이동한 후 및 체크포인트 트랜잭션이 롤백된 후 지연이 발생합니다. 그러나 RetryListener.onRetry 메소드 호출 전에 지연이 발생합니다.
- com.ibm.batch.step.retry.include.exception.class.<n>
단계 실패 시 다시 시도될 수 있는 예외 목록을 지정합니다.
<n>은 정수입니다. 1에서 변수를 시작하고 예외마다 하나씩 증가시킵니다.
예외를 지정하지 않으면 기본값은 모든 예외가 목록에 포함됩니다.
다음 예는 특성을 사용합니다.
<job-step name="WCGStep1"> <classname>com.ibm.ws.batch.sample.WCGSampleBDSBatchStep</classname> <checkpoint-algorithm-ref name="chkpt"/> <results-ref name="jobsum"/> <props> <prop name="com.ibm.batch.step.retry.count" value="1" /> <prop name="com.ibm.batch.step.retry.delay.time" value="3000" /> <prop name="com.ibm.batch.step.retry.include.exception.class.1" value="java.sql.SQLException" /> </props> ... </job-step>
WCGStep1 작업 단계는 SQL(Structured Query Language) 예외에 대한 작업 단계를 다시 시도합니다.
- com.ibm.batch.step.retry.exclude.exception.class.<n>
단계 실패 시 다시 시도될 수 없는 예외 목록을 지정합니다.
<n> 변수는 정수입니다. 1에서 변수를 시작하고 예외마다 하나씩 증가시킵니다.
예외를 지정하지 않으면 기본값은 예외가 목록에서 제외되지 않는 것입니다.
다음 예는 특성을 사용합니다.
<job-step name="WCGStep1"> <classname>com.ibm.ws.batch.sample.WCGSampleBDSBatchStep</classname> <checkpoint-algorithm-ref name="chkpt"/> <results-ref name="jobsum"/> <props> <prop name="com.ibm.batch.step.retry.count" value="1" /> <prop name="com.ibm.batch.step.retry.delay.time" value="3000" /> <prop name="com.ibm.batch.step.retry.exclude.exception.class.1" value="java.sql.SQLException" /> </props> ... </job-step>
WCGStep1 작업 단계는 SQL(Structured Query Language) 예외에 대한 작업 단계를 다시 시도하지 않습니다.
재시도 리스너
JobStepContext 메소드로 재시도 리스너를 등록하여 다시 시도할 예외를 인식할 수 있습니다. 다시 시도될 수 있는 예외가 발생하고 단계가 다시 시도될 때마다 재시도 리스너는 제어를 수신합니다.
JobStepContextMgr.getContext().addRetryListener(new MyRetryListener());