/** * Closes consumers of this {@link SourceTableRowProcessingPublisher}. * Usually this will be done automatically when * {@link #runRowProcessing(Queue, TaskListener)} is invoked. */ @Override public final void closeConsumers() { final TaskRunner taskRunner = getTaskRunner(); final List<RowProcessingConsumer> configurableConsumers = getConsumers(); for (final RowProcessingConsumer consumer : configurableConsumers) { final TaskRunnable task = createCloseTask(consumer, null); taskRunner.run(task); } } }
/** * Initializes consumers of this {@link SourceTableRowProcessingPublisher}. * * This method will not initialize consumers containing * {@link MultiStreamComponent}s. Ensure that * {@link #initializeMultiStreamConsumers(Set)} is also invoked. * * Once consumers are initialized, row processing can begin, expected rows * can be calculated and more. * * @param finishedListener */ @Override public final void initializeConsumers(final TaskListener finishedListener) { final TaskRunner taskRunner = getTaskRunner(); final List<RowProcessingConsumer> configurableConsumers = getConsumers(); final int numConfigurableConsumers = configurableConsumers.size(); final JoinTaskListener initFinishedListener = new JoinTaskListener(numConfigurableConsumers, finishedListener); for (final RowProcessingConsumer consumer : configurableConsumers) { final TaskRunnable task = createInitTask(consumer, initFinishedListener); taskRunner.run(task); } }
private List<TaskRunnable> createPostProcessingTasks(final Queue<JobAndResult> resultQueue, final TaskListener finishedTaskListener) { final List<RowProcessingConsumer> configurableConsumers = getConsumers(); final int numConsumers = configurableConsumers.size(); // add tasks for closing components final JoinTaskListener closeTaskListener = new JoinTaskListener(numConsumers, finishedTaskListener); final List<TaskRunnable> closeTasks = new ArrayList<>(); for (final RowProcessingConsumer consumer : configurableConsumers) { closeTasks.add(createCloseTask(consumer, closeTaskListener)); } final TaskListener getResultCompletionListener = new ForkTaskListener("collect results (" + getStream() + ")", getTaskRunner(), closeTasks); // add tasks for collecting results final TaskListener getResultTaskListener = new JoinTaskListener(numConsumers, getResultCompletionListener); final List<TaskRunnable> getResultTasks = new ArrayList<>(); for (final RowProcessingConsumer consumer : configurableConsumers) { final Task collectResultTask = createCollectResultTask(consumer, resultQueue); if (collectResultTask == null) { getResultTasks.add(new TaskRunnable(null, getResultTaskListener)); } else { getResultTasks.add(new TaskRunnable(collectResultTask, getResultTaskListener)); } } return getResultTasks; }