All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jakarta.enterprise.concurrent.spi.ThreadContextProvider Maven / Gradle / Ivy

/*
 * Copyright (c) 2021 Contributors to the Eclipse Foundation
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0, which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the
 * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
 * version 2 with the GNU Classpath Exception, which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 */
package jakarta.enterprise.concurrent.spi;

import java.util.Map;

/**
 * Third party providers of thread context implement this interface to
 * participate in thread context capture and propagation.
 * 

* Application code must never access the classes within this {@code spi} * package. Instead, application code uses the various interfaces that are defined * by the Jakarta Concurrency specification, such as * {@link jakarta.enterprise.concurrent.ManagedExecutorService ManagedExecutorService} * and {@link jakarta.enterprise.concurrent.ContextService ContextService}. *

* The {@code ThreadContextProvider} implementation and related classes are * packaged within the third party provider's JAR file. The implementation is made * discoverable via the {@link java.util.ServiceLoader ServiceLoader} mechanism. The JAR file * that packages it must include a file with the following name and location, *

* {@code META-INF/services/jakarta.enterprise.concurrent.spi.ThreadContextProvider} *

* The content of the aforementioned file must be one or more lines, each specifying * the fully qualified name of a {@code ThreadContextProvider} implementation * that is provided within the JAR file. *

* The Jakarta EE Product Provider must use the * {@code ServiceLoader} to identify all available implementations of * {@code ThreadContextProvider} 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 the * {@link jakarta.enterprise.concurrent.ContextServiceDefinition ContextServiceDefinition}, * or vendor-specific configuration, and execution properties such as * {@link jakarta.enterprise.concurrent.ManagedTask#TRANSACTION ManagedTask.TRANSACTION} * that override context propagation configuration. * * @since 3.0 */ public interface ThreadContextProvider { /** * Captures from the current thread a snapshot of the provided thread context type. * * @param props execution properties, which are optionally provided * by some types of tasks and contextual proxies. * Thread context providers that do not supply or use execution properties * can ignore this parameter. * @return immutable snapshot of the provided type of context, captured from the * current thread. */ public ThreadContextSnapshot currentContext(Map 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. * * @param props execution properties, which are optionally provided * by some types of tasks and contextual proxies. * Thread context providers that do not supply or use execution properties * can ignore this parameter. * @return immutable empty/default context of the provided type. */ public ThreadContextSnapshot clearedContext(Map props); /** * Returns a human readable identifier for the type of thread context that is * captured by this {@code ThreadContextProvider} implementation. *

* To ensure portability of applications, this is typically be a keyword that * is defined by the same specification that defines the thread context type. *

* {@link jakarta.enterprise.concurrent.ContextServiceDefinition ContextServiceDefinition} * defines identifiers for built-in thread context types, including * {@link jakarta.enterprise.concurrent.ContextServiceDefinition#APPLICATION Application}, * {@link jakarta.enterprise.concurrent.ContextServiceDefinition#SECURITY Security}, and * {@link jakarta.enterprise.concurrent.ContextServiceDefinition#TRANSACTION Transaction}, * as well as the * {@link jakarta.enterprise.concurrent.ContextServiceDefinition#ALL_REMAINING Remaining} * identifer which covers all remaining context. * These identifiers must not be returned from this method. *

* Applications use a combination of built-in identifiers and those that are * defined by other specifications and third-party context * types when configuring a {@code ContextServiceDefinition} * to capture and propagate only specific types of thread context. *

* For example: *

     * {@code @ContextServiceDefinition(}
     *    name = "java:module/concurrent/MyCustomContext",
     *    propagated = MyCustomContextProvider.CONTEXT_NAME,
     *    cleared = { ContextServiceDefinition.SECURITY, ContextServiceDefinition.TRANSACTION },
     *    unchanged = ContextServiceDefinition.ALL_REMAINING)
     * 
*

* It is an error for multiple thread context providers of an identical type to be * simultaneously available. * * @return identifier for the provided type of thread context. */ public String getThreadContextType(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy