private Flow processSplitNode(Deque<LabelledTaskNode> visitorDeque, SplitNode splitNode) { Deque<Flow> flows = new LinkedList<>(); //For each node in the split process it as a DSL flow. for (LabelledTaskNode taskNode : splitNode.getSeries()) { Deque<Flow> resultFlowDeque = new LinkedList<>(); flows.addAll(processSplitFlow(taskNode, resultFlowDeque)); } removeProcessedNodes(visitorDeque, splitNode); Flow nestedSplitFlow = new FlowBuilder.SplitBuilder<>( new FlowBuilder<Flow>("Split" + UUID.randomUUID().toString()), taskExecutor) .add(flows.toArray(new Flow[flows.size()])) .build(); FlowBuilder<Flow> taskAppFlowBuilder = new FlowBuilder<>("Flow" + UUID.randomUUID().toString()); if (this.hasNestedSplit) { this.splitFlows = flows.size(); int threadCorePoolSize = this.composedTaskProperties.getSplitThreadCorePoolSize(); Assert.isTrue(threadCorePoolSize >= this.splitFlows, "Split thread core pool size " + threadCorePoolSize + " should be equal or greater " + "than the depth of split flows " + (this.splitFlows +1) + "." + " Try setting the composed task property `splitThreadCorePoolSize`"); } return taskAppFlowBuilder.start(nestedSplitFlow).end(); }
/** * @param executor a task executor to execute the split flows * @return a builder to enable fluent chaining */ public SplitBuilder<Q> split(TaskExecutor executor) { return new SplitBuilder<Q>(this, executor); }
/** * @param executor a task executor to execute the split flows * @return a builder to enable fluent chaining */ public SplitBuilder<Q> split(TaskExecutor executor) { return new SplitBuilder<Q>(this, executor); }
/** * @param executor a task executor to execute the split flows * @return a builder to enable fluent chaining */ public SplitBuilder<Q> split(TaskExecutor executor) { return new SplitBuilder<Q>(this, executor); }
/** * @param executor a task executor to execute the split flows * @return a builder to enable fluent chaining */ public SplitBuilder<Q> split(TaskExecutor executor) { return new SplitBuilder<>(this, executor); }