From 5e7f79783a4e3e4bd19d998913a104c34fae7aea Mon Sep 17 00:00:00 2001 From: robokaso Date: Mon, 3 Nov 2008 18:52:58 +0000 Subject: [PATCH] RESOLVED - BATCH-896: "DRY" FaultTolerantTasklet implementations javadoc cleanup --- ...ractFaultTolerantChunkOrientedTasklet.java | 4 +++- .../FaultTolerantChunkOrientedTasklet.java | 22 ++++++++++--------- ...ringFaultTolerantChunkOrientedTasklet.java | 6 ++--- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/AbstractFaultTolerantChunkOrientedTasklet.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/AbstractFaultTolerantChunkOrientedTasklet.java index 662f6e75d..5855d18f8 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/AbstractFaultTolerantChunkOrientedTasklet.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/AbstractFaultTolerantChunkOrientedTasklet.java @@ -154,7 +154,9 @@ public abstract class AbstractFaultTolerantChunkOrientedTasklet extends Ab } /** - * Incorporate retry into the item processor stage. + * Incorporate retry into the item processor stage. If item processor + * returns null for an input item, it is considered filtered and is not + * added to outputs. * * @param inputs the items to process * @param outputs the items to write diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/FaultTolerantChunkOrientedTasklet.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/FaultTolerantChunkOrientedTasklet.java index 2d34443fd..82c518cb7 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/FaultTolerantChunkOrientedTasklet.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/FaultTolerantChunkOrientedTasklet.java @@ -42,18 +42,21 @@ import org.springframework.core.AttributeAccessor; * listener is invoked and the skip count incremented. A retryable exception is * thus also effectively also implicitly skippable. * - * ItemProcessor is assumed to be transactional. In case of rollback caused by - * error on write the processing phase will be repeated. + * ItemProcessor is assumed to be transactional. In case of + * rollback caused by error on write the processing phase will be repeated. + * + * @param input item type + * @param output item type * * @author Dave Syer * @author Robert Kasanicky */ -public class FaultTolerantChunkOrientedTasklet extends AbstractFaultTolerantChunkOrientedTasklet { +public class FaultTolerantChunkOrientedTasklet extends AbstractFaultTolerantChunkOrientedTasklet { final static private String INPUT_BUFFER_KEY = "INPUT_BUFFER_KEY"; public FaultTolerantChunkOrientedTasklet(ItemReader itemReader, - ItemProcessor itemProcessor, ItemWriter itemWriter, + ItemProcessor itemProcessor, ItemWriter itemWriter, RepeatOperations chunkOperations, RetryOperations retryTemplate, Classifier rollbackClassifier, ItemSkipPolicy readSkipPolicy, ItemSkipPolicy writeSkipPolicy, ItemSkipPolicy processSkipPolicy) { @@ -63,10 +66,9 @@ public class FaultTolerantChunkOrientedTasklet extends AbstractFaultTolera } /** - * Get the next item from {@link #read(StepContribution, List)} and if not - * null pass the item to {@link #write(List, StepContribution, Map)}. If the - * {@link ItemProcessor} returns null, the write is omitted and another item - * taken from the reader. + * Read the next chunk of items and if not empty pass the items one-by-one + * to {@link #process(StepContribution, List, List, Map)} and finally write + * all items by {@link #write(List, StepContribution, Map)}. * * @see org.springframework.batch.core.step.tasklet.Tasklet#execute(org.springframework.batch.core.StepContribution, * AttributeAccessor) @@ -74,7 +76,7 @@ public class FaultTolerantChunkOrientedTasklet extends AbstractFaultTolera public ExitStatus execute(final StepContribution contribution, AttributeAccessor attributes) throws Exception { final List inputs = getBufferedList(attributes, INPUT_BUFFER_KEY); - final List outputs = new ArrayList(); + final List outputs = new ArrayList(); ExitStatus result = ExitStatus.CONTINUABLE; @@ -108,7 +110,7 @@ public class FaultTolerantChunkOrientedTasklet extends AbstractFaultTolera process(contribution, inputs, outputs, skippedInputs); } - Map skippedOutputs = getBufferedSkips(attributes, SKIPPED_OUTPUTS_KEY); + Map skippedOutputs = getBufferedSkips(attributes, SKIPPED_OUTPUTS_KEY); outputs.removeAll(skippedOutputs.keySet()); write(outputs, contribution, skippedOutputs); diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/NonbufferingFaultTolerantChunkOrientedTasklet.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/NonbufferingFaultTolerantChunkOrientedTasklet.java index 9e41f1df8..1893e8c08 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/NonbufferingFaultTolerantChunkOrientedTasklet.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/NonbufferingFaultTolerantChunkOrientedTasklet.java @@ -26,10 +26,10 @@ import org.springframework.core.AttributeAccessor; * Note that the implementation relies on {@link Object#equals(Object)} * comparisons for recognizing items on retry/skip. * - * @author Robert Kasanicky - * * @param input item type * @param output item type + * + * @author Robert Kasanicky */ public class NonbufferingFaultTolerantChunkOrientedTasklet extends AbstractFaultTolerantChunkOrientedTasklet { @@ -99,7 +99,7 @@ public class NonbufferingFaultTolerantChunkOrientedTasklet extends * @param contribution current StepContribution holding skipped items count * @return next item for processing */ - private I read(StepContribution contribution, final List skipped) throws Exception { + protected I read(StepContribution contribution, final List skipped) throws Exception { try { return doRead();