K
- the type of the Map entry keysV
- the type of the Map entry valuesP
- the type of the intermediate result during the parallel stageR
- the type of the value returned by the StreamingAggregatorpublic class AsynchronousAggregator<K,V,P,R> extends AbstractAsynchronousAggregator<K,V,P,R> implements InvocableMap.EntryAggregator<K,V,R>
EntryAggregator
wrapper class that allows for an asynchronous invocation of the underlying aggregator. When used as a Future
(without extending), this implementation will simply provide the result
of asynchronous streaming aggregation according to semantics of the corresponding EntryAggregator.aggregate
contract.
More advanced use would require extending this class and overriding onResult(P)
and onException(java.lang.Throwable)
methods. It's very important that overriding implementations of these methods must be non-blocking. For example, any use of NamedCache
API is completely disallowed with the only exception of AsynchronousAggregators
and AsynchronousProcessors
with disabled flow control.
The underlying entry processor is guaranteed to have been fully executed when either onResult()
or onException()
are called.
Note 1: Neither this class nor its extensions need to be serializable. Only the underlying aggregator is serialized and sent to corresponding servers for execution.
Note 2: This feature is not available on Coherence*Extend clients.
AsynchronousProcessor
Modifier and Type | Field and Description |
---|---|
protected Throwable |
m_eReason
Reason for the failed operation.
|
m_aggregator
m_control, m_fFlowControl, m_iOrderId
Constructor and Description |
---|
AsynchronousAggregator(InvocableMap.StreamingAggregator<K,V,P,R> aggregator)
Construct an AsynchronousAggregator for a given streaming aggregator and the automatic flow control "on".
|
AsynchronousAggregator(InvocableMap.StreamingAggregator<K,V,P,R> aggregator, boolean fFlowControl)
Construct an AsynchronousAggregator for a given streaming aggregator.
|
AsynchronousAggregator(InvocableMap.StreamingAggregator<K,V,P,R> aggregator, boolean fFlowControl, int iUnitOrderId)
Construct an AsynchronousAggregator for a given streaming aggregator.
|
Modifier and Type | Method and Description |
---|---|
void |
onComplete()
Called after this asynchronous aggregator has been notified about all possible partial results or failures and no more are forthcoming.
|
void |
onException(Throwable eReason)
Called if the operation failed for any reason.
|
void |
onResult(P result)
Called when the aggregation result is available.
|
aggregate, getAggregator, getUnitOfOrderId
bind, cancel, checkBacklog, complete, completeExceptionally, drainBacklog, flush, get, get, getCompletableFuture, getException, getResult, isAutoFlowControl, isCancelled, isCompletedExceptionally, isDone
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
aggregate
protected volatile Throwable m_eReason
public AsynchronousAggregator(InvocableMap.StreamingAggregator<K,V,P,R> aggregator)
aggregator
- the underlying streaming aggregatorpublic AsynchronousAggregator(InvocableMap.StreamingAggregator<K,V,P,R> aggregator, boolean fFlowControl)
aggregator
- the underlying streaming aggregatorfFlowControl
- if true, the calling thread could be held by the service flow control logic (based on the destination backlog); otherwise it's the caller's responsibility to modulate the request flow (e.g. ensure that the invocation rate does not outpace the response rate)public AsynchronousAggregator(InvocableMap.StreamingAggregator<K,V,P,R> aggregator, boolean fFlowControl, int iUnitOrderId)
aggregator
- the underlying streaming aggregatorfFlowControl
- if true, the calling thread could be held by the service flow control logic (based on the destination backlog); otherwise it's the caller's responsibility to modulate the request flow (e.g. ensure that the invocation rate does not outpace the response rate)iUnitOrderId
- the unit-of-order id for this aggregatorpublic void onResult(P result)
For ordering guarantees see AbstractAsynchronousAggregator.getUnitOfOrderId()
.
Note: Overriding implementations of this method must be non-blocking.
public void onException(Throwable eReason)
Note: Overriding implementations of this method must be non-blocking.
onException
in class AbstractAsynchronousAggregator<K,V,P,R>
eReason
- the reason of failurepublic void onComplete()
AbstractAsynchronousAggregator
As long as this aggregator was submitted to any of InvocableMap
's methods, this method is guaranteed to be called once and only once.
Possible call back sequences are:
cache.aggregate ... onResult onComplete cache.aggregate ... onException onComplete cache.aggregate ... onResult onException onException onResult onCompleteFor ordering guarantees across processors see
AbstractAsynchronousAggregator.getUnitOfOrderId()
.
Note:
Overriding implementations of this method must be non-blocking.
If the StreamingAggregator signaled to short-circuit the aggregation while combining partial results
, onComplete() could be called before all the results are received.
onComplete
in class AbstractAsynchronousAggregator<K,V,P,R>