private SplitState createState(Collection<Flow> flows, TaskExecutor executor) { if (!states.containsKey(flows)) { states.put(flows, new SplitState(flows, prefix + "split" + (splitCounter++))); } SplitState result = (SplitState) states.get(flows); if (executor != null) { result.setTaskExecutor(executor); } dirty = true; return result; }
return doAggregation(results, executor);
@Test public void testConcurrentHandling() throws Exception { Flow flow1 = mock(Flow.class); Flow flow2 = mock(Flow.class); SplitState state = new SplitState(Arrays.asList(flow1, flow2), "foo"); state.setTaskExecutor(new SimpleAsyncTaskExecutor()); when(flow1.start(executor)).thenReturn(new FlowExecution("step1", FlowExecutionStatus.COMPLETED)); when(flow2.start(executor)).thenReturn(new FlowExecution("step1", FlowExecutionStatus.COMPLETED)); FlowExecutionStatus result = state.handle(executor); assertEquals(FlowExecutionStatus.COMPLETED, result); }
@Test public void testBasicHandling() throws Exception { Collection<Flow> flows = new ArrayList<>(); Flow flow1 = mock(Flow.class); Flow flow2 = mock(Flow.class); flows.add(flow1); flows.add(flow2); SplitState state = new SplitState(flows, "foo"); when(flow1.start(executor)).thenReturn(new FlowExecution("step1", FlowExecutionStatus.COMPLETED)); when(flow2.start(executor)).thenReturn(new FlowExecution("step1", FlowExecutionStatus.COMPLETED)); FlowExecutionStatus result = state.handle(executor); assertEquals(FlowExecutionStatus.COMPLETED, result); }
@Test public void testGetStepSplitFlow() throws Exception { SimpleFlow flow = new SimpleFlow("job"); SimpleFlow flow1 = new SimpleFlow("flow1"); SimpleFlow flow2 = new SimpleFlow("flow2"); List<StateTransition> transitions = new ArrayList<>(); transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "end0")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end0"))); flow1.setStateTransitions(new ArrayList<>(transitions)); flow1.afterPropertiesSet(); transitions = new ArrayList<>(); transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), "end1")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end1"))); flow2.setStateTransitions(new ArrayList<>(transitions)); flow2.afterPropertiesSet(); transitions = new ArrayList<>(); transitions.add(StateTransition.createStateTransition(new SplitState(Arrays.<Flow> asList(flow1, flow2), "split"), "end2")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end2"))); flow.setStateTransitions(transitions); flow.afterPropertiesSet(); job.setFlow(flow); job.afterPropertiesSet(); List<String> names = new ArrayList<>(job.getStepNames()); Collections.sort(names); assertEquals("[step1, step2]", names.toString()); }
@Test public void testGetStepSplitFlow() throws Exception { SimpleFlow flow = new JsrFlow("job"); SimpleFlow flow1 = new JsrFlow("flow1"); SimpleFlow flow2 = new JsrFlow("flow2"); List<StateTransition> transitions = new ArrayList<>(); transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step1")), "end0")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end0"))); flow1.setStateTransitions(new ArrayList<>(transitions)); flow1.afterPropertiesSet(); transitions = new ArrayList<>(); transitions.add(StateTransition.createStateTransition(new StepState(new StubStep("step2")), "end1")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end1"))); flow2.setStateTransitions(new ArrayList<>(transitions)); flow2.afterPropertiesSet(); transitions = new ArrayList<>(); transitions.add(StateTransition.createStateTransition(new SplitState(Arrays.<Flow> asList(flow1, flow2), "split"), "end2")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end2"))); flow.setStateTransitions(transitions); flow.afterPropertiesSet(); job.setFlow(flow); job.afterPropertiesSet(); List<String> names = new ArrayList<>(job.getStepNames()); Collections.sort(names); assertEquals("[step1, step2]", names.toString()); }
private SplitState createState(Collection<Flow> flows, TaskExecutor executor) { if (!states.containsKey(flows)) { states.put(flows, new SplitState(flows, prefix + "split" + (splitCounter++))); } SplitState result = (SplitState) states.get(flows); if (executor != null) { result.setTaskExecutor(executor); } dirty = true; return result; }
transitions.add(StateTransition.createStateTransition(new SplitState(Arrays.<Flow> asList(flow1, flow2), "split"), "end0")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end0")));
/** * Resets the {@link JobExecution}'s exit status before aggregating the results of the flows within * the split. * * @param results the {@link FlowExecution}s from each of the flows executed within this split * @param executor the {@link FlowExecutor} used to execute the flows */ @Override protected FlowExecutionStatus doAggregation(Collection<FlowExecution> results, FlowExecutor executor) { List<String> stepNames = new ArrayList<>(); for (Flow curFlow : getFlows()) { JsrFlow flow = (JsrFlow) curFlow; if(flow.getMostRecentStepName() != null) { stepNames.add(flow.getMostRecentStepName()); } } if(!stepNames.isEmpty()) { executor.getJobExecution().getExecutionContext().put("batch.lastSteps", stepNames); } executor.getJobExecution().setExitStatus(null); return super.doAggregation(results, executor); } }
private SplitState createState(Collection<Flow> flows, TaskExecutor executor) { if (!states.containsKey(flows)) { states.put(flows, new SplitState(flows, prefix + "split" + (splitCounter++))); } SplitState result = (SplitState) states.get(flows); if (executor != null) { result.setTaskExecutor(executor); } dirty = true; return result; }
transitions.add(StateTransition.createStateTransition(new SplitState(Arrays.<Flow> asList(flow1, flow2), "split"), "end0")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end0")));
return doAggregation(results, executor);
private SplitState createState(Collection<Flow> flows, TaskExecutor executor) { if (!states.containsKey(flows)) { states.put(flows, new SplitState(flows, prefix + "split" + (splitCounter++))); } SplitState result = (SplitState) states.get(flows); if (executor != null) { result.setTaskExecutor(executor); } dirty = true; return result; }
transitions.add(StateTransition.createStateTransition(new SplitState(Arrays.<Flow> asList(flow1, flow2), "split"), "end0")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end0")));
return doAggregation(results, executor);
transitions.add(StateTransition.createStateTransition(new SplitState(Arrays.<Flow> asList(flow1, flow2), "split"), "end0")); transitions.add(StateTransition.createEndStateTransition(new EndState(FlowExecutionStatus.COMPLETED, "end0")));
return doAggregation(results, executor);
/** * Resets the {@link JobExecution}'s exit status before aggregating the results of the flows within * the split. * * @param results the {@link FlowExecution}s from each of the flows executed within this split * @param executor the {@link FlowExecutor} used to execute the flows */ @Override protected FlowExecutionStatus doAggregation(Collection<FlowExecution> results, FlowExecutor executor) { List<String> stepNames = new ArrayList<String>(); for (Flow curFlow : getFlows()) { JsrFlow flow = (JsrFlow) curFlow; if(flow.getMostRecentStepName() != null) { stepNames.add(flow.getMostRecentStepName()); } } if(!stepNames.isEmpty()) { executor.getJobExecution().getExecutionContext().put("batch.lastSteps", stepNames); } executor.getJobExecution().setExitStatus(null); return super.doAggregation(results, executor); } }
/** * Resets the {@link JobExecution}'s exit status before aggregating the results of the flows within * the split. * * @param results the {@link FlowExecution}s from each of the flows executed within this split * @param executor the {@link FlowExecutor} used to execute the flows */ @Override protected FlowExecutionStatus doAggregation(Collection<FlowExecution> results, FlowExecutor executor) { List<String> stepNames = new ArrayList<String>(); for (Flow curFlow : getFlows()) { JsrFlow flow = (JsrFlow) curFlow; if(flow.getMostRecentStepName() != null) { stepNames.add(flow.getMostRecentStepName()); } } if(!stepNames.isEmpty()) { executor.getJobExecution().getExecutionContext().put("batch.lastSteps", stepNames); } executor.getJobExecution().setExitStatus(null); return super.doAggregation(results, executor); } }
/** * Resets the {@link JobExecution}'s exit status before aggregating the results of the flows within * the split. * * @param results the {@link FlowExecution}s from each of the flows executed within this split * @param executor the {@link FlowExecutor} used to execute the flows */ @Override protected FlowExecutionStatus doAggregation(Collection<FlowExecution> results, FlowExecutor executor) { List<String> stepNames = new ArrayList<String>(); for (Flow curFlow : getFlows()) { JsrFlow flow = (JsrFlow) curFlow; if(flow.getMostRecentStepName() != null) { stepNames.add(flow.getMostRecentStepName()); } } if(!stepNames.isEmpty()) { executor.getJobExecution().getExecutionContext().put("batch.lastSteps", stepNames); } executor.getJobExecution().setExitStatus(null); return super.doAggregation(results, executor); } }