io.quarkus.smallrye.context.runtime.SmallRyeContextPropagationRecorder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of quarkus-smallrye-context-propagation Show documentation
Show all versions of quarkus-smallrye-context-propagation Show documentation
Propagate contexts between managed threads in reactive applications
package io.quarkus.smallrye.context.runtime;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.function.Supplier;
import org.eclipse.microprofile.context.ThreadContext;
import org.eclipse.microprofile.context.spi.ContextManagerExtension;
import org.eclipse.microprofile.context.spi.ContextManagerProvider;
import org.eclipse.microprofile.context.spi.ThreadContextProvider;
import io.quarkus.arc.Arc;
import io.quarkus.runtime.annotations.Recorder;
import io.smallrye.context.SmallRyeContextManager;
import io.smallrye.context.SmallRyeContextManagerProvider;
import io.smallrye.context.SmallRyeManagedExecutor;
import io.smallrye.context.SmallRyeThreadContext;
/**
* The runtime value service used to create values related to the MP-JWT services
*/
@Recorder
public class SmallRyeContextPropagationRecorder {
private static SmallRyeContextManager.Builder builder;
public void configureStaticInit(List discoveredProviders,
List discoveredExtensions) {
// build the manager at static init time
// in the live-reload mode, the provider instance may be already set in the previous start
if (ContextManagerProvider.INSTANCE.get() == null) {
ContextManagerProvider contextManagerProvider = new SmallRyeContextManagerProvider();
ContextManagerProvider.register(contextManagerProvider);
}
// do what config we can here, but we need the runtime executor service to finish
builder = (SmallRyeContextManager.Builder) ContextManagerProvider.instance()
.getContextManagerBuilder();
builder.withThreadContextProviders(discoveredProviders.toArray(new ThreadContextProvider[0]));
builder.withContextManagerExtensions(discoveredExtensions.toArray(new ContextManagerExtension[0]));
}
public void configureRuntime(ExecutorService executorService) {
// associate the static init manager to the runtime CL
ContextManagerProvider contextManagerProvider = ContextManagerProvider.instance();
// finish building our manager
builder.withDefaultExecutorService(executorService);
SmallRyeContextManager contextManager = builder.build();
contextManagerProvider.registerContextManager(contextManager, Thread.currentThread().getContextClassLoader());
}
public Supplier
© 2015 - 2025 Weber Informatics LLC | Privacy Policy