Class VCacheRequestContextManager

  • All Implemented Interfaces:
    VCacheRequestContextOperations

    public class VCacheRequestContextManager
    extends Object
    implements VCacheRequestContextOperations
    An implementation of VCacheRequestContextOperations which provides a simple interface to client code. This class provides a single doInRequestContext(Action) method which handles the thread-local init/clear semantics internally.

    Additionally, calls to the doInRequestContext(Action) method can be nested, allowing different levels of client code to ensure that the request context is initialized without worrying about whether or not it's already been done further up the call stack.

    If getCurrentRequestContext() ()} is invoked outside of the context of doInRequestContext(Action), then this class will return a RequestContext which stubs out method calls, and which remembers no data. The RequestContext.partitionIdentifier() of this object will be the same "fallback" identifier passed as an argument to this class's constructor, and represents the "unknown tenant" state of code that hasn't initialised the context properly.

    Since:
    5.10
    • Constructor Detail

      • VCacheRequestContextManager

        public VCacheRequestContextManager​(String defaultPartitionIdentifier)
    • Method Detail

      • doInRequestContext

        public <T,​X extends Throwable> T doInRequestContext​(VCacheRequestContextOperations.Action<T,​X> action)
                                                           throws X extends Throwable
        Executes the supplied action callback within a VCache RequestContext, using the system default partition identifier.
        Specified by:
        doInRequestContext in interface VCacheRequestContextOperations
        Type Parameters:
        T - the return type of the callback
        X - the exception type thrown by the callback
        Parameters:
        action - the callback to be executed within the request context
        Returns:
        the value returned by the callback
        Throws:
        X - the exception thrown by the callback
        X extends Throwable
      • doInRequestContext

        @Deprecated
        public <T,​X extends Throwable> T doInRequestContext​(String partitionIdentifer,
                                                                  VCacheRequestContextOperations.Action<T,​X> action)
                                                           throws X extends Throwable
        Deprecated.
        since 6.0. Partitions are not supported in Confluence Server
        Executes the supplied action callback within a VCache RequestContext. If no request context is bound to the current thread, then one will be set up with the supplied partition identifier. Calls to this method may be nested. Nested calls will re-use the existing context bound by the first call. Nested calls must supply the same partition identifier as the first call.
        Specified by:
        doInRequestContext in interface VCacheRequestContextOperations
        Type Parameters:
        T - the return type of the callback
        X - the exception type thrown by the callback
        Parameters:
        partitionIdentifer - the partition identifier that will be used to create new request context, if necessary
        action - the callback to be executed within the request context
        Returns:
        the value returned by the callback
        Throws:
        X - the exception thrown by the callback
        X extends Throwable
      • initRequestContext

        public @NonNull Runnable initRequestContext()
        Initialises the request context for the current thread, re-using any exist context if one is present.
        Returns:
        A Runnable that should be invoked to clear up the context. It is the callers job to ensure this is invoked at the appropriate time. Most callers should instead use the more foolproof VCacheRequestContextOperations.doInRequestContext(Runnable)