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); } } }
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); } } }
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 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"); }
@Test public void testWithoutAutoConfig() { IndexingConfiguration cfg = new ConfigurationBuilder() .indexing().index(Index.ALL).create(); assertTrue(cfg.properties().isEmpty()); }
@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"); }
@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"); }
Properties indexingProperties = indexingConfiguration.properties(); if (hasInfinispanDirectory(indexingProperties)) { String metadataCacheName = getMetadataCacheName(indexingProperties);
Properties indexingProperties = indexingConfiguration.properties(); if (hasInfinispanDirectory(indexingProperties)) { String metadataCacheName = getMetadataCacheName(indexingProperties);
@Override public void call() { Configuration cacheConfiguration = cm.getCacheConfiguration("repl-with-default"); TypedProperties properties = cacheConfiguration.indexing().properties(); assertFalse(properties.isEmpty()); assertEquals(properties.getProperty("hibernate.search.default.exclusive_index_use"), "true"); assertEquals(properties.getProperty("hibernate.search.default.reader.strategy"), "shared"); assertEquals(properties.getProperty("hibernate.search.default.indexmanager"), "near-real-time"); assertEquals(properties.getProperty("hibernate.search.default.directory_provider"), "filesystem"); cacheConfiguration = cm.getCacheConfiguration("dist-with-default"); properties = cacheConfiguration.indexing().properties(); assertFalse(properties.isEmpty()); assertEquals(properties.getProperty("hibernate.search.default.directory_provider"), "infinispan"); assertEquals(properties.getProperty("hibernate.search.default.indexmanager"), "org.infinispan.query.indexmanager.InfinispanIndexManager"); assertEquals(properties.getProperty("hibernate.search.default.exclusive_index_use"), "true"); assertEquals(properties.getProperty("hibernate.search.default.reader.strategy"), "shared"); } });
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 testOverride() { String override = "hibernate.search.default.exclusive_index_use"; IndexingConfiguration cfg = new ConfigurationBuilder() .indexing() .index(Index.ALL) .autoConfig(true) .addProperty(override, "false").create(); assertEquals(cfg.properties().get(override), "false"); }
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()); }
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"); assertEquals(simpleCfg.indexing().properties().size(), 2); assertEquals(memoryCfg.indexing().properties().size(), 2); assertEquals(memoryCfg.indexing().properties().getProperty("hibernate.search.default.directory_provider"), "local-heap"); 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");
public void testPropertyMutabilityInInheritance() { ConfigurationBuilder builder = new ConfigurationBuilder(); builder.indexing().autoConfig(true).addProperty("key", "value"); Configuration configuration = builder.build(); try { configuration.indexing().properties().setProperty("anotherKey", "anotherValue"); fail("Expecting unmodifiable properties"); } catch (UnsupportedOperationException e) { // expected } ConfigurationBuilder derived = new ConfigurationBuilder(); derived.read(configuration); builder.indexing().addProperty("anotherKey", "anotherValue"); } }