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 Detail

      • 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

        CompletableFuture<Object> invokeAsync​(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.

      • invokeStage

        InvocationStage invokeStage​(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.

      • 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.