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:
dsyer
2008-11-08 11:33:25 +00:00
parent 11faa837af
commit 16606e3abd
34 changed files with 173 additions and 134 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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