Class BaseAsyncInterceptor
- java.lang.Object
-
- org.infinispan.interceptors.BaseAsyncInterceptor
-
- All Implemented Interfaces:
AsyncInterceptor
- Direct Known Subclasses:
DDAsyncInterceptor
,TransactionSynchronizerInterceptor
public abstract class BaseAsyncInterceptor extends Object implements AsyncInterceptor
Base class for an interceptor in the new asynchronous invocation chain.- Since:
- 9.0
- Author:
- Dan Berindei
-
-
Field Summary
Fields Modifier and Type Field Description protected Configuration
cacheConfiguration
-
Constructor Summary
Constructors Constructor Description BaseAsyncInterceptor()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description Object
asyncInvokeNext(InvocationContext ctx, org.infinispan.commands.VisitableCommand command, Collection<? extends CompletionStage<?>> delays)
Suspend invocation until alldelays
complete, then if successful invoke the next interceptor.Object
asyncInvokeNext(InvocationContext ctx, org.infinispan.commands.VisitableCommand command, CompletionStage<?> delay)
Suspend the invocation untildelay
completes, then if successful invoke the next interceptor.Object
asyncInvokeNext(InvocationContext ctx, org.infinispan.commands.VisitableCommand command, InvocationStage invocationStage)
Suspend the invocation untilinvocationStage
completes, then if successful invoke the next interceptor.static InvocationStage
asyncValue(CompletionStage<?> valueFuture)
Suspend the invocation untilvalueFuture
completes, then return its result without running the remaining interceptors.static Object
delayedValue(CompletionStage<?> stage, Object syncValue)
Returns an InvocationStage if the provided CompletionStage is null, not completed or completed via exception.static Object
delayedValue(CompletionStage<?> stage, Object syncValue, Throwable throwable)
This method should be used instead ofdelayedValue(CompletionStage, Object)
when aInvocationFinallyFunction
is used to properly handle the exception if any is present.Object
invokeNext(InvocationContext ctx, org.infinispan.commands.VisitableCommand command)
Invoke the next interceptor, possibly with a new command.Object
invokeNextAndExceptionally(InvocationContext ctx, org.infinispan.commands.VisitableCommand command, InvocationExceptionFunction function)
Invoke the next interceptor, possibly with a new command, and execute anInvocationCallback
after all the interceptors have finished with an exception.Object
invokeNextAndFinally(InvocationContext ctx, org.infinispan.commands.VisitableCommand command, InvocationFinallyAction action)
Invoke the next interceptor, possibly with a new command, and execute anInvocationCallback
after all the interceptors have finished, with or without an exception.Object
invokeNextAndHandle(InvocationContext ctx, org.infinispan.commands.VisitableCommand command, InvocationFinallyFunction function)
Invoke the next interceptor, possibly with a new command, and execute anInvocationCallback
after all the interceptors have finished, with or without an exception.Object
invokeNextThenAccept(InvocationContext ctx, org.infinispan.commands.VisitableCommand command, InvocationSuccessAction action)
Invoke the next interceptor, possibly with a new command, and execute anInvocationCallback
after all the interceptors have finished successfully.Object
invokeNextThenApply(InvocationContext ctx, org.infinispan.commands.VisitableCommand command, InvocationSuccessFunction function)
Invoke the next interceptor, possibly with a new command, and execute anInvocationCallback
after all the interceptors have finished successfully.protected static boolean
isSuccessfullyDone(Object maybeStage)
static InvocationStage
makeStage(Object rv)
Encode the result of aninvokeNext(InvocationContext, VisitableCommand)
in anInvocationStage
.void
setNextInterceptor(AsyncInterceptor nextInterceptor)
Used internally to set up the interceptor.static Object
valueOrException(Object rv, Throwable throwable)
Return the value ifthrowable != null
, throw the exception otherwise.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.infinispan.interceptors.AsyncInterceptor
visitCommand
-
-
-
-
Field Detail
-
cacheConfiguration
protected Configuration cacheConfiguration
-
-
Method Detail
-
setNextInterceptor
public final void setNextInterceptor(AsyncInterceptor nextInterceptor)
Used internally to set up the interceptor.- Specified by:
setNextInterceptor
in interfaceAsyncInterceptor
-
invokeNext
public final Object invokeNext(InvocationContext ctx, org.infinispan.commands.VisitableCommand command)
Invoke the next interceptor, possibly with a new command.Use
invokeNextThenApply(InvocationContext, VisitableCommand, InvocationSuccessFunction)
orinvokeNextThenAccept(InvocationContext, VisitableCommand, InvocationSuccessAction)
instead if you need to process the return value of the next interceptor.Note:
invokeNext(ctx, command)
does not throw exceptions. In order to handle exceptions from the next interceptors, you must useinvokeNextAndHandle(InvocationContext, VisitableCommand, InvocationFinallyFunction)
,invokeNextAndFinally(InvocationContext, VisitableCommand, InvocationFinallyAction)
, orinvokeNextAndExceptionally(InvocationContext, VisitableCommand, InvocationExceptionFunction)
.
-
invokeNextThenApply
public final Object invokeNextThenApply(InvocationContext ctx, org.infinispan.commands.VisitableCommand command, InvocationSuccessFunction function)
Invoke the next interceptor, possibly with a new command, and execute anInvocationCallback
after all the interceptors have finished successfully.You need to wrap the result with
makeStage(Object)
if you need to add another handler.
-
invokeNextThenAccept
public final Object invokeNextThenAccept(InvocationContext ctx, org.infinispan.commands.VisitableCommand command, InvocationSuccessAction action)
Invoke the next interceptor, possibly with a new command, and execute anInvocationCallback
after all the interceptors have finished successfully.You need to wrap the result with
makeStage(Object)
if you need to add another handler.
-
invokeNextAndExceptionally
public final Object invokeNextAndExceptionally(InvocationContext ctx, org.infinispan.commands.VisitableCommand command, InvocationExceptionFunction function)
Invoke the next interceptor, possibly with a new command, and execute anInvocationCallback
after all the interceptors have finished with an exception.You need to wrap the result with
makeStage(Object)
if you need to add another handler.
-
invokeNextAndFinally
public final Object invokeNextAndFinally(InvocationContext ctx, org.infinispan.commands.VisitableCommand command, InvocationFinallyAction action)
Invoke the next interceptor, possibly with a new command, and execute anInvocationCallback
after all the interceptors have finished, with or without an exception.You need to wrap the result with
makeStage(Object)
if you need to add another handler.
-
invokeNextAndHandle
public final Object invokeNextAndHandle(InvocationContext ctx, org.infinispan.commands.VisitableCommand command, InvocationFinallyFunction function)
Invoke the next interceptor, possibly with a new command, and execute anInvocationCallback
after all the interceptors have finished, with or without an exception.You need to wrap the result with
makeStage(Object)
if you need to add another handler.
-
asyncValue
public static InvocationStage asyncValue(CompletionStage<?> valueFuture)
Suspend the invocation untilvalueFuture
completes, then return its result without running the remaining interceptors.The caller can add a callback that will run when
valueFuture
completes, e.g.asyncValue(v).thenApply(ctx, command, (rCtx, rCommand, rv, t) -> invokeNext(rCtx, rCommand))
. For this particular scenario, however, it's simpler to useasyncInvokeNext(InvocationContext, VisitableCommand, CompletionStage)
.
-
asyncInvokeNext
public final Object asyncInvokeNext(InvocationContext ctx, org.infinispan.commands.VisitableCommand command, CompletionStage<?> delay)
Suspend the invocation untildelay
completes, then if successful invoke the next interceptor.If
delay
completes exceptionally, skip the next interceptor and continue with the exception.You need to wrap the result with
makeStage(Object)
if you need to add another handler.
-
asyncInvokeNext
public final Object asyncInvokeNext(InvocationContext ctx, org.infinispan.commands.VisitableCommand command, InvocationStage invocationStage)
Suspend the invocation untilinvocationStage
completes, then if successful invoke the next interceptor.If
invocationStage
completes exceptionally, skip the next interceptor and continue with the exception.You need to wrap the result with
makeStage(Object)
if you need to add another handler.
-
asyncInvokeNext
public final Object asyncInvokeNext(InvocationContext ctx, org.infinispan.commands.VisitableCommand command, Collection<? extends CompletionStage<?>> delays)
Suspend invocation until alldelays
complete, then if successful invoke the next interceptor. If the list is empty or null, invoke the next interceptor immediately.If any of
delays
completes exceptionally, skip the next interceptor and continue with the exception.You need to wrap the result with
makeStage(Object)
if you need to add another handler.
-
valueOrException
public static Object valueOrException(Object rv, Throwable throwable) throws Throwable
Return the value ifthrowable != null
, throw the exception otherwise.- Throws:
Throwable
-
makeStage
public static InvocationStage makeStage(Object rv)
Encode the result of aninvokeNext(InvocationContext, VisitableCommand)
in anInvocationStage
.May not create a new instance, if the result is already an
InvocationStage
.
-
delayedValue
public static Object delayedValue(CompletionStage<?> stage, Object syncValue)
Returns an InvocationStage if the provided CompletionStage is null, not completed or completed via exception. If these are not true the sync value is returned directly.- Parameters:
stage
- wait for completion of this if not nullsyncValue
- sync value to return if stage is complete or as stage value- Returns:
- invocation stage or sync value
-
delayedValue
public static Object delayedValue(CompletionStage<?> stage, Object syncValue, Throwable throwable)
This method should be used instead ofdelayedValue(CompletionStage, Object)
when aInvocationFinallyFunction
is used to properly handle the exception if any is present.- Parameters:
stage
-syncValue
-throwable
-- Returns:
-
isSuccessfullyDone
protected static boolean isSuccessfullyDone(Object maybeStage)
-
-