RESOLVED - BATCH-666: consolidate duplications in SimpleStepFactoryBean and RepeatOperationsStepFactoryBean

pulled up listeners
This commit is contained in:
robokaso
2008-06-13 09:47:34 +00:00
parent 567fc74779
commit 125d245d95
3 changed files with 46 additions and 83 deletions

View File

@@ -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() {

View File

@@ -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);

View File

@@ -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);
}
/**