Class BaseAsyncInterceptor
- java.lang.Object
-
- org.infinispan.interceptors.BaseAsyncInterceptor
-
- All Implemented Interfaces:
AsyncInterceptor
- Direct Known Subclasses:
DDAsyncInterceptor
,TransactionSynchronizerInterceptor
public abstract class BaseAsyncInterceptor extends java.lang.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 java.lang.Object
asyncInvokeNext(InvocationContext ctx, org.infinispan.commands.VisitableCommand command, java.util.Collection<? extends java.util.concurrent.CompletionStage<?>> delays)
Suspend invocation until alldelays
complete, then if successful invoke the next interceptor.java.lang.Object
asyncInvokeNext(InvocationContext ctx, org.infinispan.commands.VisitableCommand command, java.util.concurrent.CompletionStage<?> delay)
Suspend the invocation untildelay
completes, then if successful invoke the next interceptor.java.lang.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(java.util.concurrent.CompletionStage<?> valueFuture)
Suspend the invocation untilvalueFuture
completes, then return its result without running the remaining interceptors.static java.lang.Object
delayedNull(java.util.concurrent.CompletionStage<java.lang.Void> stage)
The same asdelayedValue(CompletionStage, Object)
, except that it is optimizes cases where the return value is null.static java.lang.Object
delayedValue(java.util.concurrent.CompletionStage<?> stage, java.lang.Object syncValue)
Returns an InvocationStage if the provided CompletionStage is null, not completed or completed via exception.static java.lang.Object
delayedValue(java.util.concurrent.CompletionStage<?> stage, java.lang.Object syncValue, java.lang.Throwable throwable)
This method should be used instead ofdelayedValue(CompletionStage, Object)
when aInvocationFinallyFunction
is used to properly handle the exception if any is present.java.lang.Object
invokeNext(InvocationContext ctx, org.infinispan.commands.VisitableCommand command)
Invoke the next interceptor, possibly with a new command.<C extends org.infinispan.commands.VisitableCommand>
java.lang.ObjectinvokeNextAndExceptionally(InvocationContext ctx, C command, InvocationExceptionFunction<C> function)
Invoke the next interceptor, possibly with a new command, and execute anInvocationCallback
after all the interceptors have finished with an exception.<C extends org.infinispan.commands.VisitableCommand>
java.lang.ObjectinvokeNextAndFinally(InvocationContext ctx, C command, InvocationFinallyAction<C> action)
Invoke the next interceptor, possibly with a new command, and execute anInvocationCallback
after all the interceptors have finished, with or without an exception.<C extends org.infinispan.commands.VisitableCommand>
java.lang.ObjectinvokeNextAndHandle(InvocationContext ctx, C command, InvocationFinallyFunction<C> function)
Invoke the next interceptor, possibly with a new command, and execute anInvocationCallback
after all the interceptors have finished, with or without an exception.<C extends org.infinispan.commands.VisitableCommand>
java.lang.ObjectinvokeNextThenAccept(InvocationContext ctx, C command, InvocationSuccessAction<C> action)
Invoke the next interceptor, possibly with a new command, and execute anInvocationCallback
after all the interceptors have finished successfully.<C extends org.infinispan.commands.VisitableCommand>
java.lang.ObjectinvokeNextThenApply(InvocationContext ctx, C command, InvocationSuccessFunction<C> function)
Invoke the next interceptor, possibly with a new command, and execute anInvocationCallback
after all the interceptors have finished successfully.protected static boolean
isSuccessfullyDone(java.lang.Object maybeStage)
static InvocationStage
makeStage(java.lang.Object rv)
Encode the result of aninvokeNext(InvocationContext, VisitableCommand)
in anInvocationStage
.void
setNextInterceptor(AsyncInterceptor nextInterceptor)
Used internally to set up the interceptor.static java.lang.Object
valueOrException(java.lang.Object rv, java.lang.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 java.lang.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 <C extends org.infinispan.commands.VisitableCommand> java.lang.Object invokeNextThenApply(InvocationContext ctx, C command, InvocationSuccessFunction<C> 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 <C extends org.infinispan.commands.VisitableCommand> java.lang.Object invokeNextThenAccept(InvocationContext ctx, C command, InvocationSuccessAction<C> 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 <C extends org.infinispan.commands.VisitableCommand> java.lang.Object invokeNextAndExceptionally(InvocationContext ctx, C command, InvocationExceptionFunction<C> 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 <C extends org.infinispan.commands.VisitableCommand> java.lang.Object invokeNextAndFinally(InvocationContext ctx, C command, InvocationFinallyAction<C> 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 <C extends org.infinispan.commands.VisitableCommand> java.lang.Object invokeNextAndHandle(InvocationContext ctx, C command, InvocationFinallyFunction<C> 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(java.util.concurrent.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 java.lang.Object asyncInvokeNext(InvocationContext ctx, org.infinispan.commands.VisitableCommand command, java.util.concurrent.CompletionStage<?> delay)
Suspend the invocation untildelay
completes, then if successful invoke the next interceptor.If
delay
is null or already completed normally, immediately invoke the next interceptor in this thread.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 java.lang.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 java.lang.Object asyncInvokeNext(InvocationContext ctx, org.infinispan.commands.VisitableCommand command, java.util.Collection<? extends java.util.concurrent.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 java.lang.Object valueOrException(java.lang.Object rv, java.lang.Throwable throwable) throws java.lang.Throwable
Return the value ifthrowable != null
, throw the exception otherwise.- Throws:
java.lang.Throwable
-
makeStage
public static InvocationStage makeStage(java.lang.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 java.lang.Object delayedValue(java.util.concurrent.CompletionStage<?> stage, java.lang.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 java.lang.Object delayedValue(java.util.concurrent.CompletionStage<?> stage, java.lang.Object syncValue, java.lang.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:
-
delayedNull
public static java.lang.Object delayedNull(java.util.concurrent.CompletionStage<java.lang.Void> stage)
The same asdelayedValue(CompletionStage, Object)
, except that it is optimizes cases where the return value is null.- Parameters:
stage
- wait for completion of this if not null- Returns:
- invocation stage or null sync value
-
isSuccessfullyDone
protected static boolean isSuccessfullyDone(java.lang.Object maybeStage)
-
-