ThreadLocalContextProvider.java
- /*
- * @copyright defined in LICENSE.txt
- */
- package hera;
- import static org.slf4j.LoggerFactory.getLogger;
- import hera.annotation.ApiAudience;
- import hera.annotation.ApiStability;
- import org.slf4j.Logger;
- @ApiAudience.Private
- @ApiStability.Unstable
- public class ThreadLocalContextProvider implements ContextProvider {
- protected final Logger logger = getLogger(getClass());
- protected final Object cabinetKey;
- protected Context baseContext;
- public ThreadLocalContextProvider(final Context baseContext, final Object cabinetKey) {
- this.baseContext = baseContext;
- this.cabinetKey = cabinetKey;
- }
- @Override
- public Context get() {
- final Context context = ContextHolder.get(cabinetKey);
- if (context.equals(EmptyContext.getInstance())) {
- logger.debug("Context in current thread is empty. Set context from base: {}",
- this.baseContext);
- ContextHolder.set(cabinetKey, this.baseContext);
- }
- return ContextHolder.get(cabinetKey);
- }
- @Override
- public void put(final Context context) {
- this.baseContext = context;
- ContextHolder.set(cabinetKey, context);
- }
- }