Interface ThreadContextProvider
-
public interface ThreadContextProvider
Third party providers of thread context implement this interface to enable the provided type of context to participate in thread context capture and propagation when the
ManagedExecutor
andThreadContext
are used to create and contextualize dependent actions and tasks.Application code must never access the classes within this
spi
package. Instead, application code uses theManagedExecutor
andThreadContext
interfaces.The
ThreadContextProvider
implementation and related classes are packaged within the third party provider's JAR file. The implementation is made discoverable via the standardServiceLoader
mechanism. The JAR file that packages it must include a file of the following name and location,META-INF/services/org.eclipse.microprofile.context.spi.ThreadContextProvider
The content of the aforementioned file must be one or more lines, each specifying the fully qualified name of a
ThreadContextProvider
implementation that is provided within the JAR file.ManagedExecutor
andThreadContext
must use theServiceLoader
to identify all available implementations ofThreadContextProvider
that can participate in thread context capture and propagation and must invoke them either to capture current thread context or establish default thread context per the configuration of theManagedExecutor
orThreadContext
instance wherever these interfaces are used to create and contextualize dependent actions and tasks.
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description ThreadContextSnapshot
clearedContext(java.util.Map<java.lang.String,java.lang.String> props)
Returns empty/cleared context of the provided type.ThreadContextSnapshot
currentContext(java.util.Map<java.lang.String,java.lang.String> props)
Captures from the current thread a snapshot of the provided thread context type.java.lang.String
getThreadContextType()
Returns a human readable identifier for the type of thread context that is captured by thisThreadContextProvider
implementation.
-
-
-
Method Detail
-
currentContext
ThreadContextSnapshot currentContext(java.util.Map<java.lang.String,java.lang.String> props)
Captures from the current thread a snapshot of the provided thread context type.- Parameters:
props
- provided for compatibility with EE Concurrency spec, which allows for specifying a set of 'execution properties' when capturing thread context. Thread context providers that don't supply or use execution properties can ignore this parameter.- Returns:
- immutable snapshot of the provided type of context, captured from the current thread.
- Throws:
java.lang.IllegalStateException
- theTransaction
context provider may raise this exception if it chooses not to support the optional capability of propagating Transaction context across threads. This exception flows back to the application when the application invokes an operation that captures context, such asrunAsync
,withContextCapture
, andcontextualFunction
.
-
clearedContext
ThreadContextSnapshot clearedContext(java.util.Map<java.lang.String,java.lang.String> props)
Returns empty/cleared context of the provided type. This context is not captured from the current thread, but instead represents the behavior that you get for this context type when no particular context has been applied to the thread.
This is used in cases where the provided type of thread context should not be propagated from the requesting thread or inherited from the thread of execution, in which case it is necessary to establish an empty/cleared context in its place, so that an action does not unintentionally inherit context of the thread that happens to run it.
For example, a security context provider's empty/cleared context ensures there is no authenticated user on the thread. A transaction context provider's empty/cleared context ensures that any active transaction is suspended. And so forth.
- Parameters:
props
- provided for compatibility with EE Concurrency spec, which allows for specifying a set of 'execution properties'. Thread context providers that don't supply or use execution properties can ignore this parameter.- Returns:
- immutable empty/default context of the provided type.
-
getThreadContextType
java.lang.String getThreadContextType()
Returns a human readable identifier for the type of thread context that is captured by this
ThreadContextProvider
implementation.To ensure portability of applications, this will typically be a keyword that is defined by the same specification that defines the thread context type, or by a related MicroProfile specification.
The
ThreadContext
interface defines constants for some commonly used thread context types, including Application, Security, Transaction, and CDI.The application can use the values documented for the various thread context types when configuring a
ManagedExecutor
orThreadContext
to capture and propagate only specific types of thread context.For example:
ManagedExecutor executor = ManagedExecutor.builder() .propagated(ThreadContext.CDI) .cleared(ThreadContext.ALL_REMAINING) .build();
It is an error for multiple thread context providers of identical type to be simultaneously available (for example, two providers of
CDI
context found on theServiceLoader
). If this is found to be the case,ManagedExecutor
andThreadContext
must fail to inject.- Returns:
- identifier for the provided type of thread context.
-
-