From 16606e3abdd604ca1d0e1052e69327af51169fca Mon Sep 17 00:00:00 2001 From: dsyer Date: Sat, 8 Nov 2008 11:33:25 +0000 Subject: [PATCH] IN PROGRESS - issue BATCH-894: RFC: move ExitStatus up into Core? Change Tasklet to use RepeatStatus instead of ExitStatus to signal continuable status --- .../batch/core/ExitStatus.java | 5 -- .../batch/core/StepContribution.java | 22 +++++++- .../batch/core/StepExecution.java | 3 +- .../core/scope/StepContextRepeatCallback.java | 9 +-- .../FaultTolerantChunkOrientedTasklet.java | 14 +++-- ...ringFaultTolerantChunkOrientedTasklet.java | 8 +-- .../step/item/SimpleChunkOrientedTasklet.java | 13 +++-- .../step/tasklet/CallableTaskletAdapter.java | 7 ++- .../tasklet/MethodInvokingTaskletAdapter.java | 6 +- .../step/tasklet/SystemCommandTasklet.java | 6 +- .../batch/core/step/tasklet/Tasklet.java | 10 ++-- .../batch/core/step/tasklet/TaskletStep.java | 10 ++-- .../batch/core/ExitStatusTests.java | 56 +++++++++---------- .../batch/core/StepExecutionTests.java | 2 +- .../core/configuration/xml/TestTasklet.java | 6 +- .../CompositeStepExecutionListenerTests.java | 2 +- .../support/StepExecutionAggregatorTests.java | 4 +- .../scope/StepContextRepeatCallbackTests.java | 10 ++-- .../step/item/TaskletStepExceptionTests.java | 12 ++-- .../tasklet/CallableTaskletAdapterTests.java | 11 ++-- ...rableSystemProcessExitCodeMapperTests.java | 2 +- .../step/tasklet/StepHandlerAdapterTests.java | 20 ++++++- .../SystemCommandTaskletIntegrationTests.java | 15 ++--- .../core/step/tasklet/TaskletStepTests.java | 7 +-- .../batch/repeat/RepeatStatus.java | 2 +- .../chunk/ChunkMessageChannelItemWriter.java | 2 +- .../chunk/ChunkProcessorChunkHandler.java | 2 +- .../ChunkProcessorChunkHandlerTests.java | 2 +- .../batch/integration/job/TestTasklet.java | 6 +- .../football/internal/ErrorLogWriter.java | 6 +- .../tasklet/DummyMessageReceivingTasklet.java | 6 +- .../tasklet/DummyMessageSendingTasklet.java | 5 +- .../sample/tasklet/FileDeletingTasklet.java | 6 +- .../batch/test/sample/SampleTasklet.java | 10 ++-- 34 files changed, 173 insertions(+), 134 deletions(-) diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/ExitStatus.java b/spring-batch-core/src/main/java/org/springframework/batch/core/ExitStatus.java index f8099b95a..2f41933c2 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/ExitStatus.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/ExitStatus.java @@ -37,11 +37,6 @@ public class ExitStatus implements Serializable { */ public static final ExitStatus UNKNOWN = new ExitStatus(false, "UNKNOWN"); - /** - * Convenient constant value representing unfinished processing. - */ - public static final ExitStatus CONTINUABLE = new ExitStatus(true, "CONTINUABLE"); - /** * Convenient constant value representing continuable state where processing * is still taking place, so no further action is required. Used for diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/StepContribution.java b/spring-batch-core/src/main/java/org/springframework/batch/core/StepContribution.java index 483e51e3b..4318d9d49 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/StepContribution.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/StepContribution.java @@ -38,6 +38,8 @@ public class StepContribution { private volatile int processSkipCount; + private ExitStatus exitStatus = ExitStatus.EXECUTING; + /** * @param execution */ @@ -45,6 +47,24 @@ public class StepContribution { this.parentSkipCount = execution.getSkipCount(); } + /** + * Set the {@link ExitStatus} for this contribution. + * + * @param status + */ + public void setExitStatus(ExitStatus status) { + this.exitStatus = status; + } + + /** + * Public getter for the status. + * + * @return the {@link ExitStatus} for this contribution + */ + public ExitStatus getExitStatus() { + return exitStatus; + } + /** * Increment the counter for the number of items processed. */ @@ -167,7 +187,7 @@ public class StepContribution { public String toString() { return "[StepContribution: read=" + readCount + ", written=" + writeCount + ", filtered=" + filterCount + ", readSkips=" + readSkipCount + ", writeSkips=" + writeSkipCount + ", processSkips=" - + processSkipCount + "]"; + + processSkipCount + ", exitStatus=" + exitStatus.getExitCode() + "]"; } } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/StepExecution.java b/spring-batch-core/src/main/java/org/springframework/batch/core/StepExecution.java index 5e7246b63..a075a0590 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/StepExecution.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/StepExecution.java @@ -66,7 +66,7 @@ public class StepExecution extends Entity { private volatile ExecutionContext executionContext = new ExecutionContext(); - private volatile ExitStatus exitStatus = ExitStatus.CONTINUABLE; + private volatile ExitStatus exitStatus = ExitStatus.EXECUTING; private volatile boolean terminateOnly; @@ -327,6 +327,7 @@ public class StepExecution extends Entity { filterCount += contribution.getFilterCount(); readCount += contribution.getReadCount(); writeCount += contribution.getWriteCount(); + exitStatus = exitStatus.and(contribution.getExitStatus()); } /** diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/scope/StepContextRepeatCallback.java b/spring-batch-core/src/main/java/org/springframework/batch/core/scope/StepContextRepeatCallback.java index a99af58cd..c7e591d88 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/scope/StepContextRepeatCallback.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/scope/StepContextRepeatCallback.java @@ -18,7 +18,6 @@ package org.springframework.batch.core.scope; import java.util.Queue; import java.util.concurrent.LinkedBlockingQueue; -import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.Step; import org.springframework.batch.core.StepExecution; import org.springframework.batch.repeat.RepeatCallback; @@ -65,9 +64,7 @@ public abstract class StepContextRepeatCallback implements RepeatCallback { // otherwise step-scoped beans will be re-initialised for each chunk. StepSynchronizationManager.register(stepContext); try { - ExitStatus exitStatus = doInStepContext(context, stepContext); - stepContext.getStepExecution().setExitStatus(exitStatus); - return RepeatStatus.continueIf(exitStatus.isContinuable()); + return doInStepContext(context, stepContext); } finally { // Still some stuff to do with the data in this chunk, @@ -91,10 +88,10 @@ public abstract class StepContextRepeatCallback implements RepeatCallback { * * @param context the current {@link RepeatContext} * @param stepContext the step context in which to carry out the work - * @return the exit status from the execution + * @return the repeat status from the execution * @throws Exception implementations can throw an exception if anything goes * wrong */ - public abstract ExitStatus doInStepContext(RepeatContext context, StepContext stepContext) throws Exception; + public abstract RepeatStatus doInStepContext(RepeatContext context, StepContext stepContext) throws Exception; } 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 7da3a16d5..de670a6b4 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 @@ -74,18 +74,19 @@ public class FaultTolerantChunkOrientedTasklet extends AbstractFaultTolera * @see org.springframework.batch.core.step.tasklet.Tasklet#execute(org.springframework.batch.core.StepContribution, * AttributeAccessor) */ - public ExitStatus execute(final StepContribution contribution, AttributeAccessor attributes) throws Exception { + public RepeatStatus execute(final StepContribution contribution, AttributeAccessor attributes) throws Exception { final List inputs = getBufferedList(attributes, INPUT_BUFFER_KEY); final List outputs = new ArrayList(); - ExitStatus result = ExitStatus.CONTINUABLE; - final List skippedReads = getBufferedList(attributes, SKIPPED_READS_KEY); + // TODO: invert logic below so that default can be FINISHED? + RepeatStatus continuable = RepeatStatus.CONTINUABLE; + if (inputs.isEmpty() && outputs.isEmpty()) { - RepeatStatus continuable = getRepeatOperations().iterate(new RepeatCallback() { + continuable = getRepeatOperations().iterate(new RepeatCallback() { public RepeatStatus doInIteration(final RepeatContext context) throws Exception { I item = read(contribution, skippedReads); @@ -98,7 +99,8 @@ public class FaultTolerantChunkOrientedTasklet extends AbstractFaultTolera } }); - result = continuable.isContinuable() ? ExitStatus.CONTINUABLE : ExitStatus.FINISHED; + ExitStatus status = continuable.isContinuable() ? ExitStatus.EXECUTING : ExitStatus.FINISHED; + contribution.setExitStatus(status); } @@ -121,7 +123,7 @@ public class FaultTolerantChunkOrientedTasklet extends AbstractFaultTolera attributes.removeAttribute(key); } - return result; + return continuable; } 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 0c0c5ed1f..b61143cbb 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 @@ -52,8 +52,7 @@ public class NonbufferingFaultTolerantChunkOrientedTasklet extends * Read-process-write a list of items. Uses fault-tolerant read, process and * write implementations. */ - public ExitStatus execute(final StepContribution contribution, AttributeAccessor attributes) throws Exception { - ExitStatus result = ExitStatus.CONTINUABLE; + public RepeatStatus execute(final StepContribution contribution, AttributeAccessor attributes) throws Exception { final List inputs = new ArrayList(); final List skippedReads = getBufferedList(attributes, SKIPPED_READS_KEY); @@ -70,7 +69,8 @@ public class NonbufferingFaultTolerantChunkOrientedTasklet extends } }); - result = continuable.isContinuable() ? ExitStatus.CONTINUABLE : ExitStatus.FINISHED; + ExitStatus result = continuable.isContinuable() ? ExitStatus.EXECUTING : ExitStatus.FINISHED; + contribution.setExitStatus(result); // filter inputs marked for skipping final Map skippedInputs = getBufferedSkips(attributes, SKIPPED_INPUTS_KEY); @@ -95,7 +95,7 @@ public class NonbufferingFaultTolerantChunkOrientedTasklet extends callSkipListenersAndCleanSkipsFromBuffer(skippedReads, skippedInputs, skippedOutputs, inputsIncludingSkips, outputsIncludingSkips); - return result; + return continuable; } /** diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/SimpleChunkOrientedTasklet.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/SimpleChunkOrientedTasklet.java index 13c408a27..6b98b4ca9 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/SimpleChunkOrientedTasklet.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/SimpleChunkOrientedTasklet.java @@ -37,8 +37,8 @@ public class SimpleChunkOrientedTasklet extends AbstractItemOrientedTaskle /** * Read-process-write a list of items. */ - public ExitStatus execute(final StepContribution contribution, AttributeAccessor attributes) throws Exception { - ExitStatus result = ExitStatus.CONTINUABLE; + public RepeatStatus execute(final StepContribution contribution, AttributeAccessor attributes) throws Exception { + ExitStatus result = ExitStatus.EXECUTING; final List inputs = new ArrayList(); RepeatStatus continuable = repeatOperations.iterate(new RepeatCallback() { @@ -55,11 +55,12 @@ public class SimpleChunkOrientedTasklet extends AbstractItemOrientedTaskle } }); - result = continuable.isContinuable() ? ExitStatus.CONTINUABLE : ExitStatus.FINISHED; - + result = continuable.isContinuable() ? ExitStatus.EXECUTING : ExitStatus.FINISHED; + contribution.setExitStatus(result); + // If there is no input we don't have to do anything more if (inputs.isEmpty()) { - return result; + return continuable; } List outputs = new ArrayList(); @@ -74,7 +75,7 @@ public class SimpleChunkOrientedTasklet extends AbstractItemOrientedTaskle doWrite(outputs); contribution.incrementWriteCount(outputs.size()); - return result; + return continuable; } } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/CallableTaskletAdapter.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/CallableTaskletAdapter.java index 047ddeb15..a1a0b188b 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/CallableTaskletAdapter.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/CallableTaskletAdapter.java @@ -19,6 +19,7 @@ import java.util.concurrent.Callable; import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.StepContribution; +import org.springframework.batch.repeat.RepeatStatus; import org.springframework.beans.factory.InitializingBean; import org.springframework.core.AttributeAccessor; import org.springframework.util.Assert; @@ -32,13 +33,13 @@ import org.springframework.util.Assert; */ public class CallableTaskletAdapter implements Tasklet, InitializingBean { - private Callable callable; + private Callable callable; /** * Public setter for the {@link Callable}. * @param callable the {@link Callable} to set */ - public void setCallable(Callable callable) { + public void setCallable(Callable callable) { this.callable = callable; } @@ -56,7 +57,7 @@ public class CallableTaskletAdapter implements Tasklet, InitializingBean { * the {@link StepContribution} and the attributes. * @see Tasklet#execute(StepContribution, AttributeAccessor) */ - public ExitStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { + public RepeatStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { return callable.call(); } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/MethodInvokingTaskletAdapter.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/MethodInvokingTaskletAdapter.java index 552201885..fb2ba7dbb 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/MethodInvokingTaskletAdapter.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/MethodInvokingTaskletAdapter.java @@ -18,6 +18,7 @@ package org.springframework.batch.core.step.tasklet; import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.StepContribution; import org.springframework.batch.item.adapter.AbstractMethodInvokingDelegator; +import org.springframework.batch.repeat.RepeatStatus; import org.springframework.core.AttributeAccessor; /** @@ -41,8 +42,9 @@ public class MethodInvokingTaskletAdapter extends AbstractMethodInvokingDelegato * * @see Tasklet#execute(StepContribution, AttributeAccessor) */ - public ExitStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { - return mapResult(invokeDelegateMethod()); + public RepeatStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { + contribution.setExitStatus(mapResult(invokeDelegateMethod())); + return RepeatStatus.FINISHED; } /** diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/SystemCommandTasklet.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/SystemCommandTasklet.java index 491b6e934..e6e5f7105 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/SystemCommandTasklet.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/SystemCommandTasklet.java @@ -12,6 +12,7 @@ import org.springframework.batch.core.JobInterruptedException; import org.springframework.batch.core.StepContribution; import org.springframework.batch.core.StepExecution; import org.springframework.batch.core.listener.StepExecutionListenerSupport; +import org.springframework.batch.repeat.RepeatStatus; import org.springframework.beans.factory.InitializingBean; import org.springframework.core.AttributeAccessor; import org.springframework.core.task.SimpleAsyncTaskExecutor; @@ -65,7 +66,7 @@ public class SystemCommandTasklet extends StepExecutionListenerSupport implement * Execute system command and map its exit code to {@link ExitStatus} using * {@link SystemProcessExitCodeMapper}. */ - public ExitStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { + public RepeatStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { FutureTask systemCommandTask = new FutureTask(new Callable() { @@ -85,7 +86,8 @@ public class SystemCommandTasklet extends StepExecutionListenerSupport implement while (true) { Thread.sleep(checkInterval); if (systemCommandTask.isDone()) { - return systemProcessExitCodeMapper.getExitStatus(systemCommandTask.get()); + contribution.setExitStatus(systemProcessExitCodeMapper.getExitStatus(systemCommandTask.get())); + return RepeatStatus.FINISHED; } else if (stopWatch.getTime() > timeout) { systemCommandTask.cancel(interruptOnCancel); diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/Tasklet.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/Tasklet.java index 44862a71b..8601d7994 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/Tasklet.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/Tasklet.java @@ -15,8 +15,8 @@ */ package org.springframework.batch.core.step.tasklet; -import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.StepContribution; +import org.springframework.batch.repeat.RepeatStatus; import org.springframework.core.AttributeAccessor; /** @@ -30,16 +30,16 @@ public interface Tasklet { /** * Given the current context in the form of a step contribution, do whatever * is necessary to process this unit inside a transaction. Implementations - * return {@link ExitStatus#FINISHED} if finished. If not they return - * {@link ExitStatus#CONTINUABLE}. On failure throws an exception. + * return {@link RepeatStatus#FINISHED} if finished. If not they return + * {@link RepeatStatus#CONTINUABLE}. On failure throws an exception. * * @param contribution mutable state to be passed back to update the current * step execution * @param attributes attributes shared between invocations but not between * restarts - * @return an {@link ExitStatus} indicating whether processing is + * @return an {@link RepeatStatus} indicating whether processing is * continuable. */ - ExitStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception; + RepeatStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception; } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/TaskletStep.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/TaskletStep.java index 4c346ca6d..0f1c5ecd2 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/TaskletStep.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/tasklet/TaskletStep.java @@ -18,7 +18,6 @@ package org.springframework.batch.core.step.tasklet; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.batch.core.BatchStatus; -import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.JobInterruptedException; import org.springframework.batch.core.StepContribution; import org.springframework.batch.core.StepExecution; @@ -38,6 +37,7 @@ import org.springframework.batch.item.ItemWriter; import org.springframework.batch.item.support.CompositeItemStream; import org.springframework.batch.repeat.RepeatContext; import org.springframework.batch.repeat.RepeatOperations; +import org.springframework.batch.repeat.RepeatStatus; import org.springframework.batch.repeat.support.RepeatTemplate; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionStatus; @@ -243,7 +243,7 @@ public class TaskletStep extends AbstractStep { stepOperations.iterate(new StepContextRepeatCallback(stepExecution) { @Override - public ExitStatus doInStepContext(RepeatContext repeatContext, + public RepeatStatus doInStepContext(RepeatContext repeatContext, StepContext stepContext) throws Exception { StepExecution stepExecution = stepContext.getStepExecution(); @@ -257,7 +257,7 @@ public class TaskletStep extends AbstractStep { // interruption. interruptionPolicy.checkInterrupted(stepExecution); - ExitStatus exitStatus = ExitStatus.CONTINUABLE; + RepeatStatus result = RepeatStatus.CONTINUABLE; TransactionStatus transaction = transactionManager .getTransaction(transactionAttribute); @@ -267,7 +267,7 @@ public class TaskletStep extends AbstractStep { try { try { - exitStatus = tasklet.execute(contribution, stepContext); + result = tasklet.execute(contribution, stepContext); } finally { // Apply the contribution to the step // even if unsuccessful @@ -351,7 +351,7 @@ public class TaskletStep extends AbstractStep { // caller interruptionPolicy.checkInterrupted(stepExecution); - return exitStatus; + return result; } }); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/ExitStatusTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/ExitStatusTests.java index fdb965094..26594b950 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/ExitStatusTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/ExitStatusTests.java @@ -48,9 +48,9 @@ public class ExitStatusTests { */ @Test public void testExitStatusConstantsContinuable() { - ExitStatus status = ExitStatus.CONTINUABLE; + ExitStatus status = ExitStatus.EXECUTING; assertTrue(status.isContinuable()); - assertEquals("CONTINUABLE", status.getExitCode()); + assertEquals("EXECUTING", status.getExitCode()); } /** @@ -72,7 +72,7 @@ public class ExitStatusTests { */ @Test public void testEqualsWithSameProperties() throws Exception { - assertEquals(ExitStatus.CONTINUABLE, new ExitStatus(true, "CONTINUABLE")); + assertEquals(ExitStatus.EXECUTING, new ExitStatus(true, "EXECUTING")); } @Test @@ -93,7 +93,7 @@ public class ExitStatusTests { */ @Test public void testEqualsWithNull() throws Exception { - assertFalse(ExitStatus.CONTINUABLE.equals(null)); + assertFalse(ExitStatus.EXECUTING.equals(null)); } /** @@ -103,7 +103,7 @@ public class ExitStatusTests { */ @Test public void testHashcode() throws Exception { - assertEquals(ExitStatus.CONTINUABLE.toString().hashCode(), ExitStatus.CONTINUABLE.hashCode()); + assertEquals(ExitStatus.EXECUTING.toString().hashCode(), ExitStatus.EXECUTING.hashCode()); } /** @@ -112,8 +112,8 @@ public class ExitStatusTests { */ @Test public void testAndBoolean() { - assertTrue(ExitStatus.CONTINUABLE.and(true).isContinuable()); - assertFalse(ExitStatus.CONTINUABLE.and(false).isContinuable()); + assertTrue(ExitStatus.EXECUTING.and(true).isContinuable()); + assertFalse(ExitStatus.EXECUTING.and(false).isContinuable()); ExitStatus status = new ExitStatus(false, "CUSTOM_CODE", "CUSTOM_DESCRIPTION"); assertTrue(status.and(true).getExitCode() == "CUSTOM_CODE"); assertTrue(status.and(true).getExitDescription() == "CUSTOM_DESCRIPTION"); @@ -126,10 +126,10 @@ public class ExitStatusTests { */ @Test public void testAndExitStatusStillContinuable() { - assertTrue(ExitStatus.CONTINUABLE.and(ExitStatus.CONTINUABLE).isContinuable()); - assertFalse(ExitStatus.CONTINUABLE.and(ExitStatus.FINISHED).isContinuable()); - assertTrue(ExitStatus.CONTINUABLE.and(ExitStatus.CONTINUABLE).getExitCode().equals( - ExitStatus.CONTINUABLE.getExitCode())); + assertTrue(ExitStatus.EXECUTING.and(ExitStatus.EXECUTING).isContinuable()); + assertFalse(ExitStatus.EXECUTING.and(ExitStatus.FINISHED).isContinuable()); + assertTrue(ExitStatus.EXECUTING.and(ExitStatus.EXECUTING).getExitCode().equals( + ExitStatus.EXECUTING.getExitCode())); } /** @@ -139,7 +139,7 @@ public class ExitStatusTests { */ @Test public void testAndExitStatusWhenFinishedAddedToContinuable() { - assertEquals(ExitStatus.FINISHED.getExitCode(), ExitStatus.CONTINUABLE.and(ExitStatus.FINISHED).getExitCode()); + assertEquals(ExitStatus.FINISHED.getExitCode(), ExitStatus.EXECUTING.and(ExitStatus.FINISHED).getExitCode()); } /** @@ -149,7 +149,7 @@ public class ExitStatusTests { */ @Test public void testAndExitStatusWhenContinuableAddedToFinished() { - assertEquals(ExitStatus.FINISHED.getExitCode(), ExitStatus.FINISHED.and(ExitStatus.CONTINUABLE).getExitCode()); + assertEquals(ExitStatus.FINISHED.getExitCode(), ExitStatus.FINISHED.and(ExitStatus.EXECUTING).getExitCode()); } /** @@ -159,7 +159,7 @@ public class ExitStatusTests { */ @Test public void testAndExitStatusWhenCustomContinuableAddedToContinuable() { - assertEquals("CUSTOM", ExitStatus.CONTINUABLE.and(ExitStatus.CONTINUABLE.replaceExitCode("CUSTOM")) + assertEquals("CUSTOM", ExitStatus.EXECUTING.and(ExitStatus.EXECUTING.replaceExitCode("CUSTOM")) .getExitCode()); } @@ -182,52 +182,52 @@ public class ExitStatusTests { @Test public void testAndExitStatusWhenCustomContinuableAddedToFinished() { assertEquals(ExitStatus.FINISHED.getExitCode(), ExitStatus.FINISHED.and( - ExitStatus.CONTINUABLE.replaceExitCode("CUSTOM")).getExitCode()); + ExitStatus.EXECUTING.replaceExitCode("CUSTOM")).getExitCode()); } @Test public void testAddExitCode() throws Exception { - ExitStatus status = ExitStatus.CONTINUABLE.replaceExitCode("FOO"); - assertTrue(ExitStatus.CONTINUABLE != status); + ExitStatus status = ExitStatus.EXECUTING.replaceExitCode("FOO"); + assertTrue(ExitStatus.EXECUTING != status); assertTrue(status.isContinuable()); assertEquals("FOO", status.getExitCode()); } @Test public void testAddExitCodeToExistingStatus() throws Exception { - ExitStatus status = ExitStatus.CONTINUABLE.replaceExitCode("FOO").replaceExitCode("BAR"); - assertTrue(ExitStatus.CONTINUABLE != status); + ExitStatus status = ExitStatus.EXECUTING.replaceExitCode("FOO").replaceExitCode("BAR"); + assertTrue(ExitStatus.EXECUTING != status); assertTrue(status.isContinuable()); assertEquals("BAR", status.getExitCode()); } @Test public void testAddExitCodeToSameStatus() throws Exception { - ExitStatus status = ExitStatus.CONTINUABLE.replaceExitCode(ExitStatus.CONTINUABLE.getExitCode()); - assertTrue(ExitStatus.CONTINUABLE != status); + ExitStatus status = ExitStatus.EXECUTING.replaceExitCode(ExitStatus.EXECUTING.getExitCode()); + assertTrue(ExitStatus.EXECUTING != status); assertTrue(status.isContinuable()); - assertEquals(ExitStatus.CONTINUABLE.getExitCode(), status.getExitCode()); + assertEquals(ExitStatus.EXECUTING.getExitCode(), status.getExitCode()); } @Test public void testAddExitDescription() throws Exception { - ExitStatus status = ExitStatus.CONTINUABLE.addExitDescription("Foo"); - assertTrue(ExitStatus.CONTINUABLE != status); + ExitStatus status = ExitStatus.EXECUTING.addExitDescription("Foo"); + assertTrue(ExitStatus.EXECUTING != status); assertTrue(status.isContinuable()); assertEquals("Foo", status.getExitDescription()); } @Test public void testAddExitDescriptionToSameStatus() throws Exception { - ExitStatus status = ExitStatus.CONTINUABLE.addExitDescription("Foo").addExitDescription("Foo"); - assertTrue(ExitStatus.CONTINUABLE != status); + ExitStatus status = ExitStatus.EXECUTING.addExitDescription("Foo").addExitDescription("Foo"); + assertTrue(ExitStatus.EXECUTING != status); assertTrue(status.isContinuable()); assertEquals("Foo", status.getExitDescription()); } @Test public void testAddEmptyExitDescription() throws Exception { - ExitStatus status = ExitStatus.CONTINUABLE.addExitDescription("Foo").addExitDescription(null); + ExitStatus status = ExitStatus.EXECUTING.addExitDescription("Foo").addExitDescription(null); assertEquals("Foo", status.getExitDescription()); } @@ -245,7 +245,7 @@ public class ExitStatusTests { @Test public void testSerializable() throws Exception { - ExitStatus status = ExitStatus.CONTINUABLE.replaceExitCode("FOO"); + ExitStatus status = ExitStatus.EXECUTING.replaceExitCode("FOO"); byte[] bytes = SerializationUtils.serialize(status); Object object = SerializationUtils.deserialize(bytes); assertTrue(object instanceof ExitStatus); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/StepExecutionTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/StepExecutionTests.java index d169e666b..084a0b767 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/StepExecutionTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/StepExecutionTests.java @@ -104,7 +104,7 @@ public class StepExecutionTests { */ @Test public void testGetExitCode() { - assertEquals(ExitStatus.CONTINUABLE, execution.getExitStatus()); + assertEquals(ExitStatus.EXECUTING, execution.getExitStatus()); execution.setExitStatus(ExitStatus.FINISHED); assertEquals(ExitStatus.FINISHED, execution.getExitStatus()); } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/TestTasklet.java b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/TestTasklet.java index d7463db3a..88b766f31 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/TestTasklet.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/configuration/xml/TestTasklet.java @@ -3,14 +3,16 @@ package org.springframework.batch.core.configuration.xml; import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.StepContribution; import org.springframework.batch.core.step.tasklet.Tasklet; +import org.springframework.batch.repeat.RepeatStatus; import org.springframework.core.AttributeAccessor; public class TestTasklet extends AbstractTestComponent implements Tasklet { - public ExitStatus execute(StepContribution contribution, + public RepeatStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { executed = true; - return ExitStatus.FINISHED; + contribution.setExitStatus(ExitStatus.FINISHED); + return RepeatStatus.FINISHED; } } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/listener/CompositeStepExecutionListenerTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/listener/CompositeStepExecutionListenerTests.java index 51af5d5b4..0bd7c9f65 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/listener/CompositeStepExecutionListenerTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/listener/CompositeStepExecutionListenerTests.java @@ -47,7 +47,7 @@ public class CompositeStepExecutionListenerTests extends TestCase { }, new StepExecutionListenerSupport() { public ExitStatus afterStep(StepExecution stepExecution) { list.add("continue"); - return ExitStatus.CONTINUABLE; + return ExitStatus.EXECUTING; } } }); assertFalse(listener.afterStep(null).isContinuable()); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/partition/support/StepExecutionAggregatorTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/partition/support/StepExecutionAggregatorTests.java index 2d799bb8a..d306f1320 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/partition/support/StepExecutionAggregatorTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/partition/support/StepExecutionAggregatorTests.java @@ -54,11 +54,11 @@ public class StepExecutionAggregatorTests { @Test public void testAggregateExitStatusSunnyDay() { - stepExecution1.setExitStatus(ExitStatus.CONTINUABLE); + stepExecution1.setExitStatus(ExitStatus.EXECUTING); stepExecution2.setExitStatus(ExitStatus.FAILED); aggregator.aggregate(result, Arrays. asList(stepExecution1, stepExecution2)); assertNotNull(result); - assertEquals(ExitStatus.FAILED.and(ExitStatus.CONTINUABLE), result.getExitStatus()); + assertEquals(ExitStatus.FAILED.and(ExitStatus.EXECUTING), result.getExitStatus()); } @Test diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/scope/StepContextRepeatCallbackTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/scope/StepContextRepeatCallbackTests.java index 00c4cf8c5..fc54e59ec 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/scope/StepContextRepeatCallbackTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/scope/StepContextRepeatCallbackTests.java @@ -40,20 +40,20 @@ public class StepContextRepeatCallbackTests { public void testDoInIteration() throws Exception { StepContextRepeatCallback callback = new StepContextRepeatCallback(stepExecution) { @Override - public ExitStatus doInStepContext(RepeatContext context, StepContext stepContext) throws Exception { + public RepeatStatus doInStepContext(RepeatContext context, StepContext stepContext) throws Exception { assertEquals(Long.valueOf(123), stepContext.getStepExecution().getId()); - return ExitStatus.NOOP; + return RepeatStatus.FINISHED; } }; assertEquals(RepeatStatus.FINISHED, callback.doInIteration(null)); - assertEquals(ExitStatus.NOOP, stepExecution.getExitStatus()); + assertEquals(ExitStatus.EXECUTING, stepExecution.getExitStatus()); } @Test public void testUnfinishedWork() throws Exception { StepContextRepeatCallback callback = new StepContextRepeatCallback(stepExecution) { @Override - public ExitStatus doInStepContext(RepeatContext context, StepContext stepContext) throws Exception { + public RepeatStatus doInStepContext(RepeatContext context, StepContext stepContext) throws Exception { if (addedAttribute) { removedAttribute = stepContext.hasAttribute("foo"); stepContext.removeAttribute("foo"); @@ -61,7 +61,7 @@ public class StepContextRepeatCallbackTests { addedAttribute = true; stepContext.setAttribute("foo", "bar"); } - return ExitStatus.NOOP; + return RepeatStatus.FINISHED; } }; callback.doInIteration(null); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/TaskletStepExceptionTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/TaskletStepExceptionTests.java index f589b5a9b..d8fbc830c 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/TaskletStepExceptionTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/item/TaskletStepExceptionTests.java @@ -27,6 +27,7 @@ import org.springframework.batch.item.ExecutionContext; import org.springframework.batch.item.ItemStream; import org.springframework.batch.item.ItemStreamException; import org.springframework.batch.item.ItemStreamSupport; +import org.springframework.batch.repeat.RepeatStatus; import org.springframework.batch.support.transaction.ResourcelessTransactionManager; import org.springframework.core.AttributeAccessor; import org.springframework.transaction.TransactionException; @@ -121,8 +122,8 @@ public class TaskletStepExceptionTests { } }); taskletStep.setTasklet(new Tasklet() { - public ExitStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { - return ExitStatus.FINISHED; + public RepeatStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { + return RepeatStatus.FINISHED; } }); @@ -183,8 +184,8 @@ public class TaskletStepExceptionTests { taskletStep.setTasklet(new Tasklet() { - public ExitStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { - return ExitStatus.FINISHED; + public RepeatStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { + return RepeatStatus.FINISHED; } }); @@ -219,8 +220,7 @@ public class TaskletStepExceptionTests { private static class ExceptionTasklet implements Tasklet { - public ExitStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { - + public RepeatStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { throw taskletException; } } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/CallableTaskletAdapterTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/CallableTaskletAdapterTests.java index 3272b1f93..070be37e1 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/CallableTaskletAdapterTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/CallableTaskletAdapterTests.java @@ -21,8 +21,7 @@ import static org.junit.Assert.fail; import java.util.concurrent.Callable; import org.junit.Test; -import org.springframework.batch.core.ExitStatus; -import org.springframework.batch.core.step.tasklet.CallableTaskletAdapter; +import org.springframework.batch.repeat.RepeatStatus; public class CallableTaskletAdapterTests { @@ -30,12 +29,12 @@ public class CallableTaskletAdapterTests { @Test public void testHandle() throws Exception { - adapter.setCallable(new Callable() { - public ExitStatus call() throws Exception { - return ExitStatus.FINISHED; + adapter.setCallable(new Callable() { + public RepeatStatus call() throws Exception { + return RepeatStatus.FINISHED; } }); - assertEquals(ExitStatus.FINISHED, adapter.execute(null,null)); + assertEquals(RepeatStatus.FINISHED, adapter.execute(null,null)); } @Test diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/ConfigurableSystemProcessExitCodeMapperTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/ConfigurableSystemProcessExitCodeMapperTests.java index 138add1e3..0cc069da2 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/ConfigurableSystemProcessExitCodeMapperTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/ConfigurableSystemProcessExitCodeMapperTests.java @@ -27,7 +27,7 @@ public class ConfigurableSystemProcessExitCodeMapperTests { { put(0, ExitStatus.FINISHED); put(1, ExitStatus.FAILED); - put(2, ExitStatus.CONTINUABLE); + put(2, ExitStatus.EXECUTING); put(3, ExitStatus.NOOP); put(4, ExitStatus.UNKNOWN); put(ConfigurableSystemProcessExitCodeMapper.ELSE_KEY, ExitStatus.UNKNOWN); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/StepHandlerAdapterTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/StepHandlerAdapterTests.java index 8e208b15f..9ed2e4adc 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/StepHandlerAdapterTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/StepHandlerAdapterTests.java @@ -20,6 +20,11 @@ import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Test; import org.springframework.batch.core.ExitStatus; +import org.springframework.batch.core.JobExecution; +import org.springframework.batch.core.JobInstance; +import org.springframework.batch.core.JobParameters; +import org.springframework.batch.core.StepContribution; +import org.springframework.batch.core.StepExecution; import org.springframework.batch.core.step.tasklet.MethodInvokingTaskletAdapter; /** @@ -31,6 +36,9 @@ public class StepHandlerAdapterTests { private MethodInvokingTaskletAdapter tasklet = new MethodInvokingTaskletAdapter(); private Object result = null; + private StepExecution stepExecution = new StepExecution("systemCommandStep", new JobExecution(new JobInstance(1L, + new JobParameters(), "systemCommandJob"))); + public ExitStatus execute() { return ExitStatus.NOOP; } @@ -47,20 +55,26 @@ public class StepHandlerAdapterTests { @Test public void testExecuteWithExitStatus() throws Exception { tasklet.setTargetMethod("execute"); - assertEquals(ExitStatus.NOOP, tasklet.execute(null,null)); + StepContribution contribution = stepExecution.createStepContribution(); + tasklet.execute(contribution,null); + assertEquals(ExitStatus.NOOP, contribution.getExitStatus()); } @Test public void testMapResultWithNull() throws Exception { tasklet.setTargetMethod("process"); - assertEquals(ExitStatus.FINISHED, tasklet.execute(null,null)); + StepContribution contribution = stepExecution.createStepContribution(); + tasklet.execute(contribution,null); + assertEquals(ExitStatus.FINISHED, contribution.getExitStatus()); } @Test public void testMapResultWithNonNull() throws Exception { tasklet.setTargetMethod("process"); this.result = "foo"; - assertEquals(ExitStatus.FINISHED, tasklet.execute(null,null)); + StepContribution contribution = stepExecution.createStepContribution(); + tasklet.execute(contribution,null); + assertEquals(ExitStatus.FINISHED, contribution.getExitStatus()); } } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/SystemCommandTaskletIntegrationTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/SystemCommandTaskletIntegrationTests.java index 88e604ff8..fa3be6fdf 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/SystemCommandTaskletIntegrationTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/SystemCommandTaskletIntegrationTests.java @@ -15,10 +15,9 @@ import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.JobInstance; import org.springframework.batch.core.JobInterruptedException; import org.springframework.batch.core.JobParameters; +import org.springframework.batch.core.StepContribution; import org.springframework.batch.core.StepExecution; -import org.springframework.batch.core.step.tasklet.SystemCommandException; -import org.springframework.batch.core.step.tasklet.SystemCommandTasklet; -import org.springframework.batch.core.step.tasklet.SystemProcessExitCodeMapper; +import org.springframework.batch.repeat.RepeatStatus; import org.springframework.core.task.SimpleAsyncTaskExecutor; import org.springframework.util.Assert; @@ -59,9 +58,9 @@ public class SystemCommandTaskletIntegrationTests { tasklet.afterPropertiesSet(); log.info("Executing command: " + command); - ExitStatus exitStatus = tasklet.execute(null, null); + RepeatStatus exitStatus = tasklet.execute(stepExecution.createStepContribution(), null); - assertEquals(ExitStatus.FINISHED, exitStatus); + assertEquals(RepeatStatus.FINISHED, exitStatus); } /* @@ -75,8 +74,10 @@ public class SystemCommandTaskletIntegrationTests { log.info("Executing command: " + command); try { - ExitStatus exitStatus = tasklet.execute(null, null); - assertEquals(ExitStatus.FAILED, exitStatus); + StepContribution contribution = stepExecution.createStepContribution(); + RepeatStatus exitStatus = tasklet.execute(contribution, null); + assertEquals(RepeatStatus.FINISHED, exitStatus); + assertEquals(ExitStatus.FAILED, contribution.getExitStatus()); } catch (RuntimeException e) { // on some platforms the system call does not return diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/TaskletStepTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/TaskletStepTests.java index 54e3b717e..cc5ca3b7d 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/TaskletStepTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/tasklet/TaskletStepTests.java @@ -55,6 +55,7 @@ import org.springframework.batch.item.ItemStreamException; import org.springframework.batch.item.ItemStreamSupport; import org.springframework.batch.item.ItemWriter; import org.springframework.batch.item.support.ListItemReader; +import org.springframework.batch.repeat.RepeatStatus; import org.springframework.batch.repeat.policy.DefaultResultCompletionPolicy; import org.springframework.batch.repeat.policy.SimpleCompletionPolicy; import org.springframework.batch.repeat.support.RepeatTemplate; @@ -779,12 +780,10 @@ public class TaskletStepTests { StepExecution stepExecution = new StepExecution(step.getName(), new JobExecution(jobInstance)); final ExecutionContext ec = stepExecution.getExecutionContext(); step.setTasklet(new Tasklet(){ - - public ExitStatus execute(StepContribution contribution, + public RepeatStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { - ec.putString("test", "test"); - return ExitStatus.FINISHED; + return RepeatStatus.FINISHED; } }); diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/repeat/RepeatStatus.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/repeat/RepeatStatus.java index bdc7231e7..9fea44380 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/repeat/RepeatStatus.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/repeat/RepeatStatus.java @@ -2,7 +2,7 @@ package org.springframework.batch.repeat; public enum RepeatStatus { - UNKNOWN(true), CONTINUABLE(true), FINISHED(false); + CONTINUABLE(true), FINISHED(false); private final boolean continuable; diff --git a/spring-batch-integration/src/main/java/org/springframework/batch/integration/chunk/ChunkMessageChannelItemWriter.java b/spring-batch-integration/src/main/java/org/springframework/batch/integration/chunk/ChunkMessageChannelItemWriter.java index b6649d361..1f5792912 100644 --- a/spring-batch-integration/src/main/java/org/springframework/batch/integration/chunk/ChunkMessageChannelItemWriter.java +++ b/spring-batch-integration/src/main/java/org/springframework/batch/integration/chunk/ChunkMessageChannelItemWriter.java @@ -86,7 +86,7 @@ public class ChunkMessageChannelItemWriter extends StepExecutionListenerSuppo @Override public ExitStatus afterStep(StepExecution stepExecution) { if (!(stepExecution.getStatus() == BatchStatus.COMPLETED)) { - return ExitStatus.CONTINUABLE; + return ExitStatus.EXECUTING; } long expecting = localState.getExpecting(); boolean timedOut; diff --git a/spring-batch-integration/src/main/java/org/springframework/batch/integration/chunk/ChunkProcessorChunkHandler.java b/spring-batch-integration/src/main/java/org/springframework/batch/integration/chunk/ChunkProcessorChunkHandler.java index dcd211368..c7bd826ce 100644 --- a/spring-batch-integration/src/main/java/org/springframework/batch/integration/chunk/ChunkProcessorChunkHandler.java +++ b/spring-batch-integration/src/main/java/org/springframework/batch/integration/chunk/ChunkProcessorChunkHandler.java @@ -50,7 +50,7 @@ public class ChunkProcessorChunkHandler implements ChunkHandler, Initializ } logger.debug("Completed chunk handling with " + skipCount + " skips"); - return new ChunkResponse(ExitStatus.CONTINUABLE, chunkRequest.getJobId(), skipCount); + return new ChunkResponse(ExitStatus.EXECUTING, chunkRequest.getJobId(), skipCount); } } diff --git a/spring-batch-integration/src/test/java/org/springframework/batch/integration/chunk/ChunkProcessorChunkHandlerTests.java b/spring-batch-integration/src/test/java/org/springframework/batch/integration/chunk/ChunkProcessorChunkHandlerTests.java index e35b3911a..937844baf 100644 --- a/spring-batch-integration/src/test/java/org/springframework/batch/integration/chunk/ChunkProcessorChunkHandlerTests.java +++ b/spring-batch-integration/src/test/java/org/springframework/batch/integration/chunk/ChunkProcessorChunkHandlerTests.java @@ -27,7 +27,7 @@ public class ChunkProcessorChunkHandlerTests { 12L, 10)); assertEquals(0, response.getSkipCount()); assertEquals(new Long(12L), response.getJobId()); - assertEquals(ExitStatus.CONTINUABLE, response.getExitStatus()); + assertEquals(ExitStatus.EXECUTING, response.getExitStatus()); assertEquals(2, count); } diff --git a/spring-batch-integration/src/test/java/org/springframework/batch/integration/job/TestTasklet.java b/spring-batch-integration/src/test/java/org/springframework/batch/integration/job/TestTasklet.java index 94ac1e39a..48e661290 100644 --- a/spring-batch-integration/src/test/java/org/springframework/batch/integration/job/TestTasklet.java +++ b/spring-batch-integration/src/test/java/org/springframework/batch/integration/job/TestTasklet.java @@ -18,6 +18,7 @@ package org.springframework.batch.integration.job; import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.StepContribution; import org.springframework.batch.core.step.tasklet.Tasklet; +import org.springframework.batch.repeat.RepeatStatus; import org.springframework.core.AttributeAccessor; /** @@ -30,8 +31,9 @@ public class TestTasklet implements Tasklet { * (non-Javadoc) * */ - public ExitStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { - return ExitStatus.FINISHED; + public RepeatStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { + contribution.setExitStatus(ExitStatus.FINISHED); + return RepeatStatus.FINISHED; } } diff --git a/spring-batch-samples/src/main/java/org/springframework/batch/sample/domain/football/internal/ErrorLogWriter.java b/spring-batch-samples/src/main/java/org/springframework/batch/sample/domain/football/internal/ErrorLogWriter.java index 30aaa7beb..5bcdc4d92 100644 --- a/spring-batch-samples/src/main/java/org/springframework/batch/sample/domain/football/internal/ErrorLogWriter.java +++ b/spring-batch-samples/src/main/java/org/springframework/batch/sample/domain/football/internal/ErrorLogWriter.java @@ -4,9 +4,9 @@ import javax.sql.DataSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.StepContribution; import org.springframework.batch.core.step.tasklet.Tasklet; +import org.springframework.batch.repeat.RepeatStatus; import org.springframework.core.AttributeAccessor; import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; @@ -15,9 +15,9 @@ public class ErrorLogWriter implements Tasklet { protected final Log logger = LogFactory.getLog(getClass()); private SimpleJdbcTemplate simpleJdbcTemplate; - public ExitStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { + public RepeatStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { this.simpleJdbcTemplate.update("insert into ERROR_LOG values ('Some records were skipped!')"); - return ExitStatus.FINISHED; + return RepeatStatus.FINISHED; } public void setDataSource(DataSource dataSource) { diff --git a/spring-batch-samples/src/main/java/org/springframework/batch/sample/tasklet/DummyMessageReceivingTasklet.java b/spring-batch-samples/src/main/java/org/springframework/batch/sample/tasklet/DummyMessageReceivingTasklet.java index 121fb3d01..dcf5fb9f0 100644 --- a/spring-batch-samples/src/main/java/org/springframework/batch/sample/tasklet/DummyMessageReceivingTasklet.java +++ b/spring-batch-samples/src/main/java/org/springframework/batch/sample/tasklet/DummyMessageReceivingTasklet.java @@ -2,12 +2,12 @@ package org.springframework.batch.sample.tasklet; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.StepContribution; import org.springframework.batch.core.StepExecution; import org.springframework.batch.core.listener.StepExecutionListenerSupport; import org.springframework.batch.core.step.tasklet.Tasklet; import org.springframework.batch.item.ExecutionContext; +import org.springframework.batch.repeat.RepeatStatus; import org.springframework.core.AttributeAccessor; /** @@ -25,8 +25,8 @@ public class DummyMessageReceivingTasklet extends StepExecutionListenerSupport i logger.info("Got message from context: " + receivedMessage); } - public ExitStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { - return ExitStatus.FINISHED; + public RepeatStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { + return RepeatStatus.FINISHED; } public String getReceivedMessage() { diff --git a/spring-batch-samples/src/main/java/org/springframework/batch/sample/tasklet/DummyMessageSendingTasklet.java b/spring-batch-samples/src/main/java/org/springframework/batch/sample/tasklet/DummyMessageSendingTasklet.java index aa15e81d3..66261dd3d 100644 --- a/spring-batch-samples/src/main/java/org/springframework/batch/sample/tasklet/DummyMessageSendingTasklet.java +++ b/spring-batch-samples/src/main/java/org/springframework/batch/sample/tasklet/DummyMessageSendingTasklet.java @@ -8,6 +8,7 @@ import org.springframework.batch.core.StepExecution; import org.springframework.batch.core.listener.StepExecutionListenerSupport; import org.springframework.batch.core.step.tasklet.Tasklet; import org.springframework.batch.item.ExecutionContext; +import org.springframework.batch.repeat.RepeatStatus; import org.springframework.core.AttributeAccessor; /** @@ -28,8 +29,8 @@ public class DummyMessageSendingTasklet extends StepExecutionListenerSupport imp return null; } - public ExitStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { - return ExitStatus.FINISHED; + public RepeatStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { + return RepeatStatus.FINISHED; } public String getMessage() { diff --git a/spring-batch-samples/src/main/java/org/springframework/batch/sample/tasklet/FileDeletingTasklet.java b/spring-batch-samples/src/main/java/org/springframework/batch/sample/tasklet/FileDeletingTasklet.java index 73b1a81e4..7dc1a4382 100644 --- a/spring-batch-samples/src/main/java/org/springframework/batch/sample/tasklet/FileDeletingTasklet.java +++ b/spring-batch-samples/src/main/java/org/springframework/batch/sample/tasklet/FileDeletingTasklet.java @@ -1,9 +1,9 @@ package org.springframework.batch.sample.tasklet; -import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.StepContribution; import org.springframework.batch.core.UnexpectedJobExecutionException; import org.springframework.batch.core.step.tasklet.Tasklet; +import org.springframework.batch.repeat.RepeatStatus; import org.springframework.beans.factory.InitializingBean; import org.springframework.core.AttributeAccessor; import org.springframework.core.io.Resource; @@ -19,14 +19,14 @@ public class FileDeletingTasklet implements Tasklet, InitializingBean { private Resource[] resources; - public ExitStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { + public RepeatStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { for (Resource resource : resources) { boolean deleted = resource.getFile().delete(); if (!deleted) { throw new UnexpectedJobExecutionException("Could not delete file " + resource); } } - return ExitStatus.FINISHED; + return RepeatStatus.FINISHED; } public void setResources(Resource[] resources) { diff --git a/spring-batch-test/src/test/java/org/springframework/batch/test/sample/SampleTasklet.java b/spring-batch-test/src/test/java/org/springframework/batch/test/sample/SampleTasklet.java index fe49ff8e9..2d7072ff2 100755 --- a/spring-batch-test/src/test/java/org/springframework/batch/test/sample/SampleTasklet.java +++ b/spring-batch-test/src/test/java/org/springframework/batch/test/sample/SampleTasklet.java @@ -1,8 +1,8 @@ package org.springframework.batch.test.sample; -import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.StepContribution; import org.springframework.batch.core.step.tasklet.Tasklet; +import org.springframework.batch.repeat.RepeatStatus; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.AttributeAccessor; import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; @@ -11,16 +11,16 @@ public class SampleTasklet implements Tasklet { @Autowired private SimpleJdbcTemplate jdbcTemplate; + private int id = 0; - + public SampleTasklet(int id) { this.id = id; } - public ExitStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { + public RepeatStatus execute(StepContribution contribution, AttributeAccessor attributes) throws Exception { System.err.println("SampleTasklet1.execute()"); this.jdbcTemplate.update("insert into TESTS(ID, NAME) values (?, 'SampleTasklet" + id + "')", id); - - return ExitStatus.FINISHED; + return RepeatStatus.FINISHED; } }