IN PROGRESS - issue BATCH-894: RFC: move ExitStatus up into Core?
Change Tasklet to use RepeatStatus instead of ExitStatus to signal continuable status
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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() + "]";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
@@ -74,18 +74,19 @@ public class FaultTolerantChunkOrientedTasklet<I, O> 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<I> inputs = getBufferedList(attributes, INPUT_BUFFER_KEY);
|
||||
final List<O> outputs = new ArrayList<O>();
|
||||
|
||||
ExitStatus result = ExitStatus.CONTINUABLE;
|
||||
|
||||
final List<Exception> 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<I, O> 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<I, O> extends AbstractFaultTolera
|
||||
attributes.removeAttribute(key);
|
||||
}
|
||||
|
||||
return result;
|
||||
return continuable;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -52,8 +52,7 @@ public class NonbufferingFaultTolerantChunkOrientedTasklet<I, O> 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<I> inputs = new ArrayList<I>();
|
||||
|
||||
final List<Exception> skippedReads = getBufferedList(attributes, SKIPPED_READS_KEY);
|
||||
@@ -70,7 +69,8 @@ public class NonbufferingFaultTolerantChunkOrientedTasklet<I, O> 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<I, Exception> skippedInputs = getBufferedSkips(attributes, SKIPPED_INPUTS_KEY);
|
||||
@@ -95,7 +95,7 @@ public class NonbufferingFaultTolerantChunkOrientedTasklet<I, O> extends
|
||||
callSkipListenersAndCleanSkipsFromBuffer(skippedReads, skippedInputs, skippedOutputs, inputsIncludingSkips,
|
||||
outputsIncludingSkips);
|
||||
|
||||
return result;
|
||||
return continuable;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -37,8 +37,8 @@ public class SimpleChunkOrientedTasklet<I, O> 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<I> inputs = new ArrayList<I>();
|
||||
|
||||
RepeatStatus continuable = repeatOperations.iterate(new RepeatCallback() {
|
||||
@@ -55,11 +55,12 @@ public class SimpleChunkOrientedTasklet<I, O> 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<O> outputs = new ArrayList<O>();
|
||||
@@ -74,7 +75,7 @@ public class SimpleChunkOrientedTasklet<I, O> extends AbstractItemOrientedTaskle
|
||||
doWrite(outputs);
|
||||
contribution.incrementWriteCount(outputs.size());
|
||||
|
||||
return result;
|
||||
return continuable;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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<ExitStatus> callable;
|
||||
private Callable<RepeatStatus> callable;
|
||||
|
||||
/**
|
||||
* Public setter for the {@link Callable}.
|
||||
* @param callable the {@link Callable} to set
|
||||
*/
|
||||
public void setCallable(Callable<ExitStatus> callable) {
|
||||
public void setCallable(Callable<RepeatStatus> 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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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<Integer> systemCommandTask = new FutureTask<Integer>(new Callable<Integer>() {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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.<StepExecution> asList(stepExecution1, stepExecution2));
|
||||
assertNotNull(result);
|
||||
assertEquals(ExitStatus.FAILED.and(ExitStatus.CONTINUABLE), result.getExitStatus());
|
||||
assertEquals(ExitStatus.FAILED.and(ExitStatus.EXECUTING), result.getExitStatus());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<ExitStatus>() {
|
||||
public ExitStatus call() throws Exception {
|
||||
return ExitStatus.FINISHED;
|
||||
adapter.setCallable(new Callable<RepeatStatus>() {
|
||||
public RepeatStatus call() throws Exception {
|
||||
return RepeatStatus.FINISHED;
|
||||
}
|
||||
});
|
||||
assertEquals(ExitStatus.FINISHED, adapter.execute(null,null));
|
||||
assertEquals(RepeatStatus.FINISHED, adapter.execute(null,null));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ public class ChunkMessageChannelItemWriter<T> 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;
|
||||
|
||||
@@ -50,7 +50,7 @@ public class ChunkProcessorChunkHandler<S> implements ChunkHandler<S>, 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);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user