if (!indexingConfiguration.indexedEntities().isEmpty()) { Properties indexingProperties = indexingConfiguration.properties(); if (hasInfinispanDirectory(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());
if (!indexingConfiguration.indexedEntities().isEmpty()) { Properties indexingProperties = indexingConfiguration.properties(); if (hasInfinispanDirectory(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());
@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); }
@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); }
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; }
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)); }
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 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; }