From 50c35caefafff573e326283221d9e2cc45737e0d Mon Sep 17 00:00:00 2001 From: robokaso Date: Tue, 10 Feb 2009 15:43:59 +0000 Subject: [PATCH] IN PROGRESS - BATCH-1010: StepFactoryBeans cleanup --- .../item/FaultTolerantStepFactoryBean.java | 48 -------------- .../core/step/item/SimpleStepFactoryBean.java | 62 ++++++++++++++----- 2 files changed, 45 insertions(+), 65 deletions(-) diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBean.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBean.java index d43ea0562..e99677d10 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBean.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBean.java @@ -21,11 +21,6 @@ import java.util.Collection; import java.util.HashSet; import java.util.List; -import org.springframework.batch.core.ItemProcessListener; -import org.springframework.batch.core.ItemReadListener; -import org.springframework.batch.core.ItemWriteListener; -import org.springframework.batch.core.SkipListener; -import org.springframework.batch.core.StepListener; import org.springframework.batch.core.step.skip.LimitCheckingItemSkipPolicy; import org.springframework.batch.core.step.skip.NonSkippableReadException; import org.springframework.batch.core.step.skip.SkipLimitExceededException; @@ -338,49 +333,6 @@ public class FaultTolerantStepFactoryBean extends SimpleStepFactoryBean chunkProvider, - SimpleChunkProcessor chunkProcessor) { - - chunkProvider.setListeners(BatchListenerFactoryHelper.> getListeners(getListeners(), - ItemReadListener.class)); - chunkProvider.setListeners(BatchListenerFactoryHelper.> getListeners(getListeners(), - SkipListener.class)); - - chunkProcessor.setListeners(BatchListenerFactoryHelper.> getListeners(getListeners(), - ItemProcessListener.class)); - chunkProcessor.setListeners(BatchListenerFactoryHelper.> getListeners(getListeners(), - ItemWriteListener.class)); - chunkProcessor.setListeners(BatchListenerFactoryHelper.> getListeners(getListeners(), - SkipListener.class)); - } - - /** - * Auto-register reader, processor and writer as item listeners if - * applicable. - */ - private void registerImplicitItemListeners(SimpleChunkProvider chunkProvider, - SimpleChunkProcessor chunkProcessor) { - for (Object itemHandler : new Object[] { getItemReader(), getItemWriter(), getItemProcessor() }) { - - if (itemHandler instanceof SkipListener) { - chunkProvider.registerListener((StepListener) itemHandler); - chunkProcessor.registerListener((StepListener) itemHandler); - // already registered with both so avoid double-registering - continue; - } - if (itemHandler instanceof ItemReadListener) { - chunkProvider.registerListener((StepListener) itemHandler); - } - if (itemHandler instanceof ItemProcessListener || itemHandler instanceof ItemWriteListener) { - chunkProcessor.registerListener((StepListener) itemHandler); - } - } - } - @SuppressWarnings("unchecked") private void addFatalExceptionIfMissing(Class... cls) { List fatalExceptionList = new ArrayList>(); diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/SimpleStepFactoryBean.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/SimpleStepFactoryBean.java index 6c8e2aaba..b5775810d 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/SimpleStepFactoryBean.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/SimpleStepFactoryBean.java @@ -25,6 +25,7 @@ import org.springframework.batch.core.ChunkListener; import org.springframework.batch.core.ItemProcessListener; import org.springframework.batch.core.ItemReadListener; import org.springframework.batch.core.ItemWriteListener; +import org.springframework.batch.core.SkipListener; import org.springframework.batch.core.Step; import org.springframework.batch.core.StepExecutionListener; import org.springframework.batch.core.StepListener; @@ -419,10 +420,6 @@ public class SimpleStepFactoryBean implements FactoryBean, BeanNameAware { step.setStreams(streams); - ItemReader itemReader = getItemReader(); - ItemWriter itemWriter = getItemWriter(); - ItemProcessor itemProcessor = getItemProcessor(); - if (chunkOperations == null) { RepeatTemplate repeatTemplate = new RepeatTemplate(); repeatTemplate.setCompletionPolicy(getChunkCompletionPolicy()); @@ -447,15 +444,11 @@ public class SimpleStepFactoryBean implements FactoryBean, BeanNameAware { step.setStepOperations(stepOperations); SimpleChunkProvider chunkProvider = new SimpleChunkProvider(itemReader, chunkOperations); - List> readListeners = BatchListenerFactoryHelper.> getListeners( - getListeners(), ItemReadListener.class); - chunkProvider.setListeners(readListeners); SimpleChunkProcessor chunkProcessor = new SimpleChunkProcessor(itemProcessor, itemWriter); - chunkProcessor.setListeners(BatchListenerFactoryHelper.> getListeners(getListeners(), - ItemProcessListener.class)); - chunkProcessor.setListeners(BatchListenerFactoryHelper.> getListeners(getListeners(), - ItemWriteListener.class)); + + registerExplicitItemListeners(chunkProvider, chunkProcessor); + registerImplicitItemListeners(chunkProvider, chunkProcessor); ChunkOrientedTasklet tasklet = new ChunkOrientedTasklet(chunkProvider, chunkProcessor); @@ -473,12 +466,6 @@ public class SimpleStepFactoryBean implements FactoryBean, BeanNameAware { if (itemHandler instanceof ChunkListener) { chunkListeners.add((StepListener) itemHandler); } - if (itemHandler instanceof ItemReadListener) { - chunkProvider.registerListener((StepListener) itemHandler); - } - if (itemHandler instanceof ItemProcessListener || itemHandler instanceof ItemWriteListener) { - chunkProcessor.registerListener((StepListener) itemHandler); - } } BatchListenerFactoryHelper.addChunkListeners(chunkOperations, chunkListeners.toArray(new StepListener[] {})); @@ -508,4 +495,45 @@ public class SimpleStepFactoryBean implements FactoryBean, BeanNameAware { return new SimpleCompletionPolicy(commitInterval); } + /** + * Register explicitly set ({@link #setListeners(StepListener[])}) item + * listeners. + */ + protected void registerExplicitItemListeners(SimpleChunkProvider chunkProvider, SimpleChunkProcessor chunkProcessor) { + + chunkProvider.setListeners(BatchListenerFactoryHelper.> getListeners(getListeners(), + ItemReadListener.class)); + chunkProvider.setListeners(BatchListenerFactoryHelper.> getListeners(getListeners(), + SkipListener.class)); + + chunkProcessor.setListeners(BatchListenerFactoryHelper.> getListeners(getListeners(), + ItemProcessListener.class)); + chunkProcessor.setListeners(BatchListenerFactoryHelper.> getListeners(getListeners(), + ItemWriteListener.class)); + chunkProcessor.setListeners(BatchListenerFactoryHelper.> getListeners(getListeners(), + SkipListener.class)); + } + + /** + * Auto-register reader, processor and writer as item listeners if + * applicable. + */ + protected void registerImplicitItemListeners(SimpleChunkProvider chunkProvider, SimpleChunkProcessor chunkProcessor) { + for (Object itemHandler : new Object[] { getItemReader(), getItemWriter(), getItemProcessor() }) { + + if (itemHandler instanceof SkipListener) { + chunkProvider.registerListener((StepListener) itemHandler); + chunkProcessor.registerListener((StepListener) itemHandler); + // already registered with both so avoid double-registering + continue; + } + if (itemHandler instanceof ItemReadListener) { + chunkProvider.registerListener((StepListener) itemHandler); + } + if (itemHandler instanceof ItemProcessListener || itemHandler instanceof ItemWriteListener) { + chunkProcessor.registerListener((StepListener) itemHandler); + } + } + } + } \ No newline at end of file