OPEN - issue BATCH-378: RepeatListener is confusing and too generic to use for 'intercepting' a step
http://jira.springframework.org/browse/BATCH-378 Add JobListener to SimpleJob. Change StepListener method names.
This commit is contained in:
@@ -25,8 +25,10 @@ import org.springframework.batch.core.domain.BatchStatus;
|
||||
import org.springframework.batch.core.domain.JobExecution;
|
||||
import org.springframework.batch.core.domain.JobInstance;
|
||||
import org.springframework.batch.core.domain.JobInterruptedException;
|
||||
import org.springframework.batch.core.domain.JobListener;
|
||||
import org.springframework.batch.core.domain.Step;
|
||||
import org.springframework.batch.core.domain.StepExecution;
|
||||
import org.springframework.batch.core.interceptor.CompositeJobListener;
|
||||
import org.springframework.batch.core.repository.JobRepository;
|
||||
import org.springframework.batch.core.runtime.ExitStatusExceptionClassifier;
|
||||
import org.springframework.batch.execution.scope.SimpleStepContext;
|
||||
@@ -50,6 +52,18 @@ public class SimpleJob extends AbstractJob {
|
||||
|
||||
private ExitStatusExceptionClassifier exceptionClassifier = new SimpleExitStatusExceptionClassifier();
|
||||
|
||||
private CompositeJobListener listener = new CompositeJobListener();
|
||||
|
||||
public void setListeners(JobListener[] listeners) {
|
||||
for (int i = 0; i < listeners.length; i++) {
|
||||
this.listener.register(listeners[i]);
|
||||
}
|
||||
}
|
||||
|
||||
public void setListener(JobListener listener) {
|
||||
this.listener.register(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the specified job by looping through the steps and delegating to the
|
||||
* {@link Step}.
|
||||
@@ -73,6 +87,8 @@ public class SimpleJob extends AbstractJob {
|
||||
|
||||
execution.setStartTime(new Date());
|
||||
updateStatus(execution, BatchStatus.STARTING);
|
||||
|
||||
listener.beforeJob(execution);
|
||||
|
||||
int startedCount = 0;
|
||||
|
||||
@@ -114,6 +130,8 @@ public class SimpleJob extends AbstractJob {
|
||||
|
||||
updateStatus(execution, BatchStatus.COMPLETED);
|
||||
|
||||
listener.afterJob();
|
||||
|
||||
}
|
||||
catch (JobInterruptedException e) {
|
||||
updateStatus(execution, BatchStatus.STOPPED);
|
||||
|
||||
@@ -182,10 +182,10 @@ public class TaskletStep implements Step, InitializingBean, BeanNameAware {
|
||||
Exception fatalException = null;
|
||||
try {
|
||||
|
||||
listener.open(stepExecution);
|
||||
listener.beforeStep(stepExecution);
|
||||
exitStatus = tasklet.execute();
|
||||
try {
|
||||
exitStatus = exitStatus.and(listener.close());
|
||||
exitStatus = exitStatus.and(listener.afterStep());
|
||||
}
|
||||
catch (Exception e) {
|
||||
logger.error("Encountered an error on listener close.", e);
|
||||
@@ -205,7 +205,7 @@ public class TaskletStep implements Step, InitializingBean, BeanNameAware {
|
||||
logger.error("Encountered an error running the tasklet");
|
||||
updateStatus(stepExecution, BatchStatus.FAILED);
|
||||
try {
|
||||
exitStatus = exitStatus.and(listener.onError(e));
|
||||
exitStatus = exitStatus.and(listener.onErrorInStep(e));
|
||||
}
|
||||
catch (Exception ex) {
|
||||
logger.error("Encountered an error on listener close.", ex);
|
||||
|
||||
@@ -28,6 +28,7 @@ import org.springframework.batch.core.domain.JobInterruptedException;
|
||||
import org.springframework.batch.core.domain.JobParameters;
|
||||
import org.springframework.batch.core.domain.Step;
|
||||
import org.springframework.batch.core.domain.StepExecution;
|
||||
import org.springframework.batch.core.interceptor.JobListenerSupport;
|
||||
import org.springframework.batch.core.repository.JobRepository;
|
||||
import org.springframework.batch.core.runtime.ExitStatusExceptionClassifier;
|
||||
import org.springframework.batch.execution.repository.SimpleJobRepository;
|
||||
@@ -140,6 +141,19 @@ public class SimpleJobTests extends TestCase {
|
||||
assertNotNull(jobExecution.getStartTime());
|
||||
}
|
||||
|
||||
public void testRunNormallyWithListener() throws Exception {
|
||||
job.setListener(new JobListenerSupport() {
|
||||
public void beforeJob(JobExecution jobExecution) {
|
||||
list.add("before");
|
||||
}
|
||||
public void afterJob() {
|
||||
list.add("after");
|
||||
}
|
||||
});
|
||||
job.execute(jobExecution);
|
||||
assertEquals(4, list.size());
|
||||
}
|
||||
|
||||
public void testRunWithSimpleStepExecutor() throws Exception {
|
||||
|
||||
job.setJobRepository(jobRepository);
|
||||
|
||||
@@ -105,10 +105,10 @@ public class TaskletStepTests extends TestCase {
|
||||
public void testSuccessfulExecutionWithListener() throws Exception {
|
||||
TaskletStep step = new TaskletStep(new StubTasklet(false, false), new JobRepositorySupport());
|
||||
step.setListener(new StepListenerSupport() {
|
||||
public void open(StepExecution context) {
|
||||
public void beforeStep(StepExecution context) {
|
||||
list.add("open");
|
||||
}
|
||||
public ExitStatus close() {
|
||||
public ExitStatus afterStep() {
|
||||
list.add("close");
|
||||
return ExitStatus.CONTINUABLE;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user