private static void ensureIndexed(Cache<?, ?> cache) { Configuration cfg = SecurityActions.getCacheConfiguration(cache); if (!cfg.indexing().index().isEnabled()) { throw new IllegalStateException("Indexing was not enabled on cache " + cache.getName()); } }
Configuration configuration = cr.getComponent(Configuration.class); IndexingConfiguration indexingConfiguration = configuration.indexing(); if (!indexingConfiguration.index().isEnabled()) { if (verifyChainContainsQueryInterceptor(cr)) { throw new IllegalStateException("It was NOT expected to find the Query interceptor registered in the InterceptorChain as indexing was disabled, but it was found"); if (!indexingConfiguration.indexedEntities().isEmpty()) { Properties indexingProperties = indexingConfiguration.properties(); if (hasInfinispanDirectory(indexingProperties)) { String metadataCacheName = getMetadataCacheName(indexingProperties); if (cacheName.equals(dataCacheName) && (cacheName.equals(metadataCacheName) || cacheName.equals(lockingCacheName))) { Class<?>[] indexedEntities = indexingConfiguration.indexedEntities().toArray(new Class<?>[indexingConfiguration.indexedEntities().size()]); searchFactory.addClasses(indexedEntities); checkIndexableClasses(searchFactory, indexingConfiguration.indexedEntities()); checkIndexableClasses(searchFactory, indexingConfiguration.indexedEntities());
private void addCacheDependencyIfNeeded(String cacheStarting, EmbeddedCacheManager cacheManager, IndexingConfiguration indexingConfiguration) { if (indexingConfiguration.indexedEntities().isEmpty()) { // todo [anistor] remove dependency on QueryKnownClasses in Infinispan 10.0 // indexed classes are autodetected and propagated across cluster via this cache cacheManager.addCacheDependency(cacheStarting, QueryKnownClasses.QUERY_KNOWN_CLASSES_CACHE_NAME); } if (hasInfinispanDirectory(indexingConfiguration.properties())) { String metadataCacheName = getMetadataCacheName(indexingConfiguration.properties()); String lockingCacheName = getLockingCacheName(indexingConfiguration.properties()); String dataCacheName = getDataCacheName(indexingConfiguration.properties()); if (!cacheStarting.equals(metadataCacheName) && !cacheStarting.equals(lockingCacheName) && !cacheStarting.equals(dataCacheName)) { cacheManager.addCacheDependency(cacheStarting, metadataCacheName); cacheManager.addCacheDependency(cacheStarting, lockingCacheName); cacheManager.addCacheDependency(cacheStarting, dataCacheName); } } }
public void testConfigurationFileParsing() throws IOException { ParserRegistry parserRegistry = new ParserRegistry(Thread.currentThread().getContextClassLoader()); ConfigurationBuilderHolder holder = parserRegistry.parseFile("configuration-parsing-test.xml"); Map<String, ConfigurationBuilder> namedConfigurations = holder.getNamedConfigurationBuilders(); Configuration defaultConfiguration = namedConfigurations.get("default").build(); assertEquals(defaultConfiguration.indexing().properties().size(), 0); assertFalse(defaultConfiguration.indexing().index().isEnabled()); Configuration simpleCfg = namedConfigurations.get("simple").build(); assertFalse(simpleCfg.indexing().index().isEnabled()); assertEquals(simpleCfg.indexing().properties().size(), 0); Configuration memoryCfg = namedConfigurations.get("memory-searchable").build(); assertTrue(memoryCfg.indexing().index().isEnabled()); assertEquals(2, memoryCfg.indexing().properties().size()); assertEquals(memoryCfg.indexing().properties().getProperty("default.directory_provider"), "local-heap"); Configuration diskCfg = namedConfigurations.get("disk-searchable").build(); assertTrue(diskCfg.indexing().index().isEnabled()); assertEquals(diskCfg.indexing().properties().size(), 3); assertEquals(diskCfg.indexing().properties().getProperty("hibernate.search.default.directory_provider"), "filesystem"); assertEquals(diskCfg.indexing().properties().getProperty("hibernate.search.cats.exclusive_index_use"), "true"); Configuration replDefaults = namedConfigurations.get("repl-with-default").build(); assertTrue(replDefaults.indexing().index().isEnabled()); assertFalse(replDefaults.indexing().properties().isEmpty()); Configuration affinity = namedConfigurations.get("dist-with-affinity").build(); assertTrue(affinity.indexing().index().isEnabled()); assertTrue(affinity.indexing().index().isPrimaryOwner()); assertEquals(affinity.indexing().properties().getProperty("default.indexmanager"), AffinityIndexManager.class.getName()); }
@Test public void testLocalWitAutoConfig() { IndexingConfiguration cfg = new ConfigurationBuilder() .indexing().index(Index.ALL).autoConfig(true) .create(); assertFalse(cfg.properties().isEmpty()); assertEquals(cfg.properties().get("hibernate.search.default.directory_provider"), "filesystem"); }
@Start protected void start() { Set<Class<?>> indexedEntities = cache.getCacheConfiguration().indexing().indexedEntities(); this.indexedEntities = indexedEntities.isEmpty() ? null : indexedEntities.toArray(new Class<?>[indexedEntities.size()]); queryKnownClasses = indexedEntities.isEmpty() ? new QueryKnownClasses(cache.getName(), cache.getCacheManager(), internalCacheRegistry) : new QueryKnownClasses(indexedEntities); searchFactoryHandler = new SearchFactoryHandler(searchFactory, queryKnownClasses, new TransactionHelper(transactionManager)); if (this.indexedEntities == null) { queryKnownClasses.start(searchFactoryHandler); Set<Class<?>> classes = queryKnownClasses.keys(); Class<?>[] classesArray = classes.toArray(new Class<?>[classes.size()]); //Important to enable them all in a single call, much more efficient: enableClasses(classesArray); } stopping.set(false); }
/** * Default constructor. * * @param manager the Infinispan cache manager. */ public AbstractInfinispanCompoundKeyCacheManager( final EmbeddedCacheManager manager) { this.manager = manager; configManager = new GuavaCacheManager(); manager.getDefaultCacheConfiguration().jmxStatistics(); this.cache = manager.getCache(CACHE_NAME); if (!manager.isRunning(CACHE_NAME)) { final Configuration cacheConfig = this.cache.getCacheConfiguration(); cacheConfig.jmxStatistics(); cacheConfig.indexing().indexLocalOnly(); cache.start(); } // cache.addListener(new CompoundKeyHandlingCacheListener()); cache.clear(); }
compareAttributeSets(name, configurationBefore.memory().attributes(), configurationAfter.memory().attributes()); compareAttributeSets(name, configurationBefore.expiration().attributes(), configurationAfter.expiration().attributes()); compareAttributeSets(name, configurationBefore.indexing().attributes(), configurationAfter.indexing().attributes()); compareAttributeSets(name, configurationBefore.locking().attributes(), configurationAfter.locking().attributes()); compareAttributeSets(name, configurationBefore.persistence().attributes(), configurationAfter.persistence().attributes());
Configuration defaultConfiguration = namedConfigurations.get("default").build(); assertEquals(defaultConfiguration.indexing().properties().size(), 2); assertTrue(defaultConfiguration.indexing().index().isEnabled()); assertEquals(defaultConfiguration.indexing().properties().getProperty("hibernate.search.default.directory_provider"), "someDefault"); assertFalse(nonSearchableCfg.indexing().index().isEnabled()); assertTrue(simpleCfg.indexing().index().isEnabled()); assertEquals(simpleCfg.indexing().properties().size(), 2); assertTrue(memoryCfg.indexing().index().isEnabled()); assertFalse(memoryCfg.indexing().index().isLocalOnly()); assertEquals(memoryCfg.indexing().properties().size(), 2); assertEquals(memoryCfg.indexing().properties().getProperty("hibernate.search.default.directory_provider"), "local-heap"); assertTrue(diskCfg.indexing().index().isEnabled()); assertTrue(diskCfg.indexing().index().isLocalOnly()); assertEquals(diskCfg.indexing().properties().size(), 3); assertEquals(diskCfg.indexing().properties().getProperty("hibernate.search.default.directory_provider"), "filesystem"); assertEquals(diskCfg.indexing().properties().getProperty("hibernate.search.cats.exclusive_index_use"), "true");
private void addCacheDependencyIfNeeded(String cacheStarting, EmbeddedCacheManager cacheManager, IndexingConfiguration indexingConfiguration) { if (indexingConfiguration.indexedEntities().isEmpty()) { // todo [anistor] remove dependency on QueryKnownClasses in Infinispan 10.0 // indexed classes are autodetected and propagated across cluster via this cache cacheManager.addCacheDependency(cacheStarting, QueryKnownClasses.QUERY_KNOWN_CLASSES_CACHE_NAME); } if (hasInfinispanDirectory(indexingConfiguration.properties())) { String metadataCacheName = getMetadataCacheName(indexingConfiguration.properties()); String lockingCacheName = getLockingCacheName(indexingConfiguration.properties()); String dataCacheName = getDataCacheName(indexingConfiguration.properties()); if (!cacheStarting.equals(metadataCacheName) && !cacheStarting.equals(lockingCacheName) && !cacheStarting.equals(dataCacheName)) { cacheManager.addCacheDependency(cacheStarting, metadataCacheName); cacheManager.addCacheDependency(cacheStarting, lockingCacheName); cacheManager.addCacheDependency(cacheStarting, dataCacheName); } } }
@Test public void testWithoutAutoConfig() { IndexingConfiguration cfg = new ConfigurationBuilder() .indexing().index(Index.ALL).create(); assertTrue(cfg.properties().isEmpty()); }
@Start protected void start() { Set<Class<?>> indexedEntities = cacheConfiguration.indexing().indexedEntities(); this.indexedEntities = indexedEntities.isEmpty() ? null : indexedEntities.toArray(new Class<?>[indexedEntities.size()]); queryKnownClasses = indexedEntities.isEmpty() ? new QueryKnownClasses(cache.getName(), cache.getCacheManager(), internalCacheRegistry) : new QueryKnownClasses(cache.getName(), indexedEntities); searchFactoryHandler = new SearchFactoryHandler(searchFactory, queryKnownClasses, new TransactionHelper(cache.getTransactionManager())); if (this.indexedEntities == null) { queryKnownClasses.start(searchFactoryHandler); Set<Class<?>> classes = queryKnownClasses.keys(); Class<?>[] classesArray = classes.toArray(new Class<?>[classes.size()]); //Important to enable them all in a single call, much more efficient: searchFactoryHandler.enableClasses(classesArray); } isPersistenceEnabled = cacheConfiguration.persistence().usingStores(); stopping.set(false); }
/** * For a given configuration, define which IndexModificationStrategy is going to be used. * @param searchFactory * @param cfg * @return the appropriate IndexModificationStrategy */ public static IndexModificationStrategy configuredStrategy(SearchIntegrator searchFactory, Configuration cfg) { IndexingMode indexingMode = searchFactory.unwrap(SearchIntegrator.class).getIndexingMode(); if (indexingMode == IndexingMode.MANUAL) { return MANUAL; } else { if (cfg.indexing().index().isLocalOnly()) { return LOCAL_ONLY; } else if (cfg.indexing().index().isPrimaryOwner()) { return PRIMARY_OWNER; } else { return ALL; } } }
Configuration configuration = cr.getComponent(Configuration.class); IndexingConfiguration indexingConfiguration = configuration.indexing(); if (!indexingConfiguration.index().isEnabled()) { if (verifyChainContainsQueryInterceptor(cr)) { throw new IllegalStateException("It was NOT expected to find the Query interceptor registered in the InterceptorChain as indexing was disabled, but it was found"); if (!indexingConfiguration.indexedEntities().isEmpty()) { Properties indexingProperties = indexingConfiguration.properties(); if (hasInfinispanDirectory(indexingProperties)) { String metadataCacheName = getMetadataCacheName(indexingProperties); if (cacheName.equals(dataCacheName) && (cacheName.equals(metadataCacheName) || cacheName.equals(lockingCacheName))) { Class<?>[] indexedEntities = indexingConfiguration.indexedEntities().toArray(new Class<?>[indexingConfiguration.indexedEntities().size()]); searchFactory.addClasses(indexedEntities); checkIndexableClasses(searchFactory, indexingConfiguration.indexedEntities()); checkIndexableClasses(searchFactory, indexingConfiguration.indexedEntities());
private SearchIntegrator createSearchIntegrator(IndexingConfiguration indexingConfiguration, ComponentRegistry cr, ClassLoader aggregatedClassLoader) { SearchIntegrator searchIntegrator = cr.getComponent(SearchIntegrator.class); if (searchIntegrator != null && !searchIntegrator.isStopped()) { // a paranoid check against an unlikely failure throw new IllegalStateException("SearchIntegrator already initialized!"); } // load ProgrammaticSearchMappingProviders from classpath Collection<ProgrammaticSearchMappingProvider> programmaticSearchMappingProviders = new LinkedHashSet<>(); programmaticSearchMappingProviders.add(new DefaultSearchMappingProvider()); // make sure our DefaultSearchMappingProvider is first programmaticSearchMappingProviders.addAll(ServiceFinder.load(ProgrammaticSearchMappingProvider.class, aggregatedClassLoader)); // load LuceneAnalysisDefinitionProvider from classpath Collection<LuceneAnalysisDefinitionProvider> analyzerDefProviders = ServiceFinder.load(LuceneAnalysisDefinitionProvider.class, aggregatedClassLoader); // Set up the search factory for Hibernate Search first. SearchConfiguration config = new SearchableCacheConfiguration(indexingConfiguration.indexedEntities(), indexingConfiguration.properties(), programmaticSearchMappingProviders, analyzerDefProviders, cr, aggregatedClassLoader); searchIntegrator = new SearchIntegratorBuilder().configuration(config).buildSearchIntegrator(); cr.registerComponent(searchIntegrator, SearchIntegrator.class); return searchIntegrator; }
@Test public void testDistWitAutoConfig() { IndexingConfiguration cfg = new ConfigurationBuilder() .clustering().cacheMode(CacheMode.DIST_SYNC) .indexing().index(Index.ALL).autoConfig(true) .create(); assertFalse(cfg.properties().isEmpty()); assertEquals(cfg.properties().get("hibernate.search.default.directory_provider"), "infinispan"); }
public void testIndexedConfigurationInheritance() { Configuration configuration = cacheManager.getCacheConfiguration("default"); Set<Class<?>> indexedEntities = configuration.indexing().indexedEntities(); assertEquals(1, indexedEntities.size()); assertTrue(indexedEntities.contains(Book.class)); configuration = cacheManager.getCacheConfiguration("extended"); indexedEntities = configuration.indexing().indexedEntities(); assertEquals(2, indexedEntities.size()); assertTrue(indexedEntities.contains(Book.class)); assertTrue(indexedEntities.contains(AnotherGrassEater.class)); }
/** * For a given configuration, define which IndexModificationStrategy is going to be used. * @param searchFactory * @param cfg * @return the appropriate IndexModificationStrategy */ public static IndexModificationStrategy configuredStrategy(SearchIntegrator searchFactory, Configuration cfg) { IndexingMode indexingMode = searchFactory.unwrap(SearchIntegrator.class).getIndexingMode(); if (indexingMode == IndexingMode.MANUAL) { return MANUAL; } else { if (cfg.indexing().index().isLocalOnly()) { return LOCAL_ONLY; } else if (cfg.indexing().index().isPrimaryOwner()) { return PRIMARY_OWNER; } else { return ALL; } } }
private SearchIntegrator getSearchFactory(String cacheName, IndexingConfiguration indexingConfiguration, ComponentRegistry cr) { Object component = cr.getComponent(SearchIntegrator.class); SearchIntegrator searchFactory = null; if (component instanceof SearchIntegrator) { //could be the placeholder Object REMOVED_REGISTRY_COMPONENT searchFactory = (SearchIntegrator) component; } //defend against multiple initialization: if (searchFactory == null) { GlobalComponentRegistry globalComponentRegistry = cr.getGlobalComponentRegistry(); EmbeddedCacheManager uninitializedCacheManager = globalComponentRegistry.getComponent(EmbeddedCacheManager.class); Properties indexingProperties = addProgrammaticMappings(indexingConfiguration.properties(), cr); Class<?>[] indexedEntities = indexingConfiguration.indexedEntities().toArray(new Class<?>[indexingConfiguration.indexedEntities().size()]); if (indexedEntities.length > 0 && hasInfinispanDirectory(indexingProperties)) { String metadataCacheName = getMetadataCacheName(indexingProperties); String lockingCacheName = getLockingCacheName(indexingProperties); String dataCacheName = getDataCacheName(indexingProperties); if (cacheName.equals(dataCacheName) || cacheName.equals(metadataCacheName) || cacheName.equals(lockingCacheName)) { // Infinispan Directory causes runtime circular dependencies so we need to postpone creation of indexes until all components are initialised indexedEntities = new Class[0]; } } allowDynamicSortingByDefault(indexingProperties); // Set up the search factory for Hibernate Search first. SearchConfiguration config = new SearchableCacheConfiguration(indexedEntities, indexingProperties, uninitializedCacheManager, cr); searchFactory = new SearchIntegratorBuilder().configuration(config).buildSearchIntegrator(); cr.registerComponent(searchFactory, SearchIntegrator.class); } return searchFactory; }
@Test public void testIndexingParametersForNamedCache() { Cache<Object, Object> inMemory = manager.getCache("memory-searchable"); inMemory.start(); assertFalse(inMemory.getCacheConfiguration().indexing().properties().isEmpty(), "should contain definition from xml"); }