BATCH-1011: add nesting to FlowExecutor so that SplitState can detect a nested flow
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user