private void updateSearchFactory(final Class<?>... classes) { mutating.lock(); try { //Need to re-filter the new types while holding the lock final List<Class<?>> reducedSet = new ArrayList<>(classes.length); for (Class<?> type : classes) { if (!hasIndex(type)) { reducedSet.add(type); } } if (reducedSet.isEmpty()) { return; } final Class<?>[] newtypes = reducedSet.toArray(new Class<?>[reducedSet.size()]); Transaction tx = transactionHelper.suspendTxIfExists(); try { searchFactory.addClasses(newtypes); } finally { transactionHelper.resume(tx); } for (Class<?> type : newtypes) { if (hasIndex(type)) { log.detectedUnknownIndexedEntity(queryKnownClasses.getCacheName(), type.getName()); } } } finally { mutating.unlock(); } }
private void updateSearchFactory(final Class<?>... classes) { mutating.lock(); try { //Need to re-filter the new types while holding the lock final List<Class<?>> reducedSet = new ArrayList<>(classes.length); for (Class<?> type : classes) { if (!hasIndex(type)) { reducedSet.add(type); } } if (reducedSet.isEmpty()) { return; } final Class<?>[] newtypes = reducedSet.toArray(new Class<?>[reducedSet.size()]); Transaction tx = transactionHelper.suspendTxIfExists(); try { searchFactory.addClasses(newtypes); } finally { transactionHelper.resume(tx); } for (Class<?> type : newtypes) { if (hasIndex(type)) { log.detectedUnknownIndexedEntity(queryKnownClasses.getCacheName(), type.getName()); } } } finally { mutating.unlock(); } }
searchFactory.addClasses(indexedEntities); checkIndexableClasses(searchFactory, indexingConfiguration.indexedEntities());
searchFactory.addClasses(indexedEntities); checkIndexableClasses(searchFactory, indexingConfiguration.indexedEntities());
@Override public void run() { try { String name = "Emmanuel" + index; final Class<?> aClass = MutableFactoryTest.getClassByNumber( index, searchIntegrator.getServiceManager() ); System.err.println( "Creating index #" + index + " for class " + aClass ); searchIntegrator.addClasses( aClass ); Object entity = aClass.getConstructor( Integer.class, String.class ) .newInstance( index, name ); helper.index( entity, index ); EntityIndexBinding indexBindingForEntity = searchIntegrator.getIndexBindings().get( aClass ); assertNotNull( indexBindingForEntity ); Set<IndexManager> indexManagers = indexBindingForEntity.getIndexManagerSelector().all(); assertEquals( 1, indexManagers.size() ); helper.assertThat( "name", "emmanuel" + index ) .from( aClass ) .hasResultSize( 1 ); } catch (ClassNotFoundException | InvocationTargetException | NoSuchMethodException | IllegalAccessException | InstantiationException e) { throw new IllegalStateException( "Unexpected exception while manipulating dynamically created classes", e ); } } }
@Test public void notForgettingDefinedFilters() { SearchIntegrator sf = integratorResource.create( new SearchConfigurationForTest().addClass( A.class ) ); int defaultFilterCount = countFilters( sf ); sf.addClasses( B.class ); assertEquals( defaultFilterCount + 1, countFilters( sf ) ); assertTrue( filterExists( sf, "anyFilter" ) ); sf.addClasses( C.class ); assertEquals( defaultFilterCount + 2, countFilters( sf ) ); assertTrue( filterExists( sf, "anyFilter" ) ); assertTrue( filterExists( sf, "anotherFilter" ) ); }
@Test public void notForgettingDefinedAnalyzers() { SearchIntegrator sf = integratorResource.create( new SearchConfigurationForTest().addClass( A.class ) ); int defaultAnalyzerCount = countAnalyzers( sf ); sf.addClasses( B.class ); assertEquals( defaultAnalyzerCount + 1, countAnalyzers( sf ) ); assertTrue( analyzerExists( sf, "anAnalyzer" ) ); sf.addClasses( C.class ); assertEquals( defaultAnalyzerCount + 2, countAnalyzers( sf ) ); assertTrue( analyzerExists( sf, "anAnalyzer" ) ); assertTrue( analyzerExists( sf, "anotherAnalyzer" ) ); }
@Test public void testAddingClassSimpleAPI() throws Exception { searchIntegrator = integratorResource.create( new SearchConfigurationForTest() ); searchIntegrator.addClasses( A.class ); helper.index( new A( 1, "Emmanuel" ), 1 ); helper.assertThat( "name", "emmanuel" ) .from( A.class ) .hasResultSize( 1 ); searchIntegrator.addClasses( B.class, C.class ); helper.index() .push( new B( 1, "Noel" ), 1 ) .push( new C( 1, "Vincent" ), 1 ) .execute(); helper.assertThat( "name", "noel" ) .from( B.class ) .hasResultSize( 1 ); helper.assertThat( "name", "vincent" ) .from( C.class ) .hasResultSize( 1 ); }
assertEquals( 1 , searchIntegrator.getStatistics().getIndexedClassNames().size() ); searchIntegrator.addClasses( B.class, C.class );
private void verifyIndexManagerTypeIs(Class<? extends IndexManager> expectedIndexManagerClass, SearchConfigurationForTest cfg) { SearchMapping mapping = new SearchMapping(); mapping .entity( Document.class ).indexed().indexName( "documents" ) .property( "id", ElementType.FIELD ).documentId() .property( "title", ElementType.FIELD ).field(); cfg.setProgrammaticMapping( mapping ); cfg.addClass( Document.class ); SearchIntegrator sf = integratorResource.create( cfg ); Assert.assertEquals( expectedIndexManagerClass, extractDocumentIndexManagerClassName( sf, "documents" ) ); // trigger a SearchFactory rebuild: sf.addClasses( Dvd.class ); // and verify the option is not lost: Assert.assertEquals( expectedIndexManagerClass, extractDocumentIndexManagerClassName( sf, "dvds" ) ); Assert.assertEquals( expectedIndexManagerClass, extractDocumentIndexManagerClassName( sf, "documents" ) ); }