package org.infinispan.cdi.embedded;
import java.util.Collection;
import org.infinispan.Cache;
import org.infinispan.distexec.DistributedExecutorService;
/**
* ContextInputCache keeps track of {@link Input} cache to be injected into Callables from
* {@link DistributedExecutorService} using CDI
* mechanism. The cache injected will be the cache used to construct
* {@link DistributedExecutorService}
*
* @author Vladimir Blagoejvic
* @since 5.2
* @see InfinispanExtensionEmbedded#registerInputCacheCustomBean(javax.enterprise.inject.spi.AfterBeanDiscovery,
* javax.enterprise.inject.spi.BeanManager)
*
*/
public class ContextInputCache {
/*
* Using thread local was the last choice. See https://issues.jboss.org/browse/ISPN-2181 for more
* details and design decisions made
*/
private static ThreadLocal<Cache<?, ?>> contextualCache = new ThreadLocal<Cache<?, ?>>();
private static ThreadLocal<Collection<?>> contextualKeys = new ThreadLocal<>();
public static <K, V> void set(Cache<K, V> input) {
contextualCache.set(input);
}
@SuppressWarnings("unchecked")
public static <K, V> Cache<K, V> get() {
return (Cache<K, V>) contextualCache.get();
}
public static <K> void setKeys(Collection<K> inputKeys) {
contextualKeys.set(inputKeys);
}
public static <K> Collection<K> getKeys(){
return (Collection<K>) contextualKeys.get();
}
public static void clean() {
contextualCache.remove();
contextualKeys.remove();
}
}