Represents the channel for a specific source into which this processor submits the requests for that source. To use, create a Channel, {@link Channel#start(ExecutorService,ExecutionContext,RepositoryConnectionFactory) start it}, and then {@link Channel#add(Request) add} requests (optionally with a {@link Channel#add(Request,CountDownLatch) latch} or via a{@link Channel#addAndAwait(Request) add and await}). Finally, call {@link Channel#done()} when there are no more requests.
When the channel is {@link Channel#start(ExecutorService,ExecutionContext,RepositoryConnectionFactory) started}, it creates a {@link Callable} and submits it to the supplied {@link ExecutorService}. (The resulting {@link Future} is thencaptured so that the channel can be {@link Channel#cancel(boolean) cancelled}.) The Callable obtains a {@link RepositoryConnection connection} to the channel's source, and then has the connection process a single{@link CompositeRequest} that fronts the queue of Request instances added to this channel. Because a blocking queue isused, the CompositeRequest's {@link CompositeRequest#iterator() iterator} blocks (on {@link Iterator#hasNext()}) until the next request is available. When {@link Channel#done()} is called, the iterator stops blocking and completes.