
org.infinispan.query.backend.QueryKnownClasses Maven / Gradle / Ivy
Show all versions of infinispan-embedded-query
package org.infinispan.query.backend;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
import javax.transaction.Transaction;
import org.infinispan.AdvancedCache;
import org.infinispan.Cache;
import org.infinispan.commons.CacheException;
import org.infinispan.configuration.cache.CacheMode;
import org.infinispan.configuration.cache.Configuration;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.context.Flag;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.registry.InternalCacheRegistry;
import org.infinispan.remoting.transport.jgroups.SuspectException;
import org.infinispan.transaction.TransactionMode;
import org.infinispan.util.KeyValuePair;
import org.infinispan.util.logging.Log;
import org.infinispan.util.logging.LogFactory;
import net.jcip.annotations.ThreadSafe;
// TODO [anistor] This class must be removed in 10.0 after we remove autodetection.
/**
* Stores all entity classes known to query module in a replicated cache. The entry value is a boolean which indicates
* if the type is indexable. The key is a KeyValuePair composed of the cache name and the class. This cache is 'append only'.
*
* Write operations are expected to happen only exceptionally, therefore this code
* is heavily optimized for reads (at cost of writes).
* Also we're assuming all entries are small: there is no size limit nor cleanup strategy.
*
* This is not caching the fact that some key is not defined: that would be tricky to
* get right and is not needed for our use case.
*
* @author Sanne Grinovero (C) 2013 Red Hat Inc.
* @author [email protected]
* @deprecated To be removed in Infinispan 10.0
*/
@ThreadSafe
@Deprecated
public final class QueryKnownClasses {
private static final Log log = LogFactory.getLog(QueryKnownClasses.class);
public static final String QUERY_KNOWN_CLASSES_CACHE_NAME = "___query_known_classes";
private final Set> indexedEntities;
private final String cacheName;
private final EmbeddedCacheManager cacheManager;
private final InternalCacheRegistry internalCacheRegistry;
private volatile SearchFactoryHandler searchFactoryHandler;
/**
* A replicated cache that is lazily instantiated on first access.
*/
private volatile AdvancedCache>, Boolean> knownClassesCache;
private volatile TransactionHelper transactionHelper;
/**
* A second level cache. Not using a ConcurrentHashMap as this will degenerate into a read-only Map at runtime;
* in the Query specific case we're only adding new class types while they are being discovered,
* after this initial phase this is supposed to be a read-only immutable map.
*/
private final AtomicReference