#4761 updating means to obtain the IndexManager to new hibernate search api and exten... attic/shelves/cdmlib/a.kohlbecker/26768
authorAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Fri, 4 Dec 2015 16:07:34 +0000 (17:07 +0100)
committerAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Fri, 4 Dec 2015 17:01:35 +0000 (18:01 +0100)
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/search/CdmMassIndexer.java
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/TaxonServiceSearchTest.java

index 728bcb5a434cf765b4829a1a4de2d74581ab310b..51fd416c924ec6edc62de044e423cb8564224eb6 100644 (file)
@@ -36,6 +36,7 @@ import org.hibernate.search.Search;
 import org.hibernate.search.SearchFactory;
 import org.hibernate.search.indexes.spi.DirectoryBasedIndexManager;
 import org.hibernate.search.indexes.spi.IndexManager;
+import org.hibernate.search.spi.SearchIntegrator;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.orm.hibernate5.HibernateTransactionManager;
 import org.springframework.stereotype.Component;
@@ -88,6 +89,10 @@ public class CdmMassIndexer implements ICdmMassIndexer {
 
     protected <T extends CdmBase>void reindex(Class<T> type, IProgressMonitor monitor) {
 
+        //TODO set the application in maintenance mode: making
+        // queries to the index is not recommended when a MassIndexer is busy.
+        // fullTextSession.createIndexer().startAndWait();
+
         FullTextSession fullTextSession = Search.getFullTextSession(getSession());
 
         fullTextSession.setFlushMode(FlushMode.MANUAL);
@@ -151,7 +156,7 @@ public class CdmMassIndexer implements ICdmMassIndexer {
             return;
         }
         SearchFactory searchFactory = Search.getFullTextSession(getSession()).getSearchFactory();
-        IndexManager indexManager = makeIndexManager(searchFactory, indexName);
+        IndexManager indexManager = obtainIndexManager(searchFactory, indexName);
 
         IndexReader indexReader = searchFactory.getIndexReaderAccessor().open(type);
         List<String> idFields = getIndexedDeclaredFields(type);
@@ -200,12 +205,10 @@ public class CdmMassIndexer implements ICdmMassIndexer {
         subMonitor.done();
     }
 
-    private IndexManager makeIndexManager(SearchFactory searchFactory, String indexName){
-        //FIXME #4716 SearchFactoryImplementor not available in hibernate-search anymore
-//        SearchFactoryImplementor searchFactory = (SearchFactoryImplementor)searchFactory;
-//        IndexManager indexManager = searchFactory.getAllIndexesManager().getIndexManager(indexName);
-//        return indexManager;
-        return null;
+    private IndexManager obtainIndexManager(SearchFactory searchFactory, String indexName){
+        SearchIntegrator searchIntegrator = searchFactory.unwrap(SearchIntegrator.class );
+        IndexManager indexManager = searchIntegrator.getIndexManager(indexName);
+        return indexManager;
     }
 
     /**
@@ -241,7 +244,7 @@ public class CdmMassIndexer implements ICdmMassIndexer {
 
         if(doSpellIndex){
             SearchFactory searchFactory = fullTextSession.getSearchFactory();
-            IndexManager indexManager = makeIndexManager(searchFactory, type.getName());
+            IndexManager indexManager = obtainIndexManager(searchFactory, type.getName());
             if(indexManager == null){
                 logger.info("No IndexManager found for " + type.getName() + ", thus nothing to purge");
                 return;
index c161161757b35feb3c95b802e00313ab7cd8b023..c4788d000b0d3279eb2862369f62bcf83b51b458 100644 (file)
@@ -247,13 +247,13 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     @SuppressWarnings("rawtypes")\r
     @Test\r
     @DataSet\r
-    public final void testPurgeIndex() throws CorruptIndexException, IOException, ParseException {\r
+    public final void testPurgeAndReindex() throws CorruptIndexException, IOException, ParseException {\r
 \r
         refreshLuceneIndex();\r
 \r
         Pager<SearchResult<TaxonBase>> pager;\r
 \r
-        pager = taxonService.findByFullText(null, "Abies", null, null, true, null, null, null, null); // --> 7\r
+        pager = taxonService.findByFullText(null, "Abies", null, null, true, null, null, null, null); // --> 8\r
         Assert.assertEquals("Expecting 8 entities", 8, pager.getCount().intValue());\r
 \r
         indexer.purge(null);\r
@@ -261,8 +261,15 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
 \r
         pager = taxonService.findByFullText(null, "Abies", null, null, true, null, null, null, null); // --> 0\r
         Assert.assertEquals("Expecting no entities since the index has been purged", 0, pager.getCount().intValue());\r
+\r
+        indexer.reindex(indexer.indexedClasses(), null);\r
+        commitAndStartNewTransaction(null);\r
+\r
+        pager = taxonService.findByFullText(null, "Abies", null, null, true, null, null, null, null); // --> 8\r
+        Assert.assertEquals("Expecting 8 entities", 8, pager.getCount().intValue());\r
     }\r
 \r
+\r
     @SuppressWarnings("rawtypes")\r
     @Test\r
     @DataSet\r