Interface AsyncInterceptorChain

All Known Implementing Classes:
EmptyAsyncInterceptorChain

@Experimental public interface AsyncInterceptorChain
Interceptor chain using AsyncInterceptors. Experimental: The ability to modify the interceptors at runtime may be removed in future versions.
Since:
9.0
Author:
Dan Berindei
  • Method Details

    • getInterceptors

      List<AsyncInterceptor> getInterceptors()
      Returns:
      An immutable list of the current interceptors.
    • addInterceptor

      void addInterceptor(AsyncInterceptor interceptor, int position)
      Inserts the given interceptor at the specified position in the chain (0 based indexing).
      Throws:
      IllegalArgumentException - if the position is invalid (e.g. 5 and there are only 2 interceptors in the chain)
    • removeInterceptor

      void removeInterceptor(int position)
      Removes the interceptor at the given position.
      Throws:
      IllegalArgumentException - if the position is invalid (e.g. 5 and there are only 2 interceptors in the chain)
    • size

      int size()
      Returns the number of interceptors in the chain.
    • removeInterceptor

      void removeInterceptor(Class<? extends AsyncInterceptor> clazz)
      Removes all the occurrences of supplied interceptor type from the chain.
    • addInterceptorAfter

      boolean addInterceptorAfter(AsyncInterceptor toAdd, Class<? extends AsyncInterceptor> afterInterceptor)
      Adds a new interceptor in list after an interceptor of a given type.
      Returns:
      true if the interceptor was added; i.e. the afterInterceptor exists
    • addInterceptorBefore

      boolean addInterceptorBefore(AsyncInterceptor toAdd, Class<? extends AsyncInterceptor> beforeInterceptor)
      Adds a new interceptor in list before an interceptor of a given type.
      Returns:
      true if the interceptor was added; i.e. the beforeInterceptor exists
    • replaceInterceptor

      boolean replaceInterceptor(AsyncInterceptor replacingInterceptor, Class<? extends AsyncInterceptor> toBeReplacedInterceptorType)
      Replaces an existing interceptor of the given type in the interceptor chain with a new interceptor instance passed as parameter.
      Parameters:
      replacingInterceptor - the interceptor to add to the interceptor chain
      toBeReplacedInterceptorType - the type of interceptor that should be swapped with the new one
      Returns:
      true if the interceptor was replaced
    • appendInterceptor

      void appendInterceptor(AsyncInterceptor ci, boolean isCustom)
      Appends at the end.
    • invoke

      Object invoke(InvocationContext ctx, VisitableCommand command)
      Walks the command through the interceptor chain. The received ctx is being passed in.

      Note: Reusing the context for multiple invocations is allowed, however most context implementations are not thread-safe.

    • invokeAsync

      Walks the command through the interceptor chain. The received ctx is being passed in.

      Note: Reusing the context for multiple invocations is allowed, however most context implementations are not thread-safe.

    • invokeStage

      Walks the command through the interceptor chain. The received ctx is being passed in.

      Note: Reusing the context for multiple invocations is allowed, however most context implementations are not thread-safe.

    • findInterceptorExtending

      <T extends AsyncInterceptor> T findInterceptorExtending(Class<T> interceptorClass)
      Returns the first interceptor extending the given class, or null if there is none.
    • findInterceptorWithClass

      <T extends AsyncInterceptor> T findInterceptorWithClass(Class<T> interceptorClass)
      Returns the first interceptor with the given class, or null if there is none.
    • containsInstance

      boolean containsInstance(AsyncInterceptor interceptor)
      Checks whether the chain contains the supplied interceptor instance.
    • containsInterceptorType

      boolean containsInterceptorType(Class<? extends AsyncInterceptor> interceptorType)
      Checks whether the chain contains an interceptor with the given class.
    • containsInterceptorType

      boolean containsInterceptorType(Class<? extends AsyncInterceptor> interceptorType, boolean alsoMatchSubClasses)
      Checks whether the chain contains an interceptor with the given class, or a subclass.