public class MultiCastSink extends java.lang.Object implements Sink
Sink implementation that
multicasts enqueue operations to the contained and concrete sink
objects. The multi cast sink will try to enqueue and only succeeds
if no element was rejected from any sink. The sink can be configured
to enqueue into one sink alone or all sinks. If a sink array in the
collection of sinks contains more than one sink the multicast sink
will try to enqueue the element always to only one of these
sinks.| Modifier and Type | Class and Description |
|---|---|
private static class |
MultiCastSink.MultiCastPreparedEnqueue
A prepared enqueue object that holds other prepared enqueue
objects and allows to perform a commit / abort on all of these
objects.
|
| Modifier and Type | Field and Description |
|---|---|
private boolean |
m_single
Boolean value describing if one or all operations must succeed.
|
private java.util.Collection |
m_sinks
A collection of sink arrays representing the sinks to enqueue
to.
|
| Constructor and Description |
|---|
MultiCastSink(java.util.Collection sinks)
This constructor creates a failure in-tolerant multicast sink
based on the collection of sink arrays.
|
MultiCastSink(java.util.Collection sinks,
boolean single)
This constructor creates a failure in-tolerant multicast sink
based on the collection of sink arrays.
|
| Modifier and Type | Method and Description |
|---|---|
void |
enqueue(java.lang.Object element)
Enqueues the given element onto the Sink.
|
void |
enqueue(java.lang.Object[] elements)
Given an array of elements, atomically enqueues all of the
elements in the array.
|
PreparedEnqueue |
prepareEnqueue(java.lang.Object[] elements)
Support for transactional enqueue.
|
int |
size()
Returns the number of elements waiting in this Sink.
|
java.lang.String |
toString() |
boolean |
tryEnqueue(java.lang.Object element)
Tries to enqueue an event, but instead of throwing exceptions, it
returns a boolean value of whether the attempt was successful.
|
private final java.util.Collection m_sinks
private final boolean m_single
public MultiCastSink(java.util.Collection sinks)
sinks - A collection of sink arrays for each stage.public MultiCastSink(java.util.Collection sinks,
boolean single)
sinks - A collection of sink arrays for each stage.single - public void enqueue(java.lang.Object element)
throws SinkException
Sinkenqueue in interface Sinkelement - The elements to enqueueSinkFullException - Indicates that the sink is temporarily full.SinkClosedException - Indicates that the sink is no longer being serviced.SinkExceptionpublic void enqueue(java.lang.Object[] elements)
throws SinkException
Sinkenqueue in interface Sinkelements - The element array to enqueueSinkFullException - Indicates that the sink is temporarily full.SinkClosedException - Indicates that the sink is no longer being serviced.SinkExceptionpublic boolean tryEnqueue(java.lang.Object element)
SinktryEnqueue in interface Sinkelement - The element to attempt to enqueuetrue if successful, false if
not.public PreparedEnqueue prepareEnqueue(java.lang.Object[] elements) throws SinkException
SinkThis method allows a client to provisionally enqueue a number
of elements onto the queue, and then later commit the enqueue
(with a commitEnqueue call), or abort (with an
abortEnqueue call). This mechanism can be used to
perform "split-phase" enqueues, where a client first enqueues a
set of elements on the queue and then performs some work to "fill
in" those elements before performing a commit. This can also be
used to perform multi-queue transactional enqueue operations,
with an "all-or-nothing" strategy for enqueueing events on
multiple Sinks.
This method would generally be used in the following manner:
PreparedEnqueue enqueue = sink.prepareEnqueue(someElements);
if (canCommit) {
enqueue.commit();
} else {
enqueue.abort();
}
Note that this method does not protect against "dangling prepares" -- that is, a prepare without an associated commit or abort operation. This method should be used with care. In particular, be sure that all code paths (such as exceptions) after a prepare include either a commit or an abort.
prepareEnqueue in interface Sinkelements - The element array to provisionally enqueuePreparedEnqueue that may be used to commit
or abort the provisional enqueueSinkFullException - Indicates that the sink is temporarily full and that the
requested elements could not be provisionally enqueued.SinkClosedException - Indicates that the sink is no longer being serviced.SinkExceptionPreparedEnqueuepublic int size()
SinkImportant: The contract for this method was updated to account for any elements that were prepared for enqueueing. It provides a more predictable and consistent environment, as well as making it easier for EnqueuePredicates to account for those elements.
public java.lang.String toString()
toString in class java.lang.Object