BATCH-1011: add nesting to FlowExecutor so that SplitState can detect a nested flow

This commit is contained in:
dsyer
2009-02-15 17:31:53 +00:00
parent 4a90e62205
commit 9391d6f471
6 changed files with 72 additions and 18 deletions

View File

@@ -31,6 +31,8 @@ import org.springframework.batch.core.repository.JobRestartException;
*/
public class JobFlowExecutorSupport implements FlowExecutor {
private volatile boolean nested = false;
public String executeStep(Step step) throws JobInterruptedException, JobRestartException,
StartLimitExceededException {
return ExitStatus.COMPLETED.getExitCode();
@@ -50,4 +52,16 @@ public class JobFlowExecutorSupport implements FlowExecutor {
public void updateStepExecutionStatus() {
}
public boolean isNested() {
return nested;
}
public void nest() {
nested= true;
}
public void unnest() {
nested = false;
}
}

View File

@@ -25,6 +25,7 @@ import org.junit.Test;
import org.springframework.batch.core.job.flow.Flow;
import org.springframework.batch.core.job.flow.FlowExecution;
import org.springframework.batch.core.job.flow.FlowExecutionStatus;
import org.springframework.batch.core.job.flow.support.JobFlowExecutorSupport;
import org.springframework.core.task.SimpleAsyncTaskExecutor;
@@ -34,6 +35,8 @@ import org.springframework.core.task.SimpleAsyncTaskExecutor;
*/
public class SplitStateTests {
private JobFlowExecutorSupport executor = new JobFlowExecutorSupport();
@Test
public void testBasicHandling() throws Exception {
@@ -45,11 +48,11 @@ public class SplitStateTests {
SplitState state = new SplitState(flows, "foo");
EasyMock.expect(flow1.start(null)).andReturn(new FlowExecution("step1", FlowExecutionStatus.COMPLETED));
EasyMock.expect(flow2.start(null)).andReturn(new FlowExecution("step1", FlowExecutionStatus.COMPLETED));
EasyMock.expect(flow1.start(executor)).andReturn(new FlowExecution("step1", FlowExecutionStatus.COMPLETED));
EasyMock.expect(flow2.start(executor)).andReturn(new FlowExecution("step1", FlowExecutionStatus.COMPLETED));
EasyMock.replay(flow1, flow2);
FlowExecutionStatus result = state.handle(null);
FlowExecutionStatus result = state.handle(executor);
assertEquals(FlowExecutionStatus.COMPLETED, result);
EasyMock.verify(flow1, flow2);
@@ -68,11 +71,11 @@ public class SplitStateTests {
SplitState state = new SplitState(flows, "foo");
state.setTaskExecutor(new SimpleAsyncTaskExecutor());
EasyMock.expect(flow1.start(null)).andReturn(new FlowExecution("step1", FlowExecutionStatus.COMPLETED));
EasyMock.expect(flow2.start(null)).andReturn(new FlowExecution("step1", FlowExecutionStatus.COMPLETED));
EasyMock.expect(flow1.start(executor)).andReturn(new FlowExecution("step1", FlowExecutionStatus.COMPLETED));
EasyMock.expect(flow2.start(executor)).andReturn(new FlowExecution("step1", FlowExecutionStatus.COMPLETED));
EasyMock.replay(flow1, flow2);
FlowExecutionStatus result = state.handle(null);
FlowExecutionStatus result = state.handle(executor);
assertEquals(FlowExecutionStatus.COMPLETED, result);
EasyMock.verify(flow1, flow2);