RESOLVED - BATCH-666: consolidate duplications in SimpleStepFactoryBean and RepeatOperationsStepFactoryBean
pulled up listeners
This commit is contained in:
@@ -17,6 +17,7 @@ package org.springframework.batch.core.step.item;
|
||||
|
||||
import org.springframework.batch.core.Step;
|
||||
import org.springframework.batch.core.StepExecutionListener;
|
||||
import org.springframework.batch.core.StepListener;
|
||||
import org.springframework.batch.core.repository.JobRepository;
|
||||
import org.springframework.batch.item.ItemReader;
|
||||
import org.springframework.batch.item.ItemStream;
|
||||
@@ -30,13 +31,17 @@ import org.springframework.util.Assert;
|
||||
/**
|
||||
* Base class for factory beans for {@link ItemOrientedStep}. Ensures that all
|
||||
* the mandatory properties are set, and provides basic support for the
|
||||
* {@link Step} interface responsibilities like start limit.
|
||||
* {@link Step} interface responsibilities like start limit. Supports
|
||||
* registration of {@link ItemStream}s and {@link StepListener}s.
|
||||
*
|
||||
* @see SimpleStepFactoryBean
|
||||
* @see RepeatOperationsStepFactoryBean
|
||||
*
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public abstract class AbstractStepFactoryBean implements FactoryBean, BeanNameAware {
|
||||
|
||||
|
||||
private String name;
|
||||
|
||||
private int startLimit = Integer.MAX_VALUE;
|
||||
@@ -54,9 +59,11 @@ public abstract class AbstractStepFactoryBean implements FactoryBean, BeanNameAw
|
||||
private boolean singleton = true;
|
||||
|
||||
private Validator jobRepositoryValidator = new TransactionInterceptorValidator(1);
|
||||
|
||||
|
||||
private ItemStream[] streams = new ItemStream[0];
|
||||
|
||||
private StepListener[] listeners = new StepListener[0];
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@@ -113,7 +120,7 @@ public abstract class AbstractStepFactoryBean implements FactoryBean, BeanNameAw
|
||||
public void setItemWriter(ItemWriter itemWriter) {
|
||||
this.itemWriter = itemWriter;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* The streams to inject into the {@link Step}. Any instance of
|
||||
* {@link ItemStream} can be used, and will then receive callbacks at the
|
||||
@@ -125,6 +132,25 @@ public abstract class AbstractStepFactoryBean implements FactoryBean, BeanNameAw
|
||||
this.streams = streams;
|
||||
}
|
||||
|
||||
/**
|
||||
* The listeners to inject into the {@link Step}. Any instance of
|
||||
* {@link StepListener} can be used, and will then receive callbacks at the
|
||||
* appropriate stage in the step.
|
||||
*
|
||||
* @param listeners an array of listeners
|
||||
*/
|
||||
public void setListeners(StepListener[] listeners) {
|
||||
this.listeners = listeners;
|
||||
}
|
||||
|
||||
/**
|
||||
* Protected getter for the {@link StepListener}s.
|
||||
* @return the listeners
|
||||
*/
|
||||
protected StepListener[] getListeners() {
|
||||
return listeners;
|
||||
}
|
||||
|
||||
/**
|
||||
* Protected getter for the {@link ItemReader} for subclasses to use.
|
||||
* @return the itemReader
|
||||
@@ -186,9 +212,9 @@ public abstract class AbstractStepFactoryBean implements FactoryBean, BeanNameAw
|
||||
step.setJobRepository(jobRepository);
|
||||
step.setStartLimit(startLimit);
|
||||
step.setAllowStartIfComplete(allowStartIfComplete);
|
||||
|
||||
|
||||
step.setStreams(streams);
|
||||
|
||||
|
||||
ItemReader itemReader = getItemReader();
|
||||
ItemWriter itemWriter = getItemWriter();
|
||||
|
||||
@@ -208,6 +234,17 @@ public abstract class AbstractStepFactoryBean implements FactoryBean, BeanNameAw
|
||||
step.registerStepExecutionListener((StepExecutionListener) itemWriter);
|
||||
}
|
||||
|
||||
StepExecutionListener[] stepListeners = BatchListenerFactoryHelper.getStepListeners(listeners);
|
||||
itemReader = BatchListenerFactoryHelper.getItemReader(itemReader, listeners);
|
||||
itemWriter = BatchListenerFactoryHelper.getItemWriter(itemWriter, listeners);
|
||||
|
||||
// In case they are used by subclasses:
|
||||
setItemReader(itemReader);
|
||||
setItemWriter(itemWriter);
|
||||
|
||||
step.setStepExecutionListeners(stepListeners);
|
||||
step.setItemHandler(new SimpleItemHandler(itemReader, itemWriter));
|
||||
|
||||
}
|
||||
|
||||
public Class getObjectType() {
|
||||
|
||||
@@ -16,10 +16,6 @@
|
||||
package org.springframework.batch.core.step.item;
|
||||
|
||||
import org.springframework.batch.core.Step;
|
||||
import org.springframework.batch.core.StepExecutionListener;
|
||||
import org.springframework.batch.core.StepListener;
|
||||
import org.springframework.batch.item.ItemReader;
|
||||
import org.springframework.batch.item.ItemWriter;
|
||||
import org.springframework.batch.repeat.RepeatOperations;
|
||||
import org.springframework.batch.repeat.support.RepeatTemplate;
|
||||
|
||||
@@ -33,24 +29,10 @@ import org.springframework.batch.repeat.support.RepeatTemplate;
|
||||
*/
|
||||
public class RepeatOperationsStepFactoryBean extends AbstractStepFactoryBean {
|
||||
|
||||
private StepListener[] listeners = new StepListener[0];
|
||||
|
||||
private RepeatOperations chunkOperations = new RepeatTemplate();
|
||||
|
||||
private RepeatOperations stepOperations = new RepeatTemplate();
|
||||
|
||||
|
||||
/**
|
||||
* The listeners to inject into the {@link Step}. Any instance of
|
||||
* {@link StepListener} can be used, and will then receive callbacks at the
|
||||
* appropriate stage in the step.
|
||||
*
|
||||
* @param listeners an array of listeners
|
||||
*/
|
||||
public void setListeners(StepListener[] listeners) {
|
||||
this.listeners = listeners;
|
||||
}
|
||||
|
||||
/**
|
||||
* The {@link RepeatOperations} to use for the outer loop of the batch
|
||||
* processing. Should be set up by the caller through a factory. Defaults to
|
||||
@@ -81,21 +63,8 @@ public class RepeatOperationsStepFactoryBean extends AbstractStepFactoryBean {
|
||||
|
||||
super.applyConfiguration(step);
|
||||
|
||||
ItemReader itemReader = getItemReader();
|
||||
ItemWriter itemWriter = getItemWriter();
|
||||
|
||||
StepExecutionListener[] stepListeners = BatchListenerFactoryHelper.getStepListeners(listeners);
|
||||
itemReader = BatchListenerFactoryHelper.getItemReader(itemReader, listeners);
|
||||
itemWriter = BatchListenerFactoryHelper.getItemWriter(itemWriter, listeners);
|
||||
RepeatOperations chunkOperations = BatchListenerFactoryHelper.addChunkListeners(this.chunkOperations, listeners);
|
||||
|
||||
// In case they are used by subclasses:
|
||||
setItemReader(itemReader);
|
||||
setItemWriter(itemWriter);
|
||||
|
||||
step.setStepExecutionListeners(stepListeners);
|
||||
step.setItemHandler(new SimpleItemHandler(itemReader, itemWriter));
|
||||
|
||||
RepeatOperations chunkOperations = BatchListenerFactoryHelper.addChunkListeners(this.chunkOperations, getListeners());
|
||||
|
||||
step.setChunkOperations(chunkOperations);
|
||||
step.setStepOperations(stepOperations);
|
||||
|
||||
|
||||
@@ -18,10 +18,6 @@ package org.springframework.batch.core.step.item;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.batch.core.Step;
|
||||
import org.springframework.batch.core.StepExecutionListener;
|
||||
import org.springframework.batch.core.StepListener;
|
||||
import org.springframework.batch.item.ItemReader;
|
||||
import org.springframework.batch.item.ItemWriter;
|
||||
import org.springframework.batch.repeat.CompletionPolicy;
|
||||
import org.springframework.batch.repeat.exception.DefaultExceptionHandler;
|
||||
import org.springframework.batch.repeat.exception.ExceptionHandler;
|
||||
@@ -51,8 +47,6 @@ public class SimpleStepFactoryBean extends AbstractStepFactoryBean {
|
||||
|
||||
private int commitInterval = 0;
|
||||
|
||||
private StepListener[] listeners = new StepListener[0];
|
||||
|
||||
private TaskExecutor taskExecutor;
|
||||
|
||||
private ItemHandler itemHandler;
|
||||
@@ -87,25 +81,6 @@ public class SimpleStepFactoryBean extends AbstractStepFactoryBean {
|
||||
this.chunkCompletionPolicy = chunkCompletionPolicy;
|
||||
}
|
||||
|
||||
/**
|
||||
* The listeners to inject into the {@link Step}. Any instance of
|
||||
* {@link StepListener} can be used, and will then receive callbacks at the
|
||||
* appropriate stage in the step.
|
||||
*
|
||||
* @param listeners an array of listeners
|
||||
*/
|
||||
public void setListeners(StepListener[] listeners) {
|
||||
this.listeners = listeners;
|
||||
}
|
||||
|
||||
/**
|
||||
* Protected getter for the {@link StepListener}s.
|
||||
* @return the listeners
|
||||
*/
|
||||
protected StepListener[] getListeners() {
|
||||
return listeners;
|
||||
}
|
||||
|
||||
/**
|
||||
* Protected getter for the step operations to make them available in
|
||||
* subclasses.
|
||||
@@ -174,24 +149,11 @@ public class SimpleStepFactoryBean extends AbstractStepFactoryBean {
|
||||
|
||||
super.applyConfiguration(step);
|
||||
|
||||
ItemReader itemReader = getItemReader();
|
||||
ItemWriter itemWriter = getItemWriter();
|
||||
|
||||
chunkOperations = new RepeatTemplate();
|
||||
chunkOperations.setCompletionPolicy(getChunkCompletionPolicy());
|
||||
BatchListenerFactoryHelper.addChunkListeners(chunkOperations, listeners);
|
||||
BatchListenerFactoryHelper.addChunkListeners(chunkOperations, getListeners());
|
||||
step.setChunkOperations(chunkOperations);
|
||||
|
||||
StepExecutionListener[] stepListeners = BatchListenerFactoryHelper.getStepListeners(listeners);
|
||||
itemReader = BatchListenerFactoryHelper.getItemReader(itemReader, listeners);
|
||||
itemWriter = BatchListenerFactoryHelper.getItemWriter(itemWriter, listeners);
|
||||
|
||||
// In case they are used by subclasses:
|
||||
setItemReader(itemReader);
|
||||
setItemWriter(itemWriter);
|
||||
|
||||
step.setStepExecutionListeners(stepListeners);
|
||||
|
||||
stepOperations = new RepeatTemplate();
|
||||
|
||||
if (taskExecutor != null) {
|
||||
@@ -204,11 +166,6 @@ public class SimpleStepFactoryBean extends AbstractStepFactoryBean {
|
||||
|
||||
step.setStepOperations(stepOperations);
|
||||
|
||||
ItemHandler itemHandler = new SimpleItemHandler(itemReader, itemWriter);
|
||||
|
||||
setItemHandler(itemHandler);
|
||||
step.setItemHandler(itemHandler);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user