From 31f81f162c056f3769a835f0be2f9ced204b84b6 Mon Sep 17 00:00:00 2001 From: Emmanuel Bernard Date: Thu, 3 Jun 2010 17:20:22 +0200 Subject: [PATCH 1/8] HSEARCH-397 Clean and refactor various components of SearchFactoryImpl and co Clean generics usage in DirectoryProviderFactory Move DirectoryProviderData to a top level class as it is now shared Move PolymorphicIndexHierarchy to top level class as it is now shared --- .../search/impl/DirectoryProviderData.java | 53 +++++++++++++ .../search/impl/PolymorphicIndexHierarchy.java | 61 +++++++++++++++ .../hibernate/search/impl/SearchFactoryImpl.java | 82 +++----------------- 3 files changed, 126 insertions(+), 70 deletions(-) create mode 100644 hibernate-search/src/main/java/org/hibernate/search/impl/DirectoryProviderData.java create mode 100644 hibernate-search/src/main/java/org/hibernate/search/impl/PolymorphicIndexHierarchy.java diff --git a/hibernate-search/src/main/java/org/hibernate/search/impl/DirectoryProviderData.java b/hibernate-search/src/main/java/org/hibernate/search/impl/DirectoryProviderData.java new file mode 100644 index 0000000..76f36e2 --- /dev/null +++ b/hibernate-search/src/main/java/org/hibernate/search/impl/DirectoryProviderData.java @@ -0,0 +1,53 @@ +package org.hibernate.search.impl; + +import java.util.HashSet; +import java.util.Set; +import java.util.concurrent.locks.ReentrantLock; + +import org.apache.lucene.search.Similarity; + +import org.hibernate.search.store.optimization.OptimizerStrategy; + +/** +* @author Emmanuel Bernard +*/ +class DirectoryProviderData { + private final ReentrantLock dirLock = new ReentrantLock(); + private OptimizerStrategy optimizerStrategy; + private final Set> classes = new HashSet>( 2 ); + private Similarity similarity = null; + private boolean exclusiveIndexUsage; + + public void setOptimizerStrategy(OptimizerStrategy optimizerStrategy) { + this.optimizerStrategy = optimizerStrategy; + } + + public void setSimilarity(Similarity similarity) { + this.similarity = similarity; + } + + public void setExclusiveIndexUsage(boolean exclusiveIndexUsage) { + this.exclusiveIndexUsage = exclusiveIndexUsage; + } + + public ReentrantLock getDirLock() { + + return dirLock; + } + + public OptimizerStrategy getOptimizerStrategy() { + return optimizerStrategy; + } + + public Set> getClasses() { + return classes; + } + + public Similarity getSimilarity() { + return similarity; + } + + public boolean isExclusiveIndexUsage() { + return exclusiveIndexUsage; + } +} diff --git a/hibernate-search/src/main/java/org/hibernate/search/impl/PolymorphicIndexHierarchy.java b/hibernate-search/src/main/java/org/hibernate/search/impl/PolymorphicIndexHierarchy.java new file mode 100644 index 0000000..8c907fa --- /dev/null +++ b/hibernate-search/src/main/java/org/hibernate/search/impl/PolymorphicIndexHierarchy.java @@ -0,0 +1,61 @@ +package org.hibernate.search.impl; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.slf4j.Logger; + +import org.hibernate.search.util.LoggerFactory; + +/** + * Helper class which keeps track of all super classes and interfaces of the indexed entities. + */ +class PolymorphicIndexHierarchy { + private static final Logger log = LoggerFactory.make(); + + private Map, Set>> classToIndexedClass; + + PolymorphicIndexHierarchy() { + classToIndexedClass = new HashMap, Set>>(); + } + + void addIndexedClass(Class indexedClass) { + addClass( indexedClass, indexedClass ); + Class superClass = indexedClass.getSuperclass(); + while ( superClass != null ) { + addClass( superClass, indexedClass ); + superClass = superClass.getSuperclass(); + } + for ( Class clazz : indexedClass.getInterfaces() ) { + addClass( clazz, indexedClass ); + } + } + + private void addClass(Class superclass, Class indexedClass) { + Set> classesSet = classToIndexedClass.get( superclass ); + if ( classesSet == null ) { + classesSet = new HashSet>(); + classToIndexedClass.put( superclass, classesSet ); + } + classesSet.add( indexedClass ); + } + + Set> getIndexedClasses(Class[] classes) { + Set> idexedClasses = new HashSet>(); + for ( Class clazz : classes ) { + Set> set = classToIndexedClass.get( clazz ); + if ( set != null ) { + // at this point we don't have to care about including indexed subclasses of a indexed class + // MultiClassesQueryLoader will take care of this later and optimise the queries + idexedClasses.addAll( set ); + } + } + if ( log.isTraceEnabled() ) { + log.trace( "Targeted indexed classes for {}: {}", Arrays.toString( classes ), idexedClasses ); + } + return idexedClasses; + } +} diff --git a/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java b/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java index 2b2823d..e456ed3 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java +++ b/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java @@ -27,10 +27,8 @@ package org.hibernate.search.impl; import java.beans.Introspector; import java.lang.reflect.Method; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -191,17 +189,17 @@ public class SearchFactoryImpl implements SearchFactoryImplementor { private void fillSimilarityMapping() { for ( DirectoryProviderData directoryConfiguration : dirProviderData.values() ) { - for (Class indexedType : directoryConfiguration.classes) { + for ( Class indexedType : directoryConfiguration.getClasses() ) { DocumentBuilderIndexedEntity documentBuilder = documentBuildersIndexedEntities.get( indexedType ); Similarity similarity = documentBuilder.getSimilarity(); - Similarity prevSimilarity = directoryConfiguration.similarity; + Similarity prevSimilarity = directoryConfiguration.getSimilarity(); if ( prevSimilarity != null && ! prevSimilarity.getClass().equals( similarity.getClass() ) ) { throw new SearchException( "Multiple entities are sharing the same index but are declaring an " + "inconsistent Similarity. When overrriding default Similarity make sure that all types sharing a same index " + "declare the same Similarity implementation." ); } else { - directoryConfiguration.similarity = similarity; + directoryConfiguration.setSimilarity( similarity ); } } } @@ -266,14 +264,14 @@ public class SearchFactoryImpl implements SearchFactoryImplementor { data = new DirectoryProviderData(); dirProviderData.put( directoryProvider, data ); } - data.classes.add( clazz ); - data.exclusiveIndexUsage = exclusiveIndexUsage; + data.getClasses().add( clazz ); + data.setExclusiveIndexUsage( exclusiveIndexUsage ); } public Set> getClassesInDirectoryProvider(DirectoryProvider directoryProvider) { if ( barrier != 0 ) { } //read barrier - return Collections.unmodifiableSet( dirProviderData.get( directoryProvider ).classes ); + return Collections.unmodifiableSet( dirProviderData.get( directoryProvider ).getClasses() ); } private void bindFilterDefs(XClass mappedXClass) { @@ -400,7 +398,7 @@ public class SearchFactoryImpl implements SearchFactoryImplementor { data = new DirectoryProviderData(); dirProviderData.put( provider, data ); } - data.optimizerStrategy = optimizerStrategy; + data.setOptimizerStrategy( optimizerStrategy ); } public void addIndexingParameters(DirectoryProvider provider, LuceneIndexingParameters indexingParams) { @@ -411,7 +409,7 @@ public class SearchFactoryImpl implements SearchFactoryImplementor { public OptimizerStrategy getOptimizerStrategy(DirectoryProvider provider) { if ( barrier != 0 ) { } //read barrier - return dirProviderData.get( provider ).optimizerStrategy; + return dirProviderData.get( provider ).getOptimizerStrategy(); } public LuceneIndexingParameters getIndexingParameters(DirectoryProvider provider) { @@ -578,24 +576,16 @@ public class SearchFactoryImpl implements SearchFactoryImplementor { return filterDefinitions.get( name ); } - private static class DirectoryProviderData { - public final ReentrantLock dirLock = new ReentrantLock(); - public OptimizerStrategy optimizerStrategy; - public final Set> classes = new HashSet>( 2 ); - public Similarity similarity = null; - private boolean exclusiveIndexUsage; - } - public ReentrantLock getDirectoryProviderLock(DirectoryProvider dp) { if ( barrier != 0 ) { } //read barrier - return this.dirProviderData.get( dp ).dirLock; + return this.dirProviderData.get( dp ).getDirLock(); } public void addDirectoryProvider(DirectoryProvider provider, boolean exclusiveIndexUsage) { //no need to set a barrier we use this method in the init thread DirectoryProviderData dirConfiguration = new DirectoryProviderData(); - dirConfiguration.exclusiveIndexUsage = exclusiveIndexUsage; + dirConfiguration.setExclusiveIndexUsage( exclusiveIndexUsage ); this.dirProviderData.put( provider, dirConfiguration ); } @@ -627,58 +617,10 @@ public class SearchFactoryImpl implements SearchFactoryImplementor { return batchBackend; } - /** - * Helper class which keeps track of all super classes and interfaces of the indexed entities. - */ - private static class PolymorphicIndexHierarchy { - private Map, Set>> classToIndexedClass; - - PolymorphicIndexHierarchy() { - classToIndexedClass = new HashMap, Set>>(); - } - - void addIndexedClass(Class indexedClass) { - addClass( indexedClass, indexedClass ); - Class superClass = indexedClass.getSuperclass(); - while ( superClass != null ) { - addClass( superClass, indexedClass ); - superClass = superClass.getSuperclass(); - } - for ( Class clazz : indexedClass.getInterfaces() ) { - addClass( clazz, indexedClass ); - } - } - - private void addClass(Class superclass, Class indexedClass) { - Set> classesSet = classToIndexedClass.get( superclass ); - if ( classesSet == null ) { - classesSet = new HashSet>(); - classToIndexedClass.put( superclass, classesSet ); - } - classesSet.add( indexedClass ); - } - - Set> getIndexedClasses(Class[] classes) { - Set> idexedClasses = new HashSet>(); - for ( Class clazz : classes ) { - Set> set = classToIndexedClass.get( clazz ); - if ( set != null ) { - // at this point we don't have to care about including indexed subclasses of a indexed class - // MultiClassesQueryLoader will take care of this later and optimise the queries - idexedClasses.addAll( set ); - } - } - if ( log.isTraceEnabled() ) { - log.trace( "Targeted indexed classes for {}: {}", Arrays.toString( classes ), idexedClasses ); - } - return idexedClasses; - } - } - public Similarity getSimilarity(DirectoryProvider provider) { if ( barrier != 0 ) { } //read barrier - Similarity similarity = dirProviderData.get( provider ).similarity; + Similarity similarity = dirProviderData.get( provider ).getSimilarity(); if ( similarity == null ) throw new SearchException( "Assertion error: a similarity should be defined for each provider" ); return similarity; } @@ -686,7 +628,7 @@ public class SearchFactoryImpl implements SearchFactoryImplementor { public boolean isExclusiveIndexUsageEnabled(DirectoryProvider provider) { if ( barrier != 0 ) { } //read barrier - return dirProviderData.get( provider ).exclusiveIndexUsage; + return dirProviderData.get( provider ).isExclusiveIndexUsage(); } /** -- 1.6.5.1 From f78c1e18335877a1b8af8dcf3c6da92d8733ce3a Mon Sep 17 00:00:00 2001 From: Emmanuel Bernard Date: Fri, 4 Jun 2010 12:16:09 +0200 Subject: [PATCH 2/8] HSEARCH-541 Rename internal InitContext to ConfigContext --- .../engine/DocumentBuilderContainedEntity.java | 31 ++-- .../engine/DocumentBuilderIndexedEntity.java | 12 +- .../org/hibernate/search/impl/ConfigContext.java | 201 ++++++++++++++++++++ .../org/hibernate/search/impl/InitContext.java | 201 -------------------- .../hibernate/search/impl/SearchFactoryImpl.java | 4 +- .../search/test/analyzer/AnalyzerTest.java | 4 +- 6 files changed, 226 insertions(+), 227 deletions(-) create mode 100644 hibernate-search/src/main/java/org/hibernate/search/impl/ConfigContext.java delete mode 100644 hibernate-search/src/main/java/org/hibernate/search/impl/InitContext.java diff --git a/hibernate-search/src/main/java/org/hibernate/search/engine/DocumentBuilderContainedEntity.java b/hibernate-search/src/main/java/org/hibernate/search/engine/DocumentBuilderContainedEntity.java index a4b3e3b..0aa584b 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/engine/DocumentBuilderContainedEntity.java +++ b/hibernate-search/src/main/java/org/hibernate/search/engine/DocumentBuilderContainedEntity.java @@ -56,7 +56,6 @@ import org.hibernate.search.annotations.Boost; import org.hibernate.search.annotations.ClassBridge; import org.hibernate.search.annotations.ClassBridges; import org.hibernate.search.annotations.ContainedIn; -import org.hibernate.search.annotations.DocumentId; import org.hibernate.search.annotations.DynamicBoost; import org.hibernate.search.annotations.Index; import org.hibernate.search.annotations.IndexedEmbedded; @@ -67,7 +66,7 @@ import org.hibernate.search.backend.WorkType; import org.hibernate.search.bridge.BridgeFactory; import org.hibernate.search.bridge.FieldBridge; import org.hibernate.search.bridge.LuceneOptions; -import org.hibernate.search.impl.InitContext; +import org.hibernate.search.impl.ConfigContext; import org.hibernate.search.util.LoggerFactory; import org.hibernate.search.util.PassThroughAnalyzer; import org.hibernate.search.util.ReflectionHelper; @@ -106,7 +105,7 @@ public class DocumentBuilderContainedEntity implements DocumentBuilder { * @param context Handle to default configuration settings. * @param reflectionManager Reflection manager to use for processing the annotations. */ - public DocumentBuilderContainedEntity(XClass clazz, InitContext context, ReflectionManager reflectionManager) { + public DocumentBuilderContainedEntity(XClass clazz, ConfigContext context, ReflectionManager reflectionManager) { if ( clazz == null ) { throw new AssertionFailure( "Unable to build a DocumentBuilderContainedEntity with a null class" ); @@ -123,7 +122,7 @@ public class DocumentBuilderContainedEntity implements DocumentBuilder { } } - protected void init(XClass clazz, InitContext context) { + protected void init(XClass clazz, ConfigContext context) { metadata.boost = getBoost( clazz ); metadata.classBoostStrategy = getDynamicBoost( clazz ); metadata.analyzer = context.getDefaultAnalyzer(); @@ -145,7 +144,7 @@ public class DocumentBuilderContainedEntity implements DocumentBuilder { } private void initializeClass(XClass clazz, PropertiesMetadata propertiesMetadata, boolean isRoot, String prefix, - Set processedClasses, InitContext context) { + Set processedClasses, ConfigContext context) { List hierarchy = new ArrayList(); for ( XClass currentClass = clazz; currentClass != null; currentClass = currentClass.getSuperclass() ) { hierarchy.add( currentClass ); @@ -187,7 +186,7 @@ public class DocumentBuilderContainedEntity implements DocumentBuilder { * @param prefix The current prefix used for the Document field names. * @param context Handle to default configuration settings. */ - private void initializeClassLevelAnnotations(XClass clazz, PropertiesMetadata propertiesMetadata, boolean isRoot, String prefix, InitContext context) { + private void initializeClassLevelAnnotations(XClass clazz, PropertiesMetadata propertiesMetadata, boolean isRoot, String prefix, ConfigContext context) { // check for a class level specified analyzer Analyzer analyzer = getAnalyzer( clazz, context ); @@ -222,7 +221,7 @@ public class DocumentBuilderContainedEntity implements DocumentBuilder { } protected void initializeMemberLevelAnnotations(XProperty member, PropertiesMetadata propertiesMetadata, boolean isRoot, - String prefix, Set processedClasses, InitContext context) { + String prefix, Set processedClasses, ConfigContext context) { checkDocumentId( member, propertiesMetadata, isRoot, prefix, context ); checkForField( member, propertiesMetadata, prefix, context ); checkForFields( member, propertiesMetadata, prefix, context ); @@ -232,13 +231,13 @@ public class DocumentBuilderContainedEntity implements DocumentBuilder { checkForContainedIn( member, propertiesMetadata ); } - protected Analyzer getAnalyzer(XAnnotatedElement annotatedElement, InitContext context) { + protected Analyzer getAnalyzer(XAnnotatedElement annotatedElement, ConfigContext context) { org.hibernate.search.annotations.Analyzer analyzerAnn = annotatedElement.getAnnotation( org.hibernate.search.annotations.Analyzer.class ); return getAnalyzer( analyzerAnn, context ); } - protected Analyzer getAnalyzer(org.hibernate.search.annotations.Analyzer analyzerAnn, InitContext context) { + protected Analyzer getAnalyzer(org.hibernate.search.annotations.Analyzer analyzerAnn, ConfigContext context) { Class analyzerClass = analyzerAnn == null ? void.class : analyzerAnn.impl(); if ( analyzerClass == void.class ) { String definition = analyzerAnn == null ? "" : analyzerAnn.definition(); @@ -268,7 +267,7 @@ public class DocumentBuilderContainedEntity implements DocumentBuilder { } } - private void checkForAnalyzerDefs(XAnnotatedElement annotatedElement, InitContext context) { + private void checkForAnalyzerDefs(XAnnotatedElement annotatedElement, ConfigContext context) { AnalyzerDefs defs = annotatedElement.getAnnotation( AnalyzerDefs.class ); if ( defs != null ) { for ( AnalyzerDef def : defs.value() ) { @@ -308,7 +307,7 @@ public class DocumentBuilderContainedEntity implements DocumentBuilder { return similarity; } - private void checkForFields(XProperty member, PropertiesMetadata propertiesMetadata, String prefix, InitContext context) { + private void checkForFields(XProperty member, PropertiesMetadata propertiesMetadata, String prefix, ConfigContext context) { org.hibernate.search.annotations.Fields fieldsAnn = member.getAnnotation( org.hibernate.search.annotations.Fields.class ); if ( fieldsAnn != null ) { @@ -339,7 +338,7 @@ public class DocumentBuilderContainedEntity implements DocumentBuilder { } } - private void checkForField(XProperty member, PropertiesMetadata propertiesMetadata, String prefix, InitContext context) { + private void checkForField(XProperty member, PropertiesMetadata propertiesMetadata, String prefix, ConfigContext context) { org.hibernate.search.annotations.Field fieldAnn = member.getAnnotation( org.hibernate.search.annotations.Field.class ); if ( fieldAnn != null ) { @@ -355,7 +354,7 @@ public class DocumentBuilderContainedEntity implements DocumentBuilder { } } - private void checkForIndexedEmbedded(XProperty member, PropertiesMetadata propertiesMetadata, String prefix, Set processedClasses, InitContext context) { + private void checkForIndexedEmbedded(XProperty member, PropertiesMetadata propertiesMetadata, String prefix, Set processedClasses, ConfigContext context) { IndexedEmbedded embeddedAnn = member.getAnnotation( IndexedEmbedded.class ); if ( embeddedAnn != null ) { int oldMaxLevel = maxLevel; @@ -426,7 +425,7 @@ public class DocumentBuilderContainedEntity implements DocumentBuilder { } } - protected void checkDocumentId(XProperty member, PropertiesMetadata propertiesMetadata, boolean isRoot, String prefix, InitContext context) { + protected void checkDocumentId(XProperty member, PropertiesMetadata propertiesMetadata, boolean isRoot, String prefix, ConfigContext context) { // TODO - HSEARCH-333 // for a contained entity there is nothing to do here. This is really bad design since this protected method is called by the constructor and // overridden by DocumentBuilderIndexedEntity @@ -454,7 +453,7 @@ public class DocumentBuilderContainedEntity implements DocumentBuilder { return ReflectionHelper.getAttributeName( member, name ); } - private void bindClassBridgeAnnotation(String prefix, PropertiesMetadata propertiesMetadata, ClassBridge ann, InitContext context) { + private void bindClassBridgeAnnotation(String prefix, PropertiesMetadata propertiesMetadata, ClassBridge ann, ConfigContext context) { String fieldName = prefix + ann.name(); propertiesMetadata.classNames.add( fieldName ); propertiesMetadata.classStores.add( ann.store() ); @@ -473,7 +472,7 @@ public class DocumentBuilderContainedEntity implements DocumentBuilder { addToScopedAnalyzer( fieldName, analyzer, ann.index() ); } - private void bindFieldAnnotation(XProperty member, PropertiesMetadata propertiesMetadata, String prefix, org.hibernate.search.annotations.Field fieldAnn, InitContext context) { + private void bindFieldAnnotation(XProperty member, PropertiesMetadata propertiesMetadata, String prefix, org.hibernate.search.annotations.Field fieldAnn, ConfigContext context) { ReflectionHelper.setAccessible( member ); propertiesMetadata.fieldGetters.add( member ); String fieldName = prefix + ReflectionHelper.getAttributeName( member, fieldAnn.name() ); diff --git a/hibernate-search/src/main/java/org/hibernate/search/engine/DocumentBuilderIndexedEntity.java b/hibernate-search/src/main/java/org/hibernate/search/engine/DocumentBuilderIndexedEntity.java index 0c8ef04..0c621a4 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/engine/DocumentBuilderIndexedEntity.java +++ b/hibernate-search/src/main/java/org/hibernate/search/engine/DocumentBuilderIndexedEntity.java @@ -68,7 +68,7 @@ import org.hibernate.search.bridge.StringBridge; import org.hibernate.search.bridge.TwoWayFieldBridge; import org.hibernate.search.bridge.TwoWayString2FieldBridgeAdaptor; import org.hibernate.search.bridge.TwoWayStringBridge; -import org.hibernate.search.impl.InitContext; +import org.hibernate.search.impl.ConfigContext; import org.hibernate.search.store.DirectoryProvider; import org.hibernate.search.store.IndexShardingStrategy; import org.hibernate.search.util.LoggerFactory; @@ -143,7 +143,7 @@ public class DocumentBuilderIndexedEntity extends DocumentBuilderContainedEnt * @param shardingStrategy The sharding strategy used for the indexed entity. * @param reflectionManager Reflection manager to use for processing the annotations. */ - public DocumentBuilderIndexedEntity(XClass clazz, InitContext context, DirectoryProvider[] directoryProviders, + public DocumentBuilderIndexedEntity(XClass clazz, ConfigContext context, DirectoryProvider[] directoryProviders, IndexShardingStrategy shardingStrategy, ReflectionManager reflectionManager) { super( clazz, context, reflectionManager ); @@ -153,7 +153,7 @@ public class DocumentBuilderIndexedEntity extends DocumentBuilderContainedEnt this.shardingStrategy = shardingStrategy; } - protected void init(XClass clazz, InitContext context) { + protected void init(XClass clazz, ConfigContext context) { super.init( clazz, context ); // special case @ProvidedId @@ -177,7 +177,7 @@ public class DocumentBuilderIndexedEntity extends DocumentBuilderContainedEnt } } - protected void checkDocumentId(XProperty member, PropertiesMetadata propertiesMetadata, boolean isRoot, String prefix, InitContext context) { + protected void checkDocumentId(XProperty member, PropertiesMetadata propertiesMetadata, boolean isRoot, String prefix, ConfigContext context) { Annotation idAnnotation = getIdAnnotation( member, context ); if ( idAnnotation != null ) { String attributeName = getIdAttributeName( member, idAnnotation ); @@ -238,7 +238,7 @@ public class DocumentBuilderIndexedEntity extends DocumentBuilderContainedEnt * * @return the annotation used as document id or null if id annotation is specified on the property. */ - private Annotation getIdAnnotation(XProperty member, InitContext context) { + private Annotation getIdAnnotation(XProperty member, ConfigContext context) { Annotation idAnnotation = null; // check for explicit DocumentId @@ -254,7 +254,7 @@ public class DocumentBuilderIndexedEntity extends DocumentBuilderContainedEnt @SuppressWarnings("unchecked") Class jpaIdClass = org.hibernate.annotations.common.util.ReflectHelper - .classForName( "javax.persistence.Id", InitContext.class ); + .classForName( "javax.persistence.Id", ConfigContext.class ); jpaId = member.getAnnotation( jpaIdClass ); } catch ( ClassNotFoundException e ) { diff --git a/hibernate-search/src/main/java/org/hibernate/search/impl/ConfigContext.java b/hibernate-search/src/main/java/org/hibernate/search/impl/ConfigContext.java new file mode 100644 index 0000000..d2956a8 --- /dev/null +++ b/hibernate-search/src/main/java/org/hibernate/search/impl/ConfigContext.java @@ -0,0 +1,201 @@ +/* $Id$ + * + * Hibernate, Relational Persistence for Idiomatic Java + * + * Copyright (c) 2009, Red Hat, Inc. and/or its affiliates or third-party contributors as + * indicated by the @author tags or express copyright attribution + * statements applied by the authors. All third-party contributions are + * distributed under license by Red Hat, Inc. + * + * This copyrighted material is made available to anyone wishing to use, modify, + * copy, or redistribute it subject to the terms and conditions of the GNU + * Lesser General Public License, as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this distribution; if not, write to: + * Free Software Foundation, Inc. + * 51 Franklin Street, Fifth Floor + * Boston, MA 02110-1301 USA + */ +package org.hibernate.search.impl; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.lucene.analysis.Analyzer; +import org.apache.lucene.analysis.standard.StandardAnalyzer; +import org.apache.lucene.search.Similarity; + +import org.hibernate.search.Environment; +import org.hibernate.search.SearchException; +import org.hibernate.search.annotations.AnalyzerDef; +import org.hibernate.search.cfg.SearchConfiguration; +import org.hibernate.search.util.DelegateNamedAnalyzer; +import org.hibernate.search.util.LoggerFactory; +import org.hibernate.search.util.PluginLoader; +import org.hibernate.util.ReflectHelper; +import org.hibernate.util.StringHelper; +import org.slf4j.Logger; + +/** + * Provides access to some default configuration settings (eg default Analyzer or default + * Similarity) and checks whether certain optional libraries are available. + * + * + * @author Emmanuel Bernard + * @author Hardy Ferentschik + */ +public class ConfigContext { + + private static final Logger log = LoggerFactory.make(); + + private final Map analyzerDefs = new HashMap(); + private final List lazyAnalyzers = new ArrayList(); + private final Analyzer defaultAnalyzer; + private final Similarity defaultSimilarity; + private final boolean solrPresent; + private final boolean jpaPresent; + + public ConfigContext(SearchConfiguration cfg) { + defaultAnalyzer = initAnalyzer(cfg); + defaultSimilarity = initSimilarity(cfg); + solrPresent = isPresent( "org.apache.solr.analysis.TokenizerFactory" ); + jpaPresent = isPresent( "javax.persistence.Id" ); + } + + public void addAnalyzerDef(AnalyzerDef ann) { + //FIXME somehow remember where the analyzerDef comes from and raise an exception if an analyzerDef + //with the same name from two different places are added + //multiple adding from the same place is required to deal with inheritance hierarchy processed multiple times + if ( ann != null && analyzerDefs.put( ann.name(), ann ) != null ) { + //throw new SearchException("Multiple AnalyzerDef with the same name: " + name); + } + } + + public Analyzer buildLazyAnalyzer(String name) { + final DelegateNamedAnalyzer delegateNamedAnalyzer = new DelegateNamedAnalyzer( name ); + lazyAnalyzers.add(delegateNamedAnalyzer); + return delegateNamedAnalyzer; + } + + public List getLazyAnalyzers() { + return lazyAnalyzers; + } + + /** + * Initializes the Lucene analyzer to use by reading the analyzer class from the configuration and instantiating it. + * + * @param cfg + * The current configuration. + * @return The Lucene analyzer to use for tokenisation. + */ + private Analyzer initAnalyzer(SearchConfiguration cfg) { + Class analyzerClass; + String analyzerClassName = cfg.getProperty( Environment.ANALYZER_CLASS ); + if ( analyzerClassName != null ) { + try { + analyzerClass = ReflectHelper.classForName( analyzerClassName ); + } catch (Exception e) { + return buildLazyAnalyzer( analyzerClassName ); + } + } else { + analyzerClass = StandardAnalyzer.class; + } + Analyzer defaultAnalyzer = PluginLoader.instanceFromClass( Analyzer.class, + analyzerClass, "Lucene analyzer" ); + return defaultAnalyzer; + } + + /** + * Initializes the Lucene similarity to use. + * + * @param cfg the search configuration. + * @return returns the default similarity class. + */ + private Similarity initSimilarity(SearchConfiguration cfg) { + String similarityClassName = cfg.getProperty(Environment.SIMILARITY_CLASS); + Similarity defaultSimilarity; + if ( StringHelper.isEmpty( similarityClassName ) ) { + defaultSimilarity = Similarity.getDefault(); + } + else { + defaultSimilarity = PluginLoader.instanceFromName( + Similarity.class, similarityClassName, ConfigContext.class, "default similarity" ); + } + log.debug( "Using default similarity implementation: {}", defaultSimilarity.getClass().getName() ); + return defaultSimilarity; + } + + public Analyzer getDefaultAnalyzer() { + return defaultAnalyzer; + } + + public Similarity getDefaultSimilarity() { + return defaultSimilarity; + } + + public Map initLazyAnalyzers() { + Map initializedAnalyzers = new HashMap( analyzerDefs.size() ); + + for (DelegateNamedAnalyzer namedAnalyzer : lazyAnalyzers) { + String name = namedAnalyzer.getName(); + if ( initializedAnalyzers.containsKey( name ) ) { + namedAnalyzer.setDelegate( initializedAnalyzers.get( name ) ); + } + else { + if ( analyzerDefs.containsKey( name ) ) { + final Analyzer analyzer = buildAnalyzer( analyzerDefs.get( name ) ); + namedAnalyzer.setDelegate( analyzer ); + initializedAnalyzers.put( name, analyzer ); + } + else { + throw new SearchException("Analyzer found with an unknown definition: " + name); + } + } + } + + //initialize the remaining definitions + for ( Map.Entry entry : analyzerDefs.entrySet() ) { + if ( ! initializedAnalyzers.containsKey( entry.getKey() ) ) { + final Analyzer analyzer = buildAnalyzer( entry.getValue() ); + initializedAnalyzers.put( entry.getKey(), analyzer ); + } + } + return Collections.unmodifiableMap( initializedAnalyzers ); + } + + private Analyzer buildAnalyzer(AnalyzerDef analyzerDef) { + if ( ! solrPresent ) { + throw new SearchException( "Use of @AnalyzerDef while Solr is not present in the classpath. Add apache-solr-analyzer.jar" ); + } + // SolrAnalyzerBuilder references Solr classes. + // InitContext should not (directly or indirectly) load a Solr class to avoid hard dependency + // unless necessary + // the current mechanism (check Solr class presence and call SolrAnalyzerBuilder if needed + // seems to be sufficient on Apple VM (derived from Sun's + // TODO check on other VMs and be ready for a more reflexive approach + return SolrAnalyzerBuilder.buildAnalyzer( analyzerDef ); + } + + public boolean isJpaPresent() { + return jpaPresent; + } + + private boolean isPresent(String classname) { + try { + ReflectHelper.classForName( classname, ConfigContext.class ); + return true; + } + catch ( Exception e ) { + return false; + } + } +} diff --git a/hibernate-search/src/main/java/org/hibernate/search/impl/InitContext.java b/hibernate-search/src/main/java/org/hibernate/search/impl/InitContext.java deleted file mode 100644 index b1cea83..0000000 --- a/hibernate-search/src/main/java/org/hibernate/search/impl/InitContext.java +++ /dev/null @@ -1,201 +0,0 @@ -/* $Id$ - * - * Hibernate, Relational Persistence for Idiomatic Java - * - * Copyright (c) 2009, Red Hat, Inc. and/or its affiliates or third-party contributors as - * indicated by the @author tags or express copyright attribution - * statements applied by the authors. All third-party contributions are - * distributed under license by Red Hat, Inc. - * - * This copyrighted material is made available to anyone wishing to use, modify, - * copy, or redistribute it subject to the terms and conditions of the GNU - * Lesser General Public License, as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this distribution; if not, write to: - * Free Software Foundation, Inc. - * 51 Franklin Street, Fifth Floor - * Boston, MA 02110-1301 USA - */ -package org.hibernate.search.impl; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.lucene.analysis.Analyzer; -import org.apache.lucene.analysis.standard.StandardAnalyzer; -import org.apache.lucene.search.Similarity; - -import org.hibernate.search.Environment; -import org.hibernate.search.SearchException; -import org.hibernate.search.annotations.AnalyzerDef; -import org.hibernate.search.cfg.SearchConfiguration; -import org.hibernate.search.util.DelegateNamedAnalyzer; -import org.hibernate.search.util.LoggerFactory; -import org.hibernate.search.util.PluginLoader; -import org.hibernate.util.ReflectHelper; -import org.hibernate.util.StringHelper; -import org.slf4j.Logger; - -/** - * Provides access to some default configuration settings (eg default Analyzer or default - * Similarity) and checks whether certain optional libraries are available. - * - * - * @author Emmanuel Bernard - * @author Hardy Ferentschik - */ -public class InitContext { - - private static final Logger log = LoggerFactory.make(); - - private final Map analyzerDefs = new HashMap(); - private final List lazyAnalyzers = new ArrayList(); - private final Analyzer defaultAnalyzer; - private final Similarity defaultSimilarity; - private final boolean solrPresent; - private final boolean jpaPresent; - - public InitContext(SearchConfiguration cfg) { - defaultAnalyzer = initAnalyzer(cfg); - defaultSimilarity = initSimilarity(cfg); - solrPresent = isPresent( "org.apache.solr.analysis.TokenizerFactory" ); - jpaPresent = isPresent( "javax.persistence.Id" ); - } - - public void addAnalyzerDef(AnalyzerDef ann) { - //FIXME somehow remember where the analyzerDef comes from and raise an exception if an analyzerDef - //with the same name from two different places are added - //multiple adding from the same place is required to deal with inheritance hierarchy processed multiple times - if ( ann != null && analyzerDefs.put( ann.name(), ann ) != null ) { - //throw new SearchException("Multiple AnalyzerDef with the same name: " + name); - } - } - - public Analyzer buildLazyAnalyzer(String name) { - final DelegateNamedAnalyzer delegateNamedAnalyzer = new DelegateNamedAnalyzer( name ); - lazyAnalyzers.add(delegateNamedAnalyzer); - return delegateNamedAnalyzer; - } - - public List getLazyAnalyzers() { - return lazyAnalyzers; - } - - /** - * Initializes the Lucene analyzer to use by reading the analyzer class from the configuration and instantiating it. - * - * @param cfg - * The current configuration. - * @return The Lucene analyzer to use for tokenisation. - */ - private Analyzer initAnalyzer(SearchConfiguration cfg) { - Class analyzerClass; - String analyzerClassName = cfg.getProperty( Environment.ANALYZER_CLASS ); - if ( analyzerClassName != null ) { - try { - analyzerClass = ReflectHelper.classForName( analyzerClassName ); - } catch (Exception e) { - return buildLazyAnalyzer( analyzerClassName ); - } - } else { - analyzerClass = StandardAnalyzer.class; - } - Analyzer defaultAnalyzer = PluginLoader.instanceFromClass( Analyzer.class, - analyzerClass, "Lucene analyzer" ); - return defaultAnalyzer; - } - - /** - * Initializes the Lucene similarity to use. - * - * @param cfg the search configuration. - * @return returns the default similarity class. - */ - private Similarity initSimilarity(SearchConfiguration cfg) { - String similarityClassName = cfg.getProperty(Environment.SIMILARITY_CLASS); - Similarity defaultSimilarity; - if ( StringHelper.isEmpty( similarityClassName ) ) { - defaultSimilarity = Similarity.getDefault(); - } - else { - defaultSimilarity = PluginLoader.instanceFromName( - Similarity.class, similarityClassName, InitContext.class, "default similarity" ); - } - log.debug( "Using default similarity implementation: {}", defaultSimilarity.getClass().getName() ); - return defaultSimilarity; - } - - public Analyzer getDefaultAnalyzer() { - return defaultAnalyzer; - } - - public Similarity getDefaultSimilarity() { - return defaultSimilarity; - } - - public Map initLazyAnalyzers() { - Map initializedAnalyzers = new HashMap( analyzerDefs.size() ); - - for (DelegateNamedAnalyzer namedAnalyzer : lazyAnalyzers) { - String name = namedAnalyzer.getName(); - if ( initializedAnalyzers.containsKey( name ) ) { - namedAnalyzer.setDelegate( initializedAnalyzers.get( name ) ); - } - else { - if ( analyzerDefs.containsKey( name ) ) { - final Analyzer analyzer = buildAnalyzer( analyzerDefs.get( name ) ); - namedAnalyzer.setDelegate( analyzer ); - initializedAnalyzers.put( name, analyzer ); - } - else { - throw new SearchException("Analyzer found with an unknown definition: " + name); - } - } - } - - //initialize the remaining definitions - for ( Map.Entry entry : analyzerDefs.entrySet() ) { - if ( ! initializedAnalyzers.containsKey( entry.getKey() ) ) { - final Analyzer analyzer = buildAnalyzer( entry.getValue() ); - initializedAnalyzers.put( entry.getKey(), analyzer ); - } - } - return Collections.unmodifiableMap( initializedAnalyzers ); - } - - private Analyzer buildAnalyzer(AnalyzerDef analyzerDef) { - if ( ! solrPresent ) { - throw new SearchException( "Use of @AnalyzerDef while Solr is not present in the classpath. Add apache-solr-analyzer.jar" ); - } - // SolrAnalyzerBuilder references Solr classes. - // InitContext should not (directly or indirectly) load a Solr class to avoid hard dependency - // unless necessary - // the current mechanism (check Solr class presence and call SolrAnalyzerBuilder if needed - // seems to be sufficient on Apple VM (derived from Sun's - // TODO check on other VMs and be ready for a more reflexive approach - return SolrAnalyzerBuilder.buildAnalyzer( analyzerDef ); - } - - public boolean isJpaPresent() { - return jpaPresent; - } - - private boolean isPresent(String classname) { - try { - ReflectHelper.classForName( classname, InitContext.class ); - return true; - } - catch ( Exception e ) { - return false; - } - } -} diff --git a/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java b/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java index e456ed3..fb237c8 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java +++ b/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java @@ -481,7 +481,7 @@ public class SearchFactoryImpl implements SearchFactoryImplementor { } private void initDocumentBuilders(SearchConfiguration cfg, ReflectionManager reflectionManager) { - InitContext context = new InitContext( cfg ); + ConfigContext context = new ConfigContext( cfg ); Iterator> iter = cfg.getClassMappings(); DirectoryProviderFactory factory = new DirectoryProviderFactory(); @@ -537,7 +537,7 @@ public class SearchFactoryImpl implements SearchFactoryImplementor { factory.startDirectoryProviders(); } - private void initProgrammaticAnalyzers(InitContext context, ReflectionManager reflectionManager) { + private void initProgrammaticAnalyzers(ConfigContext context, ReflectionManager reflectionManager) { final Map defaults = reflectionManager.getDefaults(); if (defaults != null) { diff --git a/hibernate-search/src/test/java/org/hibernate/search/test/analyzer/AnalyzerTest.java b/hibernate-search/src/test/java/org/hibernate/search/test/analyzer/AnalyzerTest.java index 9d13dff..825bf65 100644 --- a/hibernate-search/src/test/java/org/hibernate/search/test/analyzer/AnalyzerTest.java +++ b/hibernate-search/src/test/java/org/hibernate/search/test/analyzer/AnalyzerTest.java @@ -40,7 +40,7 @@ import org.hibernate.search.FullTextSession; import org.hibernate.search.Search; import org.hibernate.search.SearchFactory; import org.hibernate.search.SearchException; -import org.hibernate.search.impl.InitContext; +import org.hibernate.search.impl.ConfigContext; import org.hibernate.search.cfg.SearchConfigurationFromHibernateCore; import org.hibernate.search.engine.DocumentBuilderContainedEntity; import org.hibernate.search.test.SearchTestCase; @@ -95,7 +95,7 @@ public class AnalyzerTest extends SearchTestCase { SearchConfigurationFromHibernateCore searchConfig = new SearchConfigurationFromHibernateCore( cfg ); ReflectionManager reflectionManager = searchConfig.getReflectionManager(); XClass xclass = reflectionManager.toXClass( BlogEntry.class ); - InitContext context = new InitContext( searchConfig ); + ConfigContext context = new ConfigContext( searchConfig ); try { new DocumentBuilderContainedEntity( xclass, context, reflectionManager ); fail(); -- 1.6.5.1 From 5cfe69db352216b58a2e6c2448818367de3fa650 Mon Sep 17 00:00:00 2001 From: Emmanuel Bernard Date: Fri, 4 Jun 2010 12:33:28 +0200 Subject: [PATCH 3/8] HSEARCH-541 Introduce InitContext to OptimizerStrategy --- .../hibernate/search/InitAndRegisterContext.java | 11 +++++++ .../java/org/hibernate/search/InitContext.java | 29 ++++++++++++++++++++ .../hibernate/search/impl/SearchFactoryImpl.java | 6 +++- .../search/store/DirectoryProviderFactory.java | 10 ++++--- .../optimization/IncrementalOptimizerStrategy.java | 3 +- .../store/optimization/NoOpOptimizerStrategy.java | 3 +- .../store/optimization/OptimizerStrategy.java | 3 +- 7 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 hibernate-search/src/main/java/org/hibernate/search/InitAndRegisterContext.java create mode 100644 hibernate-search/src/main/java/org/hibernate/search/InitContext.java diff --git a/hibernate-search/src/main/java/org/hibernate/search/InitAndRegisterContext.java b/hibernate-search/src/main/java/org/hibernate/search/InitAndRegisterContext.java new file mode 100644 index 0000000..39de128 --- /dev/null +++ b/hibernate-search/src/main/java/org/hibernate/search/InitAndRegisterContext.java @@ -0,0 +1,11 @@ +package org.hibernate.search; + +import org.hibernate.search.store.DirectoryProvider; +import org.hibernate.search.store.optimization.OptimizerStrategy; + +/** + * @author Emmanuel Bernard + */ +public interface InitAndRegisterContext extends InitContext { + void addOptimizerStrategy(DirectoryProvider provider, OptimizerStrategy optimizerStrategy); +} diff --git a/hibernate-search/src/main/java/org/hibernate/search/InitContext.java b/hibernate-search/src/main/java/org/hibernate/search/InitContext.java new file mode 100644 index 0000000..cedebf0 --- /dev/null +++ b/hibernate-search/src/main/java/org/hibernate/search/InitContext.java @@ -0,0 +1,29 @@ +package org.hibernate.search; + +import org.hibernate.search.engine.SearchFactoryImplementor; + +/** + * @author Emmanuel Bernard + */ +public interface InitContext { + /** + * Returns the SessionFactoryImplementor instance. Do not use until after the initialize method is fully executed. + * Implementations should not cache values provided by the SessionFactoryImplementor but rather access them + * each time: when the configuration is dynamically updated, new changes are available through the + * SearchFactoryImplementor + * For example, prefer + * + * void method() { + * int size = sfi.getDirectoryProviders().size(); + * } + * + * to + * + * void method() { + * int size = directoryProviders().size(); + * } + * + * where directoryProviders is a class variable. + */ + SearchFactoryImplementor getUninitializedSearchFactory(); +} diff --git a/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java b/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java index fb237c8..6cc57d3 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java +++ b/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java @@ -45,6 +45,7 @@ import org.hibernate.annotations.common.reflection.ReflectionManager; import org.hibernate.annotations.common.reflection.XClass; import org.hibernate.annotations.common.reflection.java.JavaReflectionManager; import org.hibernate.search.Environment; +import org.hibernate.search.InitAndRegisterContext; import org.hibernate.search.SearchException; import org.hibernate.search.Version; import org.hibernate.search.annotations.AnalyzerDef; @@ -95,7 +96,7 @@ import org.hibernate.search.exception.impl.LogErrorHandler; /** * @author Emmanuel Bernard */ -public class SearchFactoryImpl implements SearchFactoryImplementor { +public class SearchFactoryImpl implements SearchFactoryImplementor, InitAndRegisterContext { static { Version.touch(); @@ -655,4 +656,7 @@ public class SearchFactoryImpl implements SearchFactoryImplementor { return errorHandler; } + public SearchFactoryImplementor getUninitializedSearchFactory() { + return this; + } } diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProviderFactory.java b/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProviderFactory.java index 6542b8a..1779cc0 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProviderFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProviderFactory.java @@ -32,6 +32,7 @@ import org.hibernate.annotations.common.reflection.ReflectionManager; import org.hibernate.annotations.common.reflection.XClass; import org.hibernate.annotations.common.reflection.java.JavaReflectionManager; import org.hibernate.search.Environment; +import org.hibernate.search.InitAndRegisterContext; import org.hibernate.search.SearchException; import org.hibernate.search.annotations.Indexed; import org.hibernate.search.backend.LuceneIndexingParameters; @@ -140,7 +141,8 @@ public class DirectoryProviderFactory { return directoryProvider; } else { - configureOptimizerStrategy( searchFactoryImplementor, indexProps, provider ); + //TODO IARC casting should not be necessary in the end + configureOptimizerStrategy( ( InitAndRegisterContext ) searchFactoryImplementor, indexProps, provider ); configureIndexingParameters( searchFactoryImplementor, indexProps, provider ); providers.add( provider ); searchFactoryImplementor.addClassToDirectoryProvider( entity, provider, exclusiveIndexUsage ); @@ -148,18 +150,18 @@ public class DirectoryProviderFactory { } } - private void configureOptimizerStrategy(SearchFactoryImplementor searchFactoryImplementor, Properties indexProps, DirectoryProvider provider) { + private void configureOptimizerStrategy(InitAndRegisterContext context, Properties indexProps, DirectoryProvider provider) { boolean incremental = indexProps.containsKey( "optimizer.operation_limit.max" ) || indexProps.containsKey( "optimizer.transaction_limit.max" ); OptimizerStrategy optimizerStrategy; if ( incremental ) { optimizerStrategy = new IncrementalOptimizerStrategy(); - optimizerStrategy.initialize( provider, indexProps, searchFactoryImplementor ); + optimizerStrategy.initialize( provider, indexProps, context ); } else { optimizerStrategy = new NoOpOptimizerStrategy(); } - searchFactoryImplementor.addOptimizerStrategy( provider, optimizerStrategy ); + context.addOptimizerStrategy( provider, optimizerStrategy ); } /** diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/optimization/IncrementalOptimizerStrategy.java b/hibernate-search/src/main/java/org/hibernate/search/store/optimization/IncrementalOptimizerStrategy.java index 57fb22a..b9830b3 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/optimization/IncrementalOptimizerStrategy.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/optimization/IncrementalOptimizerStrategy.java @@ -30,6 +30,7 @@ import java.util.Properties; import org.apache.lucene.index.IndexWriter; import org.slf4j.Logger; +import org.hibernate.search.InitContext; import org.hibernate.search.SearchException; import org.hibernate.search.backend.Workspace; import org.hibernate.search.backend.configuration.ConfigurationParseHelper; @@ -52,7 +53,7 @@ public class IncrementalOptimizerStrategy implements OptimizerStrategy { private long transactions = 0; private DirectoryProvider directoryProvider; - public void initialize(DirectoryProvider directoryProvider, Properties indexProperties, SearchFactoryImplementor searchFactoryImplementor) { + public void initialize(DirectoryProvider directoryProvider, Properties indexProperties, InitContext context) { this.directoryProvider = directoryProvider; operationMax = ConfigurationParseHelper.getIntValue( indexProperties, "optimizer.operation_limit.max", -1 ); transactionMax = ConfigurationParseHelper.getIntValue( indexProperties, "optimizer.transaction_limit.max", -1 ); diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/optimization/NoOpOptimizerStrategy.java b/hibernate-search/src/main/java/org/hibernate/search/store/optimization/NoOpOptimizerStrategy.java index 4e9302e..398ec6b 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/optimization/NoOpOptimizerStrategy.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/optimization/NoOpOptimizerStrategy.java @@ -26,6 +26,7 @@ package org.hibernate.search.store.optimization; import java.util.Properties; +import org.hibernate.search.InitContext; import org.hibernate.search.store.DirectoryProvider; import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.backend.Workspace; @@ -34,7 +35,7 @@ import org.hibernate.search.backend.Workspace; * @author Emmanuel Bernard */ public class NoOpOptimizerStrategy implements OptimizerStrategy { - public void initialize(DirectoryProvider directoryProvider, Properties indexProperties, SearchFactoryImplementor searchFactoryImplementor) { + public void initialize(DirectoryProvider directoryProvider, Properties indexProperties, InitContext context) { } public void optimizationForced() { diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/optimization/OptimizerStrategy.java b/hibernate-search/src/main/java/org/hibernate/search/store/optimization/OptimizerStrategy.java index 5fb7d79..67c65a4 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/optimization/OptimizerStrategy.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/optimization/OptimizerStrategy.java @@ -26,6 +26,7 @@ package org.hibernate.search.store.optimization; import java.util.Properties; +import org.hibernate.search.InitContext; import org.hibernate.search.backend.Workspace; import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.store.DirectoryProvider; @@ -34,7 +35,7 @@ import org.hibernate.search.store.DirectoryProvider; * @author Emmanuel Bernard */ public interface OptimizerStrategy { - public void initialize(DirectoryProvider directoryProvider, Properties indexProperties, SearchFactoryImplementor searchFactoryImplementor); + public void initialize(DirectoryProvider directoryProvider, Properties indexProperties, InitContext initContext); /** * has to be called in a thread safe way -- 1.6.5.1 From 9b35ae976d4f2e3641aaeed315ce320816b1cf13 Mon Sep 17 00:00:00 2001 From: Emmanuel Bernard Date: Fri, 4 Jun 2010 14:21:01 +0200 Subject: [PATCH 4/8] HSEARCH-541 Introduce InitContext to DirectoryProvider --- .../hibernate/search/InitAndRegisterContext.java | 5 ++++ .../java/org/hibernate/search/InitContext.java | 4 +++ .../hibernate/search/store/DirectoryProvider.java | 4 ++- .../search/store/DirectoryProviderFactory.java | 26 ++++++++++---------- .../search/store/FSDirectoryProvider.java | 6 +++- .../search/store/FSMasterDirectoryProvider.java | 5 ++- .../search/store/FSSlaveDirectoryProvider.java | 3 +- .../search/store/RAMDirectoryProvider.java | 3 +- 8 files changed, 36 insertions(+), 20 deletions(-) diff --git a/hibernate-search/src/main/java/org/hibernate/search/InitAndRegisterContext.java b/hibernate-search/src/main/java/org/hibernate/search/InitAndRegisterContext.java index 39de128..68e2bfc 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/InitAndRegisterContext.java +++ b/hibernate-search/src/main/java/org/hibernate/search/InitAndRegisterContext.java @@ -1,5 +1,6 @@ package org.hibernate.search; +import org.hibernate.search.backend.LuceneIndexingParameters; import org.hibernate.search.store.DirectoryProvider; import org.hibernate.search.store.optimization.OptimizerStrategy; @@ -8,4 +9,8 @@ import org.hibernate.search.store.optimization.OptimizerStrategy; */ public interface InitAndRegisterContext extends InitContext { void addOptimizerStrategy(DirectoryProvider provider, OptimizerStrategy optimizerStrategy); + + void addIndexingParameters(DirectoryProvider provider, LuceneIndexingParameters indexingParams); + + void addClassToDirectoryProvider(Class entity, DirectoryProvider directoryProvider, boolean exclusiveIndexUsage); } diff --git a/hibernate-search/src/main/java/org/hibernate/search/InitContext.java b/hibernate-search/src/main/java/org/hibernate/search/InitContext.java index cedebf0..5f02744 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/InitContext.java +++ b/hibernate-search/src/main/java/org/hibernate/search/InitContext.java @@ -1,5 +1,7 @@ package org.hibernate.search; +import org.jcp.xml.dsig.internal.dom.DOMXMLSignature; + import org.hibernate.search.engine.SearchFactoryImplementor; /** @@ -26,4 +28,6 @@ public interface InitContext { * where directoryProviders is a class variable. */ SearchFactoryImplementor getUninitializedSearchFactory(); + + String getIndexingStrategy(); } diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProvider.java b/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProvider.java index 014c812..0547dc1 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProvider.java @@ -27,6 +27,8 @@ package org.hibernate.search.store; import java.util.Properties; import org.apache.lucene.store.Directory; + +import org.hibernate.search.InitContext; import org.hibernate.search.engine.SearchFactoryImplementor; @@ -45,7 +47,7 @@ public interface DirectoryProvider { /** * get the information to initialize the directory and build its hashCode/equals method */ - void initialize(String directoryProviderName, Properties properties, SearchFactoryImplementor searchFactoryImplementor); + void initialize(String directoryProviderName, Properties properties, InitContext context); /** * Executed after initialize, this method set up the heavy process of starting up the DirectoryProvider diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProviderFactory.java b/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProviderFactory.java index 1779cc0..cd822bb 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProviderFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProviderFactory.java @@ -39,7 +39,6 @@ import org.hibernate.search.backend.LuceneIndexingParameters; import org.hibernate.search.backend.configuration.ConfigurationParseHelper; import org.hibernate.search.backend.configuration.MaskedProperty; import org.hibernate.search.cfg.SearchConfiguration; -import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.store.optimization.IncrementalOptimizerStrategy; import org.hibernate.search.store.optimization.NoOpOptimizerStrategy; import org.hibernate.search.store.optimization.OptimizerStrategy; @@ -71,7 +70,7 @@ public class DirectoryProviderFactory { private static final String NBR_OF_SHARDS = SHARDING_STRATEGY + ".nbr_of_shards"; public DirectoryProviders createDirectoryProviders(XClass entity, SearchConfiguration cfg, - SearchFactoryImplementor searchFactoryImplementor, + InitAndRegisterContext context, ReflectionManager reflectionManager) { //get properties String directoryProviderName = getDirectoryProviderName( entity, cfg ); @@ -84,8 +83,10 @@ public class DirectoryProviderFactory { String providerName = nbrOfProviders > 1 ? directoryProviderName + "." + index : directoryProviderName; - providers[index] = createDirectoryProvider( providerName, indexProps[index], - reflectionManager.toClass( entity ), searchFactoryImplementor ); + providers[index] = createDirectoryProvider( + providerName, indexProps[index], + reflectionManager.toClass( entity ), + context ); } //define sharding strategy @@ -116,7 +117,7 @@ public class DirectoryProviderFactory { } private DirectoryProvider createDirectoryProvider(String directoryProviderName, Properties indexProps, - Class entity, SearchFactoryImplementor searchFactoryImplementor) { + Class entity, InitAndRegisterContext context) { String className = indexProps.getProperty( "directory_provider" ); DirectoryProvider provider; if ( StringHelper.isEmpty( className ) ) { @@ -127,7 +128,7 @@ public class DirectoryProviderFactory { DirectoryProviderFactory.class, "directory provider" ); } try { - provider.initialize( directoryProviderName, indexProps, searchFactoryImplementor ); + provider.initialize( directoryProviderName, indexProps, context ); } catch (Exception e) { throw new SearchException( "Unable to initialize directory provider: " + directoryProviderName, e ); @@ -137,15 +138,14 @@ public class DirectoryProviderFactory { if ( index != -1 ) { //share the same Directory provider for the same underlying store final DirectoryProvider directoryProvider = providers.get( index ); - searchFactoryImplementor.addClassToDirectoryProvider( entity, directoryProvider, exclusiveIndexUsage); + context.addClassToDirectoryProvider( entity, directoryProvider, exclusiveIndexUsage); return directoryProvider; } else { - //TODO IARC casting should not be necessary in the end - configureOptimizerStrategy( ( InitAndRegisterContext ) searchFactoryImplementor, indexProps, provider ); - configureIndexingParameters( searchFactoryImplementor, indexProps, provider ); + configureOptimizerStrategy( context, indexProps, provider ); + configureIndexingParameters( context, indexProps, provider ); providers.add( provider ); - searchFactoryImplementor.addClassToDirectoryProvider( entity, provider, exclusiveIndexUsage ); + context.addClassToDirectoryProvider( entity, provider, exclusiveIndexUsage ); return provider; } } @@ -180,10 +180,10 @@ public class DirectoryProviderFactory { * @param directoryProperties The properties extracted from the configuration. * @param provider The directory provider for which to configure the indexing parameters. */ - private void configureIndexingParameters(SearchFactoryImplementor searchFactoryImplementor, + private void configureIndexingParameters(InitAndRegisterContext context, Properties directoryProperties, DirectoryProvider provider) { LuceneIndexingParameters indexingParams = new LuceneIndexingParameters( directoryProperties ); - searchFactoryImplementor.addIndexingParameters( provider, indexingParams ); + context.addIndexingParameters( provider, indexingParams ); } /** diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/FSDirectoryProvider.java b/hibernate-search/src/main/java/org/hibernate/search/store/FSDirectoryProvider.java index bd8e332..5061076 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/FSDirectoryProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/FSDirectoryProvider.java @@ -31,6 +31,8 @@ import java.util.Properties; import org.apache.lucene.store.FSDirectory; import org.slf4j.Logger; +import org.hibernate.search.InitAndRegisterContext; +import org.hibernate.search.InitContext; import org.hibernate.search.SearchException; import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.util.LoggerFactory; @@ -57,9 +59,9 @@ public class FSDirectoryProvider implements DirectoryProvider { private FSDirectory directory; private String indexName; - public void initialize(String directoryProviderName, Properties properties, SearchFactoryImplementor searchFactoryImplementor) { + public void initialize(String directoryProviderName, Properties properties, InitContext context) { // on "manual" indexing skip read-write check on index directory - boolean manual = searchFactoryImplementor.getIndexingStrategy().equals( "manual" ); + boolean manual = context.getIndexingStrategy().equals( "manual" ); File indexDir = DirectoryProviderHelper.getVerifiedIndexDir( directoryProviderName, properties, ! manual ); try { indexName = indexDir.getCanonicalPath(); diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/FSMasterDirectoryProvider.java b/hibernate-search/src/main/java/org/hibernate/search/store/FSMasterDirectoryProvider.java index d444f1b..de8d764 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/FSMasterDirectoryProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/FSMasterDirectoryProvider.java @@ -37,6 +37,7 @@ import java.util.concurrent.locks.Lock; import org.apache.lucene.store.FSDirectory; import org.slf4j.Logger; +import org.hibernate.search.InitContext; import org.hibernate.search.SearchException; import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.util.FileHelper; @@ -79,7 +80,7 @@ public class FSMasterDirectoryProvider implements DirectoryProvider private Properties properties; private TriggerTask task; - public void initialize(String directoryProviderName, Properties properties, SearchFactoryImplementor searchFactoryImplementor) { + public void initialize(String directoryProviderName, Properties properties, InitContext context) { this.properties = properties; this.directoryProviderName = directoryProviderName; //source guessing @@ -95,7 +96,7 @@ public class FSMasterDirectoryProvider implements DirectoryProvider throw new SearchException( "Unable to initialize index: " + directoryProviderName, e ); } copyChunkSize = DirectoryProviderHelper.getCopyBufferSize( directoryProviderName, properties ); - this.searchFactory = searchFactoryImplementor; + this.searchFactory = context.getUninitializedSearchFactory(); current = 0; //write to volatile to publish all state } diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java b/hibernate-search/src/main/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java index b8c0904..4e08a36 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java @@ -37,6 +37,7 @@ import org.apache.lucene.store.FSDirectory; import org.slf4j.Logger; import org.hibernate.AssertionFailure; +import org.hibernate.search.InitContext; import org.hibernate.search.SearchException; import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.util.FileHelper; @@ -74,7 +75,7 @@ public class FSSlaveDirectoryProvider implements DirectoryProvider private Properties properties; private TriggerTask task; - public void initialize(String directoryProviderName, Properties properties, SearchFactoryImplementor searchFactoryImplementor) { + public void initialize(String directoryProviderName, Properties properties, InitContext context) { this.properties = properties; this.directoryProviderName = directoryProviderName; //source guessing diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/RAMDirectoryProvider.java b/hibernate-search/src/main/java/org/hibernate/search/store/RAMDirectoryProvider.java index cf23f61..f2189d4 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/RAMDirectoryProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/RAMDirectoryProvider.java @@ -31,6 +31,7 @@ import org.apache.lucene.analysis.SimpleAnalyzer; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.store.RAMDirectory; import org.hibernate.HibernateException; +import org.hibernate.search.InitContext; import org.hibernate.search.engine.SearchFactoryImplementor; /** @@ -44,7 +45,7 @@ public class RAMDirectoryProvider implements DirectoryProvider { private final RAMDirectory directory = new RAMDirectory(); private String indexName; - public void initialize(String directoryProviderName, Properties properties, SearchFactoryImplementor searchFactoryImplementor) { + public void initialize(String directoryProviderName, Properties properties, InitContext context) { indexName = directoryProviderName; directory.setLockFactory( DirectoryProviderHelper.createLockFactory( null, properties ) ); } -- 1.6.5.1 From 778543821c7f5072362f7d219b279d2deff91fc9 Mon Sep 17 00:00:00 2001 From: Emmanuel Bernard Date: Fri, 4 Jun 2010 14:39:04 +0200 Subject: [PATCH 5/8] HSEARCH-541 Introduce InitContext to ReaderProvider --- .../java/org/hibernate/search/InitContext.java | 5 +++++ .../search/reader/NotSharedReaderProvider.java | 4 +++- .../hibernate/search/reader/ReaderProvider.java | 4 +++- .../search/reader/ReaderProviderFactory.java | 5 +++-- .../search/reader/SharedReaderProvider.java | 11 ++++++----- .../search/reader/SharingBufferReaderProvider.java | 6 +++--- .../TestableSharingBufferReaderProvider.java | 8 ++++---- 7 files changed, 27 insertions(+), 16 deletions(-) diff --git a/hibernate-search/src/main/java/org/hibernate/search/InitContext.java b/hibernate-search/src/main/java/org/hibernate/search/InitContext.java index 5f02744..a3afff6 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/InitContext.java +++ b/hibernate-search/src/main/java/org/hibernate/search/InitContext.java @@ -1,8 +1,11 @@ package org.hibernate.search; +import java.util.Set; + import org.jcp.xml.dsig.internal.dom.DOMXMLSignature; import org.hibernate.search.engine.SearchFactoryImplementor; +import org.hibernate.search.store.DirectoryProvider; /** * @author Emmanuel Bernard @@ -30,4 +33,6 @@ public interface InitContext { SearchFactoryImplementor getUninitializedSearchFactory(); String getIndexingStrategy(); + + Set> getDirectoryProviders(); } diff --git a/hibernate-search/src/main/java/org/hibernate/search/reader/NotSharedReaderProvider.java b/hibernate-search/src/main/java/org/hibernate/search/reader/NotSharedReaderProvider.java index 6f5ec56..ad24e1d 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/reader/NotSharedReaderProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/reader/NotSharedReaderProvider.java @@ -28,6 +28,8 @@ import java.io.IOException; import java.util.Properties; import org.apache.lucene.index.IndexReader; + +import org.hibernate.search.InitContext; import org.hibernate.search.SearchException; import org.hibernate.search.engine.SearchFactoryImplementor; import static org.hibernate.search.reader.ReaderProviderHelper.buildMultiReader; @@ -68,7 +70,7 @@ public class NotSharedReaderProvider implements ReaderProvider { } } - public void initialize(Properties props, SearchFactoryImplementor searchFactoryImplementor) { + public void initialize(Properties props, InitContext context) { } public void destroy() { diff --git a/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProvider.java b/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProvider.java index 8e088a5..4f9848c 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProvider.java @@ -27,6 +27,8 @@ package org.hibernate.search.reader; import java.util.Properties; import org.apache.lucene.index.IndexReader; + +import org.hibernate.search.InitContext; import org.hibernate.search.store.DirectoryProvider; import org.hibernate.search.engine.SearchFactoryImplementor; @@ -55,7 +57,7 @@ public interface ReaderProvider { /** * Inialize the reader provider before its use. */ - void initialize(Properties props, SearchFactoryImplementor searchFactoryImplementor); + void initialize(Properties props, InitContext context); /** * Called when a SearchFactory is destroyed. This method typically releases resources. diff --git a/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProviderFactory.java b/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProviderFactory.java index 59a715b..02d6aa1 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProviderFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProviderFactory.java @@ -28,6 +28,7 @@ import java.util.Map; import java.util.Properties; import org.hibernate.search.Environment; +import org.hibernate.search.InitContext; import org.hibernate.search.cfg.SearchConfiguration; import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.util.PluginLoader; @@ -50,7 +51,7 @@ public abstract class ReaderProviderFactory { return workerProperties; } - public static ReaderProvider createReaderProvider(SearchConfiguration cfg, SearchFactoryImplementor searchFactoryImplementor) { + public static ReaderProvider createReaderProvider(SearchConfiguration cfg, InitContext context) { Properties props = getProperties( cfg ); String impl = props.getProperty( Environment.READER_STRATEGY ); ReaderProvider readerProvider; @@ -72,7 +73,7 @@ public abstract class ReaderProviderFactory { readerProvider = PluginLoader.instanceFromName( ReaderProvider.class, impl, ReaderProviderFactory.class, "readerProvider" ); } - readerProvider.initialize( props, searchFactoryImplementor ); + readerProvider.initialize( props, context ); return readerProvider; } } diff --git a/hibernate-search/src/main/java/org/hibernate/search/reader/SharedReaderProvider.java b/hibernate-search/src/main/java/org/hibernate/search/reader/SharedReaderProvider.java index 179f02a..46fa3f1 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/reader/SharedReaderProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/reader/SharedReaderProvider.java @@ -38,13 +38,14 @@ import org.apache.lucene.index.MultiReader; import org.slf4j.Logger; import org.hibernate.annotations.common.AssertionFailure; +import org.hibernate.search.InitContext; import org.hibernate.search.SearchException; -import org.hibernate.search.engine.SearchFactoryImplementor; -import static org.hibernate.search.reader.ReaderProviderHelper.buildMultiReader; -import static org.hibernate.search.reader.ReaderProviderHelper.clean; import org.hibernate.search.store.DirectoryProvider; import org.hibernate.search.util.LoggerFactory; +import static org.hibernate.search.reader.ReaderProviderHelper.buildMultiReader; +import static org.hibernate.search.reader.ReaderProviderHelper.clean; + /** * Share readers per SearchFactory, reusing them if they are still valid. * This class contains several bugs including HSEARCH-211. Since it is deprecated we are not going to @@ -346,8 +347,8 @@ public class SharedReaderProvider implements ReaderProvider { } } - public void initialize(Properties props, SearchFactoryImplementor searchFactoryImplementor) { - Set> providers = searchFactoryImplementor.getDirectoryProviders(); + public void initialize(Properties props, InitContext context) { + Set> providers = context.getDirectoryProviders(); perDirectoryProviderManipulationLocks = new HashMap( providers.size() ); for ( DirectoryProvider dp : providers ) { perDirectoryProviderManipulationLocks.put( dp, new ReentrantLock() ); diff --git a/hibernate-search/src/main/java/org/hibernate/search/reader/SharingBufferReaderProvider.java b/hibernate-search/src/main/java/org/hibernate/search/reader/SharingBufferReaderProvider.java index 0eee165..2fe14f3 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/reader/SharingBufferReaderProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/reader/SharingBufferReaderProvider.java @@ -39,8 +39,8 @@ import org.apache.lucene.store.Directory; import org.slf4j.Logger; import org.hibernate.annotations.common.AssertionFailure; +import org.hibernate.search.InitContext; import org.hibernate.search.SearchException; -import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.store.DirectoryProvider; import org.hibernate.search.util.LoggerFactory; @@ -86,8 +86,8 @@ public class SharingBufferReaderProvider implements ReaderProvider { log.trace( "IndexReader closed." ); } - public void initialize(Properties props, SearchFactoryImplementor searchFactoryImplementor) { - Set> providers = searchFactoryImplementor.getDirectoryProviders(); + public void initialize(Properties props, InitContext context) { + Set> providers = context.getDirectoryProviders(); // create the readers for the known providers. Unfortunately, it is not possible to // create all readers in initialize since some providers have more than one directory (eg diff --git a/hibernate-search/src/test/java/org/hibernate/search/test/reader/functionality/TestableSharingBufferReaderProvider.java b/hibernate-search/src/test/java/org/hibernate/search/test/reader/functionality/TestableSharingBufferReaderProvider.java index 417e3a4..a91932f 100644 --- a/hibernate-search/src/test/java/org/hibernate/search/test/reader/functionality/TestableSharingBufferReaderProvider.java +++ b/hibernate-search/src/test/java/org/hibernate/search/test/reader/functionality/TestableSharingBufferReaderProvider.java @@ -25,13 +25,13 @@ package org.hibernate.search.test.reader.functionality; import java.io.IOException; +import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Vector; -import java.util.ArrayList; -import java.util.Collections; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; @@ -47,8 +47,8 @@ import org.apache.lucene.index.TermPositions; import org.apache.lucene.index.TermVectorMapper; import org.apache.lucene.store.Directory; +import org.hibernate.search.InitContext; import org.hibernate.search.SearchException; -import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.reader.ReaderProviderHelper; import org.hibernate.search.reader.SharingBufferReaderProvider; import org.hibernate.search.store.DirectoryProvider; @@ -111,7 +111,7 @@ public class TestableSharingBufferReaderProvider extends SharingBufferReaderProv } @Override - public void initialize(Properties props, SearchFactoryImplementor searchFactoryImplementor) { + public void initialize(Properties props, InitContext context) { try { for ( Directory directory : manipulators.keySet() ) { currentReaders.put( directory, new PerDirectoryLatestReader( directory ) ); -- 1.6.5.1 From 4dff2aa73363a250c08ca04b6191a067cbd06039 Mon Sep 17 00:00:00 2001 From: Emmanuel Bernard Date: Mon, 7 Jun 2010 15:22:55 +0200 Subject: [PATCH 6/8] HSEARCH-541 Introduce InitContext to Worker and BackendQueueProcessorFactory --- .../hibernate/search/InitAndRegisterContext.java | 1 + .../search/InitContextPostDocumentBuilder.java | 26 ++++++++++++++++++++ .../backend/BackendQueueProcessorFactory.java | 4 ++- .../java/org/hibernate/search/backend/Worker.java | 4 +- .../hibernate/search/backend/WorkerFactory.java | 6 ++-- .../org/hibernate/search/backend/Workspace.java | 15 ++++++----- .../backend/impl/BatchedQueueingProcessor.java | 10 ++++--- .../search/backend/impl/TransactionalWorker.java | 12 ++++---- .../backend/impl/batchlucene/BatchBackend.java | 4 +- .../batchlucene/DirectoryProviderWorkspace.java | 9 ++++--- .../impl/batchlucene/LuceneBatchBackend.java | 9 ++++--- .../BlackHoleBackendQueueProcessorFactory.java | 3 +- .../JGroupsBackendQueueProcessorFactory.java | 6 ++-- .../MasterJGroupsBackendQueueProcessorFactory.java | 12 ++++---- .../impl/jms/JMSBackendQueueProcessorFactory.java | 4 ++- .../lucene/LuceneBackendQueueProcessorFactory.java | 10 ++++--- .../search/backend/impl/lucene/PerDPResources.java | 9 ++++--- .../hibernate/search/impl/SearchFactoryImpl.java | 3 +- 18 files changed, 94 insertions(+), 53 deletions(-) create mode 100644 hibernate-search/src/main/java/org/hibernate/search/InitContextPostDocumentBuilder.java diff --git a/hibernate-search/src/main/java/org/hibernate/search/InitAndRegisterContext.java b/hibernate-search/src/main/java/org/hibernate/search/InitAndRegisterContext.java index 68e2bfc..74af2f5 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/InitAndRegisterContext.java +++ b/hibernate-search/src/main/java/org/hibernate/search/InitAndRegisterContext.java @@ -1,5 +1,6 @@ package org.hibernate.search; +import org.hibernate.search.backend.BackendQueueProcessorFactory; import org.hibernate.search.backend.LuceneIndexingParameters; import org.hibernate.search.store.DirectoryProvider; import org.hibernate.search.store.optimization.OptimizerStrategy; diff --git a/hibernate-search/src/main/java/org/hibernate/search/InitContextPostDocumentBuilder.java b/hibernate-search/src/main/java/org/hibernate/search/InitContextPostDocumentBuilder.java new file mode 100644 index 0000000..30c0950 --- /dev/null +++ b/hibernate-search/src/main/java/org/hibernate/search/InitContextPostDocumentBuilder.java @@ -0,0 +1,26 @@ +package org.hibernate.search; + +import java.util.Set; +import java.util.concurrent.locks.ReentrantLock; + +import org.apache.lucene.search.Similarity; + +import org.hibernate.search.backend.BackendQueueProcessorFactory; +import org.hibernate.search.backend.LuceneIndexingParameters; +import org.hibernate.search.exception.ErrorHandler; +import org.hibernate.search.store.DirectoryProvider; +import org.hibernate.search.store.optimization.OptimizerStrategy; + +/** + * @author Emmanuel Bernard + */ +public interface InitContextPostDocumentBuilder extends InitContext { + void setBackendQueueProcessorFactory(BackendQueueProcessorFactory backendQueueProcessorFactory); + public OptimizerStrategy getOptimizerStrategy(DirectoryProvider provider); + Set> getClassesInDirectoryProvider(DirectoryProvider provider); + LuceneIndexingParameters getIndexingParameters(DirectoryProvider directoryProvider); + ReentrantLock getDirectoryProviderLock(DirectoryProvider provider); + Similarity getSimilarity(DirectoryProvider directoryProvider); + boolean isExclusiveIndexUsageEnabled(DirectoryProvider directoryProvider); + ErrorHandler getErrorHandler(); +} diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java b/hibernate-search/src/main/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java index c3aba79..2422bb2 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java @@ -27,6 +27,8 @@ package org.hibernate.search.backend; import java.util.Properties; import java.util.List; +import org.hibernate.search.InitAndRegisterContext; +import org.hibernate.search.InitContextPostDocumentBuilder; import org.hibernate.search.engine.SearchFactoryImplementor; /** @@ -42,7 +44,7 @@ public interface BackendQueueProcessorFactory { * @param props all configuration properties * @param searchFactory the client */ - void initialize(Properties props, SearchFactoryImplementor searchFactory); + void initialize(Properties props, InitContextPostDocumentBuilder context); /** * Return a runnable implementation responsible for processing the queue to a given backend. diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/Worker.java b/hibernate-search/src/main/java/org/hibernate/search/backend/Worker.java index cae2d37..2b8dba9 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/Worker.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/Worker.java @@ -26,7 +26,7 @@ package org.hibernate.search.backend; import java.util.Properties; -import org.hibernate.search.engine.SearchFactoryImplementor; +import org.hibernate.search.InitContextPostDocumentBuilder; /** * Perform work for a given session. This implementation has to be multi threaded. @@ -41,7 +41,7 @@ public interface Worker { */ void performWork(Work work, TransactionContext transactionContext); - void initialize(Properties props, SearchFactoryImplementor searchFactoryImplementor); + void initialize(Properties props, InitContextPostDocumentBuilder context); /** * clean resources diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/WorkerFactory.java b/hibernate-search/src/main/java/org/hibernate/search/backend/WorkerFactory.java index d2c8885..b0b24ac 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/WorkerFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/WorkerFactory.java @@ -28,9 +28,9 @@ import java.util.Map; import java.util.Properties; import org.hibernate.search.Environment; +import org.hibernate.search.InitContextPostDocumentBuilder; import org.hibernate.search.backend.impl.TransactionalWorker; import org.hibernate.search.cfg.SearchConfiguration; -import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.util.PluginLoader; import org.hibernate.util.StringHelper; @@ -52,7 +52,7 @@ public abstract class WorkerFactory { return workerProperties; } - public static Worker createWorker(SearchConfiguration cfg, SearchFactoryImplementor searchFactoryImplementor) { + public static Worker createWorker(SearchConfiguration cfg, InitContextPostDocumentBuilder context) { Properties props = getProperties( cfg ); String impl = props.getProperty( Environment.WORKER_SCOPE ); Worker worker; @@ -66,7 +66,7 @@ public abstract class WorkerFactory { worker = PluginLoader.instanceFromName( Worker.class, impl, WorkerFactory.class, "worker" ); } - worker.initialize( props, searchFactoryImplementor ); + worker.initialize( props, context ); return worker; } diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/Workspace.java b/hibernate-search/src/main/java/org/hibernate/search/backend/Workspace.java index 96b5b9c..2ce58d0 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/Workspace.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/Workspace.java @@ -35,6 +35,7 @@ import org.apache.lucene.index.IndexWriter; import org.apache.lucene.search.Similarity; import org.slf4j.Logger; +import org.hibernate.search.InitContextPostDocumentBuilder; import org.hibernate.search.SearchException; import org.hibernate.search.SearchFactory; import org.hibernate.search.engine.DocumentBuilderIndexedEntity; @@ -82,14 +83,14 @@ public class Workspace { */ private final AtomicLong operations = new AtomicLong( 0L ); - public Workspace(SearchFactoryImplementor searchFactoryImplementor, DirectoryProvider provider) { - this.searchFactoryImplementor = searchFactoryImplementor; + public Workspace(InitContextPostDocumentBuilder context, DirectoryProvider provider) { + this.searchFactoryImplementor = context.getUninitializedSearchFactory(); this.directoryProvider = provider; - this.optimizerStrategy = searchFactoryImplementor.getOptimizerStrategy( directoryProvider ); - this.entitiesInDirectory = searchFactoryImplementor.getClassesInDirectoryProvider( provider ); - this.indexingParams = searchFactoryImplementor.getIndexingParameters( directoryProvider ); - this.lock = searchFactoryImplementor.getDirectoryProviderLock( provider ); - this.similarity = searchFactoryImplementor.getSimilarity( directoryProvider ); + this.optimizerStrategy = context.getOptimizerStrategy( directoryProvider ); + this.entitiesInDirectory = context.getClassesInDirectoryProvider( provider ); + this.indexingParams = context.getIndexingParameters( directoryProvider ); + this.lock = context.getDirectoryProviderLock( provider ); + this.similarity = context.getSimilarity( directoryProvider ); } public DocumentBuilderIndexedEntity getDocumentBuilder(Class entity) { diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java index 46d1bf1..dcdd0a7 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java @@ -38,6 +38,8 @@ import org.slf4j.Logger; import org.hibernate.Hibernate; import org.hibernate.annotations.common.AssertionFailure; import org.hibernate.search.Environment; +import org.hibernate.search.InitAndRegisterContext; +import org.hibernate.search.InitContextPostDocumentBuilder; import org.hibernate.search.backend.AddLuceneWork; import org.hibernate.search.backend.BackendQueueProcessorFactory; import org.hibernate.search.backend.DeleteLuceneWork; @@ -76,8 +78,7 @@ public class BatchedQueueingProcessor implements QueueingProcessor { private final BackendQueueProcessorFactory backendQueueProcessorFactory; private final SearchFactoryImplementor searchFactoryImplementor; - public BatchedQueueingProcessor(SearchFactoryImplementor searchFactoryImplementor, Properties properties) { - this.searchFactoryImplementor = searchFactoryImplementor; + public BatchedQueueingProcessor(InitContextPostDocumentBuilder context, Properties properties) { this.sync = isConfiguredAsSync( properties ); //default to a simple asynchronous operation @@ -118,8 +119,9 @@ public class BatchedQueueingProcessor implements QueueingProcessor { backendQueueProcessorFactory = PluginLoader.instanceFromName( BackendQueueProcessorFactory.class, backend, BatchedQueueingProcessor.class, "processor" ); } - backendQueueProcessorFactory.initialize( properties, searchFactoryImplementor ); - searchFactoryImplementor.setBackendQueueProcessorFactory( backendQueueProcessorFactory ); + backendQueueProcessorFactory.initialize( properties, context ); + context.setBackendQueueProcessorFactory( backendQueueProcessorFactory ); + this.searchFactoryImplementor = context.getUninitializedSearchFactory(); } public void add(Work work, WorkQueue workQueue) { diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/TransactionalWorker.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/TransactionalWorker.java index 6a6d88c..698c050 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/TransactionalWorker.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/TransactionalWorker.java @@ -25,18 +25,18 @@ package org.hibernate.search.backend.impl; import java.util.Properties; - import javax.transaction.Synchronization; +import org.slf4j.Logger; + +import org.hibernate.search.InitContextPostDocumentBuilder; import org.hibernate.search.backend.QueueingProcessor; +import org.hibernate.search.backend.TransactionContext; import org.hibernate.search.backend.Work; import org.hibernate.search.backend.WorkQueue; import org.hibernate.search.backend.Worker; -import org.hibernate.search.backend.TransactionContext; -import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.util.LoggerFactory; import org.hibernate.search.util.WeakIdentityHashMap; -import org.slf4j.Logger; /** * Queue works per transaction. @@ -84,8 +84,8 @@ public class TransactionalWorker implements Worker { } } - public void initialize(Properties props, SearchFactoryImplementor searchFactory) { - this.queueingProcessor = new BatchedQueueingProcessor( searchFactory, props ); + public void initialize(Properties props, InitContextPostDocumentBuilder context) { + this.queueingProcessor = new BatchedQueueingProcessor( context, props ); } public void close() { diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/BatchBackend.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/BatchBackend.java index 654c100..f741b7d 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/BatchBackend.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/BatchBackend.java @@ -27,9 +27,9 @@ package org.hibernate.search.backend.impl.batchlucene; import java.util.Properties; import java.util.concurrent.TimeUnit; +import org.hibernate.search.InitContextPostDocumentBuilder; import org.hibernate.search.backend.LuceneWork; import org.hibernate.search.batchindexing.MassIndexerProgressMonitor; -import org.hibernate.search.engine.SearchFactoryImplementor; /** * Implementors of this interface are not drop-in replacements for the standard BackendQueueProcessorFactory @@ -46,7 +46,7 @@ public interface BatchBackend { * @param props all configuration properties * @param searchFactory the client */ - void initialize(Properties props, MassIndexerProgressMonitor monitor, SearchFactoryImplementor searchFactory); + void initialize(Properties props, MassIndexerProgressMonitor monitor, InitContextPostDocumentBuilder context); /** * Enqueues one work to be processed asynchronously diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/DirectoryProviderWorkspace.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/DirectoryProviderWorkspace.java index c13cb33..5ddb87c 100755 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/DirectoryProviderWorkspace.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/DirectoryProviderWorkspace.java @@ -28,6 +28,9 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; +import org.slf4j.Logger; + +import org.hibernate.search.InitContextPostDocumentBuilder; import org.hibernate.search.SearchException; import org.hibernate.search.backend.LuceneWork; import org.hibernate.search.backend.Workspace; @@ -35,10 +38,8 @@ import org.hibernate.search.backend.impl.lucene.works.LuceneWorkDelegate; import org.hibernate.search.backend.impl.lucene.works.LuceneWorkVisitor; import org.hibernate.search.batchindexing.Executors; import org.hibernate.search.batchindexing.MassIndexerProgressMonitor; -import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.store.DirectoryProvider; import org.hibernate.search.util.LoggerFactory; -import org.slf4j.Logger; /** * Collects all resources needed to apply changes to one index. @@ -61,12 +62,12 @@ class DirectoryProviderWorkspace { private final AtomicBoolean closed = new AtomicBoolean( false ); - DirectoryProviderWorkspace(SearchFactoryImplementor searchFactoryImp, DirectoryProvider dp, MassIndexerProgressMonitor monitor, int maxThreads) { + DirectoryProviderWorkspace(InitContextPostDocumentBuilder context, DirectoryProvider dp, MassIndexerProgressMonitor monitor, int maxThreads) { if ( maxThreads < 1 ) { throw new IllegalArgumentException( "maxThreads needs to be at least 1" ); } this.monitor = monitor; - workspace = new Workspace( searchFactoryImp, dp ); + workspace = new Workspace( context, dp ); visitor = new LuceneWorkVisitor( workspace ); executor = Executors.newFixedThreadPool( maxThreads, "indexwriter" ); } diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/LuceneBatchBackend.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/LuceneBatchBackend.java index ed57206..19a5d51 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/LuceneBatchBackend.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/LuceneBatchBackend.java @@ -30,6 +30,7 @@ import java.util.Properties; import java.util.concurrent.TimeUnit; import org.hibernate.search.Environment; +import org.hibernate.search.InitContextPostDocumentBuilder; import org.hibernate.search.SearchException; import org.hibernate.search.backend.LuceneWork; import org.hibernate.search.backend.configuration.ConfigurationParseHelper; @@ -59,14 +60,14 @@ public class LuceneBatchBackend implements BatchBackend { private final PerDirectoryWorkProcessor asyncWorker = new AsyncBatchPerDirectoryWorkProcessor(); private final PerDirectoryWorkProcessor syncWorker = new SyncBatchPerDirectoryWorkProcessor(); - public void initialize(Properties cfg, MassIndexerProgressMonitor monitor, SearchFactoryImplementor searchFactoryImplementor) { - this.searchFactoryImplementor = searchFactoryImplementor; + public void initialize(Properties cfg, MassIndexerProgressMonitor monitor, InitContextPostDocumentBuilder context) { + this.searchFactoryImplementor = context.getUninitializedSearchFactory(); int maxThreadsPerIndex = ConfigurationParseHelper.getIntValue( cfg, "concurrent_writers", 2 ); if ( maxThreadsPerIndex < 1 ) { throw new SearchException( "concurrent_writers for batch backend must be at least 1." ); } - for ( DirectoryProvider dp : searchFactoryImplementor.getDirectoryProviders() ) { - DirectoryProviderWorkspace resources = new DirectoryProviderWorkspace( searchFactoryImplementor, dp, monitor, maxThreadsPerIndex ); + for ( DirectoryProvider dp : context.getDirectoryProviders() ) { + DirectoryProviderWorkspace resources = new DirectoryProviderWorkspace( context, dp, monitor, maxThreadsPerIndex ); resourcesMap.put( dp, resources ); } } diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/blackhole/BlackHoleBackendQueueProcessorFactory.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/blackhole/BlackHoleBackendQueueProcessorFactory.java index 3f634c1..27b1ce2 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/blackhole/BlackHoleBackendQueueProcessorFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/blackhole/BlackHoleBackendQueueProcessorFactory.java @@ -27,6 +27,7 @@ package org.hibernate.search.backend.impl.blackhole; import java.util.List; import java.util.Properties; +import org.hibernate.search.InitContextPostDocumentBuilder; import org.hibernate.search.backend.BackendQueueProcessorFactory; import org.hibernate.search.backend.LuceneWork; import org.hibernate.search.engine.SearchFactoryImplementor; @@ -52,7 +53,7 @@ public class BlackHoleBackendQueueProcessorFactory implements BackendQueueProces return noOp; } - public void initialize(Properties props, SearchFactoryImplementor searchFactory) { + public void initialize(Properties props, InitContextPostDocumentBuilder context) { // no-op log.warn( "initialized \"blackhole\" backend. Index changes will be prepared but discarded!" ); } diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/JGroupsBackendQueueProcessorFactory.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/JGroupsBackendQueueProcessorFactory.java index 04242ad..cf25728 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/JGroupsBackendQueueProcessorFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/JGroupsBackendQueueProcessorFactory.java @@ -35,6 +35,7 @@ import org.jgroups.JChannel; import org.slf4j.Logger; import org.hibernate.search.Environment; +import org.hibernate.search.InitContextPostDocumentBuilder; import org.hibernate.search.SearchException; import org.hibernate.search.backend.BackendQueueProcessorFactory; import org.hibernate.search.backend.LuceneWork; @@ -67,13 +68,12 @@ public abstract class JGroupsBackendQueueProcessorFactory implements BackendQueu protected Channel channel = null; protected Address address; - public void initialize(Properties props, SearchFactoryImplementor searchFactory) { - this.searchFactory = searchFactory; + public void initialize(Properties props, InitContextPostDocumentBuilder context) { + this.searchFactory = context.getUninitializedSearchFactory(); if ( props.containsKey( JG_CLUSTER_NAME ) ) { setClusterName( props.getProperty( JG_CLUSTER_NAME ) ); } - prepareJGroupsChannel( props ); } diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/MasterJGroupsBackendQueueProcessorFactory.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/MasterJGroupsBackendQueueProcessorFactory.java index 94ad500..3220f39 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/MasterJGroupsBackendQueueProcessorFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/MasterJGroupsBackendQueueProcessorFactory.java @@ -29,6 +29,7 @@ import java.util.Properties; import org.jgroups.Receiver; +import org.hibernate.search.InitContextPostDocumentBuilder; import org.hibernate.search.backend.LuceneWork; import org.hibernate.search.backend.impl.lucene.LuceneBackendQueueProcessorFactory; import org.hibernate.search.engine.SearchFactoryImplementor; @@ -48,10 +49,9 @@ public class MasterJGroupsBackendQueueProcessorFactory extends JGroupsBackendQue private Receiver masterListener; @Override - public void initialize(Properties props, SearchFactoryImplementor searchFactory) { - super.initialize( props, searchFactory ); - initLuceneBackendQueueProcessorFactory( props, searchFactory ); - + public void initialize(Properties props, InitContextPostDocumentBuilder context) { + super.initialize( props, context ); + initLuceneBackendQueueProcessorFactory( props, context ); registerMasterListener(); } @@ -65,9 +65,9 @@ public class MasterJGroupsBackendQueueProcessorFactory extends JGroupsBackendQue channel.setReceiver( masterListener ); } - private void initLuceneBackendQueueProcessorFactory(Properties props, SearchFactoryImplementor searchFactory) { + private void initLuceneBackendQueueProcessorFactory(Properties props, InitContextPostDocumentBuilder context) { luceneBackendQueueProcessorFactory = new LuceneBackendQueueProcessorFactory(); - luceneBackendQueueProcessorFactory.initialize( props, searchFactory ); + luceneBackendQueueProcessorFactory.initialize( props, context ); } public Receiver getMasterListener() { diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java index ef603c2..656eb27 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java @@ -35,6 +35,8 @@ import javax.naming.InitialContext; import javax.naming.NamingException; import org.hibernate.search.Environment; +import org.hibernate.search.InitAndRegisterContext; +import org.hibernate.search.InitContextPostDocumentBuilder; import org.hibernate.search.SearchException; import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.backend.BackendQueueProcessorFactory; @@ -53,7 +55,7 @@ public class JMSBackendQueueProcessorFactory implements BackendQueueProcessorFac public static final String JMS_CONNECTION_FACTORY = Environment.WORKER_PREFIX + "jms.connection_factory"; public static final String JMS_QUEUE = Environment.WORKER_PREFIX + "jms.queue"; - public void initialize(Properties props, SearchFactoryImplementor searchFactoryImplementor) { + public void initialize(Properties props, InitContextPostDocumentBuilder context) { //TODO proper exception if jms queues and connecitons are not there this.properties = props; this.jmsConnectionFactoryName = props.getProperty( JMS_CONNECTION_FACTORY ); diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java index 71982f0..cf6fc37 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java @@ -29,6 +29,8 @@ import java.util.Map; import java.util.Properties; import java.util.List; +import org.hibernate.search.InitAndRegisterContext; +import org.hibernate.search.InitContextPostDocumentBuilder; import org.hibernate.search.backend.BackendQueueProcessorFactory; import org.hibernate.search.backend.LuceneWork; import org.hibernate.search.backend.impl.BatchedQueueingProcessor; @@ -63,11 +65,11 @@ public class LuceneBackendQueueProcessorFactory implements BackendQueueProcessor */ private boolean sync; - public void initialize(Properties props, SearchFactoryImplementor searchFactoryImplementor) { - this.searchFactoryImp = searchFactoryImplementor; + public void initialize(Properties props, InitContextPostDocumentBuilder context) { + this.searchFactoryImp = context.getUninitializedSearchFactory(); this.sync = BatchedQueueingProcessor.isConfiguredAsSync( props ); - for (DirectoryProvider dp : searchFactoryImplementor.getDirectoryProviders() ) { - PerDPResources resources = new PerDPResources( searchFactoryImplementor, dp ); + for (DirectoryProvider dp : context.getDirectoryProviders() ) { + PerDPResources resources = new PerDPResources( context, dp ); resourcesMap.put( dp, resources ); } } diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/PerDPResources.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/PerDPResources.java index 2414601..72bbf34 100755 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/PerDPResources.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/PerDPResources.java @@ -24,6 +24,7 @@ */ package org.hibernate.search.backend.impl.lucene; +import org.hibernate.search.InitContextPostDocumentBuilder; import org.hibernate.search.backend.Workspace; import org.hibernate.search.backend.impl.lucene.works.LuceneWorkVisitor; import org.hibernate.search.batchindexing.Executors; @@ -52,12 +53,12 @@ class PerDPResources { private final boolean exclusiveIndexUsage; private final ErrorHandler errorHandler; - PerDPResources(SearchFactoryImplementor searchFactoryImp, DirectoryProvider dp) { - workspace = new Workspace( searchFactoryImp, dp ); + PerDPResources(InitContextPostDocumentBuilder context, DirectoryProvider dp) { + workspace = new Workspace( context, dp ); visitor = new LuceneWorkVisitor( workspace ); executor = Executors.newFixedThreadPool( 1, "Directory writer" ); - exclusiveIndexUsage = searchFactoryImp.isExclusiveIndexUsageEnabled( dp ); - errorHandler = searchFactoryImp.getErrorHandler(); + exclusiveIndexUsage = context.isExclusiveIndexUsageEnabled( dp ); + errorHandler = context.getErrorHandler(); } public ExecutorService getExecutor() { diff --git a/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java b/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java index 6cc57d3..a8e4831 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java +++ b/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java @@ -46,6 +46,7 @@ import org.hibernate.annotations.common.reflection.XClass; import org.hibernate.annotations.common.reflection.java.JavaReflectionManager; import org.hibernate.search.Environment; import org.hibernate.search.InitAndRegisterContext; +import org.hibernate.search.InitContextPostDocumentBuilder; import org.hibernate.search.SearchException; import org.hibernate.search.Version; import org.hibernate.search.annotations.AnalyzerDef; @@ -96,7 +97,7 @@ import org.hibernate.search.exception.impl.LogErrorHandler; /** * @author Emmanuel Bernard */ -public class SearchFactoryImpl implements SearchFactoryImplementor, InitAndRegisterContext { +public class SearchFactoryImpl implements SearchFactoryImplementor, InitAndRegisterContext, InitContextPostDocumentBuilder { static { Version.touch(); -- 1.6.5.1 From e62c1a538171a958da3316a97416fe229290be00 Mon Sep 17 00:00:00 2001 From: Emmanuel Bernard Date: Mon, 7 Jun 2010 16:00:13 +0200 Subject: [PATCH 7/8] HSEARCH-541 Rename InitContext classes in BuildContext --- .../java/org/hibernate/search/BuildContext.java | 38 ++++++++++++++++++++ .../hibernate/search/InitAndRegisterContext.java | 17 --------- .../java/org/hibernate/search/InitContext.java | 38 -------------------- .../search/InitContextPostDocumentBuilder.java | 26 ------------- .../org/hibernate/search/WorkerBuildContext.java | 29 +++++++++++++++ .../org/hibernate/search/WritableBuildContext.java | 18 +++++++++ .../backend/BackendQueueProcessorFactory.java | 6 +-- .../java/org/hibernate/search/backend/Worker.java | 4 +- .../hibernate/search/backend/WorkerFactory.java | 4 +- .../org/hibernate/search/backend/Workspace.java | 4 +- .../backend/impl/BatchedQueueingProcessor.java | 5 +-- .../search/backend/impl/TransactionalWorker.java | 4 +- .../backend/impl/batchlucene/BatchBackend.java | 4 +- .../batchlucene/DirectoryProviderWorkspace.java | 4 +- .../impl/batchlucene/LuceneBatchBackend.java | 4 +- .../BlackHoleBackendQueueProcessorFactory.java | 5 +-- .../JGroupsBackendQueueProcessorFactory.java | 4 +- .../MasterJGroupsBackendQueueProcessorFactory.java | 7 ++-- .../impl/jms/JMSBackendQueueProcessorFactory.java | 6 +-- .../lucene/LuceneBackendQueueProcessorFactory.java | 5 +-- .../search/backend/impl/lucene/PerDPResources.java | 5 +-- .../hibernate/search/impl/SearchFactoryImpl.java | 6 ++-- .../search/reader/NotSharedReaderProvider.java | 6 ++-- .../hibernate/search/reader/ReaderProvider.java | 5 +-- .../search/reader/ReaderProviderFactory.java | 5 +-- .../search/reader/SharedReaderProvider.java | 4 +- .../search/reader/SharingBufferReaderProvider.java | 4 +- .../hibernate/search/store/DirectoryProvider.java | 5 +-- .../search/store/DirectoryProviderFactory.java | 10 +++--- .../search/store/FSDirectoryProvider.java | 6 +-- .../search/store/FSMasterDirectoryProvider.java | 4 +- .../search/store/FSSlaveDirectoryProvider.java | 5 +-- .../search/store/RAMDirectoryProvider.java | 5 +-- .../optimization/IncrementalOptimizerStrategy.java | 5 +-- .../store/optimization/NoOpOptimizerStrategy.java | 5 +-- .../store/optimization/OptimizerStrategy.java | 5 +-- .../TestableSharingBufferReaderProvider.java | 4 +- 37 files changed, 153 insertions(+), 168 deletions(-) create mode 100644 hibernate-search/src/main/java/org/hibernate/search/BuildContext.java delete mode 100644 hibernate-search/src/main/java/org/hibernate/search/InitAndRegisterContext.java delete mode 100644 hibernate-search/src/main/java/org/hibernate/search/InitContext.java delete mode 100644 hibernate-search/src/main/java/org/hibernate/search/InitContextPostDocumentBuilder.java create mode 100644 hibernate-search/src/main/java/org/hibernate/search/WorkerBuildContext.java create mode 100644 hibernate-search/src/main/java/org/hibernate/search/WritableBuildContext.java diff --git a/hibernate-search/src/main/java/org/hibernate/search/BuildContext.java b/hibernate-search/src/main/java/org/hibernate/search/BuildContext.java new file mode 100644 index 0000000..8e9dd79 --- /dev/null +++ b/hibernate-search/src/main/java/org/hibernate/search/BuildContext.java @@ -0,0 +1,38 @@ +package org.hibernate.search; + +import java.util.Set; + +import org.hibernate.search.engine.SearchFactoryImplementor; +import org.hibernate.search.store.DirectoryProvider; + +/** + * Build context that can be used by some services at initialization + * + * @author Emmanuel Bernard + */ +public interface BuildContext { + /** + * Returns the SessionFactoryImplementor instance. Do not use until after the initialize method is fully executed. + * Implementations should not cache values provided by the SessionFactoryImplementor but rather access them + * each time: when the configuration is dynamically updated, new changes are available through the + * SearchFactoryImplementor + * For example, prefer + * + * void method() { + * int size = sfi.getDirectoryProviders().size(); + * } + * + * to + * + * void method() { + * int size = directoryProviders().size(); + * } + * + * where directoryProviders is a class variable. + */ + SearchFactoryImplementor getUninitializedSearchFactory(); + + String getIndexingStrategy(); + + Set> getDirectoryProviders(); +} diff --git a/hibernate-search/src/main/java/org/hibernate/search/InitAndRegisterContext.java b/hibernate-search/src/main/java/org/hibernate/search/InitAndRegisterContext.java deleted file mode 100644 index 74af2f5..0000000 --- a/hibernate-search/src/main/java/org/hibernate/search/InitAndRegisterContext.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.hibernate.search; - -import org.hibernate.search.backend.BackendQueueProcessorFactory; -import org.hibernate.search.backend.LuceneIndexingParameters; -import org.hibernate.search.store.DirectoryProvider; -import org.hibernate.search.store.optimization.OptimizerStrategy; - -/** - * @author Emmanuel Bernard - */ -public interface InitAndRegisterContext extends InitContext { - void addOptimizerStrategy(DirectoryProvider provider, OptimizerStrategy optimizerStrategy); - - void addIndexingParameters(DirectoryProvider provider, LuceneIndexingParameters indexingParams); - - void addClassToDirectoryProvider(Class entity, DirectoryProvider directoryProvider, boolean exclusiveIndexUsage); -} diff --git a/hibernate-search/src/main/java/org/hibernate/search/InitContext.java b/hibernate-search/src/main/java/org/hibernate/search/InitContext.java deleted file mode 100644 index a3afff6..0000000 --- a/hibernate-search/src/main/java/org/hibernate/search/InitContext.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.hibernate.search; - -import java.util.Set; - -import org.jcp.xml.dsig.internal.dom.DOMXMLSignature; - -import org.hibernate.search.engine.SearchFactoryImplementor; -import org.hibernate.search.store.DirectoryProvider; - -/** - * @author Emmanuel Bernard - */ -public interface InitContext { - /** - * Returns the SessionFactoryImplementor instance. Do not use until after the initialize method is fully executed. - * Implementations should not cache values provided by the SessionFactoryImplementor but rather access them - * each time: when the configuration is dynamically updated, new changes are available through the - * SearchFactoryImplementor - * For example, prefer - * - * void method() { - * int size = sfi.getDirectoryProviders().size(); - * } - * - * to - * - * void method() { - * int size = directoryProviders().size(); - * } - * - * where directoryProviders is a class variable. - */ - SearchFactoryImplementor getUninitializedSearchFactory(); - - String getIndexingStrategy(); - - Set> getDirectoryProviders(); -} diff --git a/hibernate-search/src/main/java/org/hibernate/search/InitContextPostDocumentBuilder.java b/hibernate-search/src/main/java/org/hibernate/search/InitContextPostDocumentBuilder.java deleted file mode 100644 index 30c0950..0000000 --- a/hibernate-search/src/main/java/org/hibernate/search/InitContextPostDocumentBuilder.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.hibernate.search; - -import java.util.Set; -import java.util.concurrent.locks.ReentrantLock; - -import org.apache.lucene.search.Similarity; - -import org.hibernate.search.backend.BackendQueueProcessorFactory; -import org.hibernate.search.backend.LuceneIndexingParameters; -import org.hibernate.search.exception.ErrorHandler; -import org.hibernate.search.store.DirectoryProvider; -import org.hibernate.search.store.optimization.OptimizerStrategy; - -/** - * @author Emmanuel Bernard - */ -public interface InitContextPostDocumentBuilder extends InitContext { - void setBackendQueueProcessorFactory(BackendQueueProcessorFactory backendQueueProcessorFactory); - public OptimizerStrategy getOptimizerStrategy(DirectoryProvider provider); - Set> getClassesInDirectoryProvider(DirectoryProvider provider); - LuceneIndexingParameters getIndexingParameters(DirectoryProvider directoryProvider); - ReentrantLock getDirectoryProviderLock(DirectoryProvider provider); - Similarity getSimilarity(DirectoryProvider directoryProvider); - boolean isExclusiveIndexUsageEnabled(DirectoryProvider directoryProvider); - ErrorHandler getErrorHandler(); -} diff --git a/hibernate-search/src/main/java/org/hibernate/search/WorkerBuildContext.java b/hibernate-search/src/main/java/org/hibernate/search/WorkerBuildContext.java new file mode 100644 index 0000000..a4789f0 --- /dev/null +++ b/hibernate-search/src/main/java/org/hibernate/search/WorkerBuildContext.java @@ -0,0 +1,29 @@ +package org.hibernate.search; + +import java.util.Set; +import java.util.concurrent.locks.ReentrantLock; + +import org.apache.lucene.search.Similarity; + +import org.hibernate.search.backend.BackendQueueProcessorFactory; +import org.hibernate.search.backend.LuceneIndexingParameters; +import org.hibernate.search.exception.ErrorHandler; +import org.hibernate.search.store.DirectoryProvider; +import org.hibernate.search.store.optimization.OptimizerStrategy; + +/** + * Build context for the worker and other backend + * Available after all index, entity metadata are built. + * + * @author Emmanuel Bernard + */ +public interface WorkerBuildContext extends BuildContext { + void setBackendQueueProcessorFactory(BackendQueueProcessorFactory backendQueueProcessorFactory); + public OptimizerStrategy getOptimizerStrategy(DirectoryProvider provider); + Set> getClassesInDirectoryProvider(DirectoryProvider provider); + LuceneIndexingParameters getIndexingParameters(DirectoryProvider directoryProvider); + ReentrantLock getDirectoryProviderLock(DirectoryProvider provider); + Similarity getSimilarity(DirectoryProvider directoryProvider); + boolean isExclusiveIndexUsageEnabled(DirectoryProvider directoryProvider); + ErrorHandler getErrorHandler(); +} diff --git a/hibernate-search/src/main/java/org/hibernate/search/WritableBuildContext.java b/hibernate-search/src/main/java/org/hibernate/search/WritableBuildContext.java new file mode 100644 index 0000000..836e3a6 --- /dev/null +++ b/hibernate-search/src/main/java/org/hibernate/search/WritableBuildContext.java @@ -0,0 +1,18 @@ +package org.hibernate.search; + +import org.hibernate.search.backend.LuceneIndexingParameters; +import org.hibernate.search.store.DirectoryProvider; +import org.hibernate.search.store.optimization.OptimizerStrategy; + +/** + * Build context where new built element can be registered. + * + * @author Emmanuel Bernard + */ +public interface WritableBuildContext extends BuildContext { + void addOptimizerStrategy(DirectoryProvider provider, OptimizerStrategy optimizerStrategy); + + void addIndexingParameters(DirectoryProvider provider, LuceneIndexingParameters indexingParams); + + void addClassToDirectoryProvider(Class entity, DirectoryProvider directoryProvider, boolean exclusiveIndexUsage); +} \ No newline at end of file diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java b/hibernate-search/src/main/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java index 2422bb2..45a2dd5 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java @@ -27,9 +27,7 @@ package org.hibernate.search.backend; import java.util.Properties; import java.util.List; -import org.hibernate.search.InitAndRegisterContext; -import org.hibernate.search.InitContextPostDocumentBuilder; -import org.hibernate.search.engine.SearchFactoryImplementor; +import org.hibernate.search.WorkerBuildContext; /** * Interface for different types of queue processor factories. Implementations need a no-arg constructor. @@ -44,7 +42,7 @@ public interface BackendQueueProcessorFactory { * @param props all configuration properties * @param searchFactory the client */ - void initialize(Properties props, InitContextPostDocumentBuilder context); + void initialize(Properties props, WorkerBuildContext context); /** * Return a runnable implementation responsible for processing the queue to a given backend. diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/Worker.java b/hibernate-search/src/main/java/org/hibernate/search/backend/Worker.java index 2b8dba9..cc2b6d6 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/Worker.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/Worker.java @@ -26,7 +26,7 @@ package org.hibernate.search.backend; import java.util.Properties; -import org.hibernate.search.InitContextPostDocumentBuilder; +import org.hibernate.search.WorkerBuildContext; /** * Perform work for a given session. This implementation has to be multi threaded. @@ -41,7 +41,7 @@ public interface Worker { */ void performWork(Work work, TransactionContext transactionContext); - void initialize(Properties props, InitContextPostDocumentBuilder context); + void initialize(Properties props, WorkerBuildContext context); /** * clean resources diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/WorkerFactory.java b/hibernate-search/src/main/java/org/hibernate/search/backend/WorkerFactory.java index b0b24ac..c8e1c8d 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/WorkerFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/WorkerFactory.java @@ -28,7 +28,7 @@ import java.util.Map; import java.util.Properties; import org.hibernate.search.Environment; -import org.hibernate.search.InitContextPostDocumentBuilder; +import org.hibernate.search.WorkerBuildContext; import org.hibernate.search.backend.impl.TransactionalWorker; import org.hibernate.search.cfg.SearchConfiguration; import org.hibernate.search.util.PluginLoader; @@ -52,7 +52,7 @@ public abstract class WorkerFactory { return workerProperties; } - public static Worker createWorker(SearchConfiguration cfg, InitContextPostDocumentBuilder context) { + public static Worker createWorker(SearchConfiguration cfg, WorkerBuildContext context) { Properties props = getProperties( cfg ); String impl = props.getProperty( Environment.WORKER_SCOPE ); Worker worker; diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/Workspace.java b/hibernate-search/src/main/java/org/hibernate/search/backend/Workspace.java index 2ce58d0..90ee8e6 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/Workspace.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/Workspace.java @@ -35,7 +35,7 @@ import org.apache.lucene.index.IndexWriter; import org.apache.lucene.search.Similarity; import org.slf4j.Logger; -import org.hibernate.search.InitContextPostDocumentBuilder; +import org.hibernate.search.WorkerBuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.SearchFactory; import org.hibernate.search.engine.DocumentBuilderIndexedEntity; @@ -83,7 +83,7 @@ public class Workspace { */ private final AtomicLong operations = new AtomicLong( 0L ); - public Workspace(InitContextPostDocumentBuilder context, DirectoryProvider provider) { + public Workspace(WorkerBuildContext context, DirectoryProvider provider) { this.searchFactoryImplementor = context.getUninitializedSearchFactory(); this.directoryProvider = provider; this.optimizerStrategy = context.getOptimizerStrategy( directoryProvider ); diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java index dcdd0a7..c04db5c 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java @@ -38,8 +38,7 @@ import org.slf4j.Logger; import org.hibernate.Hibernate; import org.hibernate.annotations.common.AssertionFailure; import org.hibernate.search.Environment; -import org.hibernate.search.InitAndRegisterContext; -import org.hibernate.search.InitContextPostDocumentBuilder; +import org.hibernate.search.WorkerBuildContext; import org.hibernate.search.backend.AddLuceneWork; import org.hibernate.search.backend.BackendQueueProcessorFactory; import org.hibernate.search.backend.DeleteLuceneWork; @@ -78,7 +77,7 @@ public class BatchedQueueingProcessor implements QueueingProcessor { private final BackendQueueProcessorFactory backendQueueProcessorFactory; private final SearchFactoryImplementor searchFactoryImplementor; - public BatchedQueueingProcessor(InitContextPostDocumentBuilder context, Properties properties) { + public BatchedQueueingProcessor(WorkerBuildContext context, Properties properties) { this.sync = isConfiguredAsSync( properties ); //default to a simple asynchronous operation diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/TransactionalWorker.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/TransactionalWorker.java index 698c050..13cb377 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/TransactionalWorker.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/TransactionalWorker.java @@ -29,7 +29,7 @@ import javax.transaction.Synchronization; import org.slf4j.Logger; -import org.hibernate.search.InitContextPostDocumentBuilder; +import org.hibernate.search.WorkerBuildContext; import org.hibernate.search.backend.QueueingProcessor; import org.hibernate.search.backend.TransactionContext; import org.hibernate.search.backend.Work; @@ -84,7 +84,7 @@ public class TransactionalWorker implements Worker { } } - public void initialize(Properties props, InitContextPostDocumentBuilder context) { + public void initialize(Properties props, WorkerBuildContext context) { this.queueingProcessor = new BatchedQueueingProcessor( context, props ); } diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/BatchBackend.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/BatchBackend.java index f741b7d..aa7226c 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/BatchBackend.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/BatchBackend.java @@ -27,7 +27,7 @@ package org.hibernate.search.backend.impl.batchlucene; import java.util.Properties; import java.util.concurrent.TimeUnit; -import org.hibernate.search.InitContextPostDocumentBuilder; +import org.hibernate.search.WorkerBuildContext; import org.hibernate.search.backend.LuceneWork; import org.hibernate.search.batchindexing.MassIndexerProgressMonitor; @@ -46,7 +46,7 @@ public interface BatchBackend { * @param props all configuration properties * @param searchFactory the client */ - void initialize(Properties props, MassIndexerProgressMonitor monitor, InitContextPostDocumentBuilder context); + void initialize(Properties props, MassIndexerProgressMonitor monitor, WorkerBuildContext context); /** * Enqueues one work to be processed asynchronously diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/DirectoryProviderWorkspace.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/DirectoryProviderWorkspace.java index 5ddb87c..e16bbee 100755 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/DirectoryProviderWorkspace.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/DirectoryProviderWorkspace.java @@ -30,7 +30,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import org.slf4j.Logger; -import org.hibernate.search.InitContextPostDocumentBuilder; +import org.hibernate.search.WorkerBuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.backend.LuceneWork; import org.hibernate.search.backend.Workspace; @@ -62,7 +62,7 @@ class DirectoryProviderWorkspace { private final AtomicBoolean closed = new AtomicBoolean( false ); - DirectoryProviderWorkspace(InitContextPostDocumentBuilder context, DirectoryProvider dp, MassIndexerProgressMonitor monitor, int maxThreads) { + DirectoryProviderWorkspace(WorkerBuildContext context, DirectoryProvider dp, MassIndexerProgressMonitor monitor, int maxThreads) { if ( maxThreads < 1 ) { throw new IllegalArgumentException( "maxThreads needs to be at least 1" ); } diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/LuceneBatchBackend.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/LuceneBatchBackend.java index 19a5d51..85b3f5c 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/LuceneBatchBackend.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/LuceneBatchBackend.java @@ -30,7 +30,7 @@ import java.util.Properties; import java.util.concurrent.TimeUnit; import org.hibernate.search.Environment; -import org.hibernate.search.InitContextPostDocumentBuilder; +import org.hibernate.search.WorkerBuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.backend.LuceneWork; import org.hibernate.search.backend.configuration.ConfigurationParseHelper; @@ -60,7 +60,7 @@ public class LuceneBatchBackend implements BatchBackend { private final PerDirectoryWorkProcessor asyncWorker = new AsyncBatchPerDirectoryWorkProcessor(); private final PerDirectoryWorkProcessor syncWorker = new SyncBatchPerDirectoryWorkProcessor(); - public void initialize(Properties cfg, MassIndexerProgressMonitor monitor, InitContextPostDocumentBuilder context) { + public void initialize(Properties cfg, MassIndexerProgressMonitor monitor, WorkerBuildContext context) { this.searchFactoryImplementor = context.getUninitializedSearchFactory(); int maxThreadsPerIndex = ConfigurationParseHelper.getIntValue( cfg, "concurrent_writers", 2 ); if ( maxThreadsPerIndex < 1 ) { diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/blackhole/BlackHoleBackendQueueProcessorFactory.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/blackhole/BlackHoleBackendQueueProcessorFactory.java index 27b1ce2..c1e00f6 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/blackhole/BlackHoleBackendQueueProcessorFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/blackhole/BlackHoleBackendQueueProcessorFactory.java @@ -27,10 +27,9 @@ package org.hibernate.search.backend.impl.blackhole; import java.util.List; import java.util.Properties; -import org.hibernate.search.InitContextPostDocumentBuilder; +import org.hibernate.search.WorkerBuildContext; import org.hibernate.search.backend.BackendQueueProcessorFactory; import org.hibernate.search.backend.LuceneWork; -import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.util.LoggerFactory; import org.slf4j.Logger; @@ -53,7 +52,7 @@ public class BlackHoleBackendQueueProcessorFactory implements BackendQueueProces return noOp; } - public void initialize(Properties props, InitContextPostDocumentBuilder context) { + public void initialize(Properties props, WorkerBuildContext context) { // no-op log.warn( "initialized \"blackhole\" backend. Index changes will be prepared but discarded!" ); } diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/JGroupsBackendQueueProcessorFactory.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/JGroupsBackendQueueProcessorFactory.java index cf25728..671e821 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/JGroupsBackendQueueProcessorFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/JGroupsBackendQueueProcessorFactory.java @@ -35,7 +35,7 @@ import org.jgroups.JChannel; import org.slf4j.Logger; import org.hibernate.search.Environment; -import org.hibernate.search.InitContextPostDocumentBuilder; +import org.hibernate.search.WorkerBuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.backend.BackendQueueProcessorFactory; import org.hibernate.search.backend.LuceneWork; @@ -68,7 +68,7 @@ public abstract class JGroupsBackendQueueProcessorFactory implements BackendQueu protected Channel channel = null; protected Address address; - public void initialize(Properties props, InitContextPostDocumentBuilder context) { + public void initialize(Properties props, WorkerBuildContext context) { this.searchFactory = context.getUninitializedSearchFactory(); if ( props.containsKey( JG_CLUSTER_NAME ) ) { diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/MasterJGroupsBackendQueueProcessorFactory.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/MasterJGroupsBackendQueueProcessorFactory.java index 3220f39..077a4d1 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/MasterJGroupsBackendQueueProcessorFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/MasterJGroupsBackendQueueProcessorFactory.java @@ -29,10 +29,9 @@ import java.util.Properties; import org.jgroups.Receiver; -import org.hibernate.search.InitContextPostDocumentBuilder; +import org.hibernate.search.WorkerBuildContext; import org.hibernate.search.backend.LuceneWork; import org.hibernate.search.backend.impl.lucene.LuceneBackendQueueProcessorFactory; -import org.hibernate.search.engine.SearchFactoryImplementor; /** * Backend factory used in JGroups clustering mode in master node. @@ -49,7 +48,7 @@ public class MasterJGroupsBackendQueueProcessorFactory extends JGroupsBackendQue private Receiver masterListener; @Override - public void initialize(Properties props, InitContextPostDocumentBuilder context) { + public void initialize(Properties props, WorkerBuildContext context) { super.initialize( props, context ); initLuceneBackendQueueProcessorFactory( props, context ); registerMasterListener(); @@ -65,7 +64,7 @@ public class MasterJGroupsBackendQueueProcessorFactory extends JGroupsBackendQue channel.setReceiver( masterListener ); } - private void initLuceneBackendQueueProcessorFactory(Properties props, InitContextPostDocumentBuilder context) { + private void initLuceneBackendQueueProcessorFactory(Properties props, WorkerBuildContext context) { luceneBackendQueueProcessorFactory = new LuceneBackendQueueProcessorFactory(); luceneBackendQueueProcessorFactory.initialize( props, context ); } diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java index 656eb27..063e0a5 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java @@ -35,10 +35,8 @@ import javax.naming.InitialContext; import javax.naming.NamingException; import org.hibernate.search.Environment; -import org.hibernate.search.InitAndRegisterContext; -import org.hibernate.search.InitContextPostDocumentBuilder; +import org.hibernate.search.WorkerBuildContext; import org.hibernate.search.SearchException; -import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.backend.BackendQueueProcessorFactory; import org.hibernate.search.backend.LuceneWork; @@ -55,7 +53,7 @@ public class JMSBackendQueueProcessorFactory implements BackendQueueProcessorFac public static final String JMS_CONNECTION_FACTORY = Environment.WORKER_PREFIX + "jms.connection_factory"; public static final String JMS_QUEUE = Environment.WORKER_PREFIX + "jms.queue"; - public void initialize(Properties props, InitContextPostDocumentBuilder context) { + public void initialize(Properties props, WorkerBuildContext context) { //TODO proper exception if jms queues and connecitons are not there this.properties = props; this.jmsConnectionFactoryName = props.getProperty( JMS_CONNECTION_FACTORY ); diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java index cf6fc37..3748c59 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java @@ -29,8 +29,7 @@ import java.util.Map; import java.util.Properties; import java.util.List; -import org.hibernate.search.InitAndRegisterContext; -import org.hibernate.search.InitContextPostDocumentBuilder; +import org.hibernate.search.WorkerBuildContext; import org.hibernate.search.backend.BackendQueueProcessorFactory; import org.hibernate.search.backend.LuceneWork; import org.hibernate.search.backend.impl.BatchedQueueingProcessor; @@ -65,7 +64,7 @@ public class LuceneBackendQueueProcessorFactory implements BackendQueueProcessor */ private boolean sync; - public void initialize(Properties props, InitContextPostDocumentBuilder context) { + public void initialize(Properties props, WorkerBuildContext context) { this.searchFactoryImp = context.getUninitializedSearchFactory(); this.sync = BatchedQueueingProcessor.isConfiguredAsSync( props ); for (DirectoryProvider dp : context.getDirectoryProviders() ) { diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/PerDPResources.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/PerDPResources.java index 72bbf34..a7adc53 100755 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/PerDPResources.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/PerDPResources.java @@ -24,11 +24,10 @@ */ package org.hibernate.search.backend.impl.lucene; -import org.hibernate.search.InitContextPostDocumentBuilder; +import org.hibernate.search.WorkerBuildContext; import org.hibernate.search.backend.Workspace; import org.hibernate.search.backend.impl.lucene.works.LuceneWorkVisitor; import org.hibernate.search.batchindexing.Executors; -import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.exception.ErrorHandler; import org.hibernate.search.store.DirectoryProvider; import org.hibernate.search.util.LoggerFactory; @@ -53,7 +52,7 @@ class PerDPResources { private final boolean exclusiveIndexUsage; private final ErrorHandler errorHandler; - PerDPResources(InitContextPostDocumentBuilder context, DirectoryProvider dp) { + PerDPResources(WorkerBuildContext context, DirectoryProvider dp) { workspace = new Workspace( context, dp ); visitor = new LuceneWorkVisitor( workspace ); executor = Executors.newFixedThreadPool( 1, "Directory writer" ); diff --git a/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java b/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java index a8e4831..4963456 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java +++ b/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java @@ -45,8 +45,8 @@ import org.hibernate.annotations.common.reflection.ReflectionManager; import org.hibernate.annotations.common.reflection.XClass; import org.hibernate.annotations.common.reflection.java.JavaReflectionManager; import org.hibernate.search.Environment; -import org.hibernate.search.InitAndRegisterContext; -import org.hibernate.search.InitContextPostDocumentBuilder; +import org.hibernate.search.WritableBuildContext; +import org.hibernate.search.WorkerBuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.Version; import org.hibernate.search.annotations.AnalyzerDef; @@ -97,7 +97,7 @@ import org.hibernate.search.exception.impl.LogErrorHandler; /** * @author Emmanuel Bernard */ -public class SearchFactoryImpl implements SearchFactoryImplementor, InitAndRegisterContext, InitContextPostDocumentBuilder { +public class SearchFactoryImpl implements SearchFactoryImplementor, WritableBuildContext, WorkerBuildContext { static { Version.touch(); diff --git a/hibernate-search/src/main/java/org/hibernate/search/reader/NotSharedReaderProvider.java b/hibernate-search/src/main/java/org/hibernate/search/reader/NotSharedReaderProvider.java index ad24e1d..78d05ca 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/reader/NotSharedReaderProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/reader/NotSharedReaderProvider.java @@ -29,9 +29,9 @@ import java.util.Properties; import org.apache.lucene.index.IndexReader; -import org.hibernate.search.InitContext; +import org.hibernate.search.BuildContext; import org.hibernate.search.SearchException; -import org.hibernate.search.engine.SearchFactoryImplementor; + import static org.hibernate.search.reader.ReaderProviderHelper.buildMultiReader; import static org.hibernate.search.reader.ReaderProviderHelper.clean; import org.hibernate.search.store.DirectoryProvider; @@ -70,7 +70,7 @@ public class NotSharedReaderProvider implements ReaderProvider { } } - public void initialize(Properties props, InitContext context) { + public void initialize(Properties props, BuildContext context) { } public void destroy() { diff --git a/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProvider.java b/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProvider.java index 4f9848c..fa62cf7 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProvider.java @@ -28,9 +28,8 @@ import java.util.Properties; import org.apache.lucene.index.IndexReader; -import org.hibernate.search.InitContext; +import org.hibernate.search.BuildContext; import org.hibernate.search.store.DirectoryProvider; -import org.hibernate.search.engine.SearchFactoryImplementor; /** * Responsible for providing and managing the lifecycle of a read only reader. The implementation must have a @@ -57,7 +56,7 @@ public interface ReaderProvider { /** * Inialize the reader provider before its use. */ - void initialize(Properties props, InitContext context); + void initialize(Properties props, BuildContext context); /** * Called when a SearchFactory is destroyed. This method typically releases resources. diff --git a/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProviderFactory.java b/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProviderFactory.java index 02d6aa1..7aa72e4 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProviderFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProviderFactory.java @@ -28,9 +28,8 @@ import java.util.Map; import java.util.Properties; import org.hibernate.search.Environment; -import org.hibernate.search.InitContext; +import org.hibernate.search.BuildContext; import org.hibernate.search.cfg.SearchConfiguration; -import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.util.PluginLoader; import org.hibernate.util.StringHelper; @@ -51,7 +50,7 @@ public abstract class ReaderProviderFactory { return workerProperties; } - public static ReaderProvider createReaderProvider(SearchConfiguration cfg, InitContext context) { + public static ReaderProvider createReaderProvider(SearchConfiguration cfg, BuildContext context) { Properties props = getProperties( cfg ); String impl = props.getProperty( Environment.READER_STRATEGY ); ReaderProvider readerProvider; diff --git a/hibernate-search/src/main/java/org/hibernate/search/reader/SharedReaderProvider.java b/hibernate-search/src/main/java/org/hibernate/search/reader/SharedReaderProvider.java index 46fa3f1..b765fc4 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/reader/SharedReaderProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/reader/SharedReaderProvider.java @@ -38,7 +38,7 @@ import org.apache.lucene.index.MultiReader; import org.slf4j.Logger; import org.hibernate.annotations.common.AssertionFailure; -import org.hibernate.search.InitContext; +import org.hibernate.search.BuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.store.DirectoryProvider; import org.hibernate.search.util.LoggerFactory; @@ -347,7 +347,7 @@ public class SharedReaderProvider implements ReaderProvider { } } - public void initialize(Properties props, InitContext context) { + public void initialize(Properties props, BuildContext context) { Set> providers = context.getDirectoryProviders(); perDirectoryProviderManipulationLocks = new HashMap( providers.size() ); for ( DirectoryProvider dp : providers ) { diff --git a/hibernate-search/src/main/java/org/hibernate/search/reader/SharingBufferReaderProvider.java b/hibernate-search/src/main/java/org/hibernate/search/reader/SharingBufferReaderProvider.java index 2fe14f3..78593d0 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/reader/SharingBufferReaderProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/reader/SharingBufferReaderProvider.java @@ -39,7 +39,7 @@ import org.apache.lucene.store.Directory; import org.slf4j.Logger; import org.hibernate.annotations.common.AssertionFailure; -import org.hibernate.search.InitContext; +import org.hibernate.search.BuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.store.DirectoryProvider; import org.hibernate.search.util.LoggerFactory; @@ -86,7 +86,7 @@ public class SharingBufferReaderProvider implements ReaderProvider { log.trace( "IndexReader closed." ); } - public void initialize(Properties props, InitContext context) { + public void initialize(Properties props, BuildContext context) { Set> providers = context.getDirectoryProviders(); // create the readers for the known providers. Unfortunately, it is not possible to diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProvider.java b/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProvider.java index 0547dc1..e2cc241 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProvider.java @@ -28,8 +28,7 @@ import java.util.Properties; import org.apache.lucene.store.Directory; -import org.hibernate.search.InitContext; -import org.hibernate.search.engine.SearchFactoryImplementor; +import org.hibernate.search.BuildContext; /** @@ -47,7 +46,7 @@ public interface DirectoryProvider { /** * get the information to initialize the directory and build its hashCode/equals method */ - void initialize(String directoryProviderName, Properties properties, InitContext context); + void initialize(String directoryProviderName, Properties properties, BuildContext context); /** * Executed after initialize, this method set up the heavy process of starting up the DirectoryProvider diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProviderFactory.java b/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProviderFactory.java index cd822bb..a4331d8 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProviderFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProviderFactory.java @@ -32,7 +32,7 @@ import org.hibernate.annotations.common.reflection.ReflectionManager; import org.hibernate.annotations.common.reflection.XClass; import org.hibernate.annotations.common.reflection.java.JavaReflectionManager; import org.hibernate.search.Environment; -import org.hibernate.search.InitAndRegisterContext; +import org.hibernate.search.WritableBuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.annotations.Indexed; import org.hibernate.search.backend.LuceneIndexingParameters; @@ -70,7 +70,7 @@ public class DirectoryProviderFactory { private static final String NBR_OF_SHARDS = SHARDING_STRATEGY + ".nbr_of_shards"; public DirectoryProviders createDirectoryProviders(XClass entity, SearchConfiguration cfg, - InitAndRegisterContext context, + WritableBuildContext context, ReflectionManager reflectionManager) { //get properties String directoryProviderName = getDirectoryProviderName( entity, cfg ); @@ -117,7 +117,7 @@ public class DirectoryProviderFactory { } private DirectoryProvider createDirectoryProvider(String directoryProviderName, Properties indexProps, - Class entity, InitAndRegisterContext context) { + Class entity, WritableBuildContext context) { String className = indexProps.getProperty( "directory_provider" ); DirectoryProvider provider; if ( StringHelper.isEmpty( className ) ) { @@ -150,7 +150,7 @@ public class DirectoryProviderFactory { } } - private void configureOptimizerStrategy(InitAndRegisterContext context, Properties indexProps, DirectoryProvider provider) { + private void configureOptimizerStrategy(WritableBuildContext context, Properties indexProps, DirectoryProvider provider) { boolean incremental = indexProps.containsKey( "optimizer.operation_limit.max" ) || indexProps.containsKey( "optimizer.transaction_limit.max" ); OptimizerStrategy optimizerStrategy; @@ -180,7 +180,7 @@ public class DirectoryProviderFactory { * @param directoryProperties The properties extracted from the configuration. * @param provider The directory provider for which to configure the indexing parameters. */ - private void configureIndexingParameters(InitAndRegisterContext context, + private void configureIndexingParameters(WritableBuildContext context, Properties directoryProperties, DirectoryProvider provider) { LuceneIndexingParameters indexingParams = new LuceneIndexingParameters( directoryProperties ); context.addIndexingParameters( provider, indexingParams ); diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/FSDirectoryProvider.java b/hibernate-search/src/main/java/org/hibernate/search/store/FSDirectoryProvider.java index 5061076..3eaf401 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/FSDirectoryProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/FSDirectoryProvider.java @@ -31,10 +31,8 @@ import java.util.Properties; import org.apache.lucene.store.FSDirectory; import org.slf4j.Logger; -import org.hibernate.search.InitAndRegisterContext; -import org.hibernate.search.InitContext; +import org.hibernate.search.BuildContext; import org.hibernate.search.SearchException; -import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.util.LoggerFactory; /** @@ -59,7 +57,7 @@ public class FSDirectoryProvider implements DirectoryProvider { private FSDirectory directory; private String indexName; - public void initialize(String directoryProviderName, Properties properties, InitContext context) { + public void initialize(String directoryProviderName, Properties properties, BuildContext context) { // on "manual" indexing skip read-write check on index directory boolean manual = context.getIndexingStrategy().equals( "manual" ); File indexDir = DirectoryProviderHelper.getVerifiedIndexDir( directoryProviderName, properties, ! manual ); diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/FSMasterDirectoryProvider.java b/hibernate-search/src/main/java/org/hibernate/search/store/FSMasterDirectoryProvider.java index de8d764..a55f171 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/FSMasterDirectoryProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/FSMasterDirectoryProvider.java @@ -37,7 +37,7 @@ import java.util.concurrent.locks.Lock; import org.apache.lucene.store.FSDirectory; import org.slf4j.Logger; -import org.hibernate.search.InitContext; +import org.hibernate.search.BuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.util.FileHelper; @@ -80,7 +80,7 @@ public class FSMasterDirectoryProvider implements DirectoryProvider private Properties properties; private TriggerTask task; - public void initialize(String directoryProviderName, Properties properties, InitContext context) { + public void initialize(String directoryProviderName, Properties properties, BuildContext context) { this.properties = properties; this.directoryProviderName = directoryProviderName; //source guessing diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java b/hibernate-search/src/main/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java index 4e08a36..09e1889 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java @@ -37,9 +37,8 @@ import org.apache.lucene.store.FSDirectory; import org.slf4j.Logger; import org.hibernate.AssertionFailure; -import org.hibernate.search.InitContext; +import org.hibernate.search.BuildContext; import org.hibernate.search.SearchException; -import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.util.FileHelper; import org.hibernate.search.util.LoggerFactory; @@ -75,7 +74,7 @@ public class FSSlaveDirectoryProvider implements DirectoryProvider private Properties properties; private TriggerTask task; - public void initialize(String directoryProviderName, Properties properties, InitContext context) { + public void initialize(String directoryProviderName, Properties properties, BuildContext context) { this.properties = properties; this.directoryProviderName = directoryProviderName; //source guessing diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/RAMDirectoryProvider.java b/hibernate-search/src/main/java/org/hibernate/search/store/RAMDirectoryProvider.java index f2189d4..4a2002e 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/RAMDirectoryProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/RAMDirectoryProvider.java @@ -31,8 +31,7 @@ import org.apache.lucene.analysis.SimpleAnalyzer; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.store.RAMDirectory; import org.hibernate.HibernateException; -import org.hibernate.search.InitContext; -import org.hibernate.search.engine.SearchFactoryImplementor; +import org.hibernate.search.BuildContext; /** * Use a Lucene RAMDirectory @@ -45,7 +44,7 @@ public class RAMDirectoryProvider implements DirectoryProvider { private final RAMDirectory directory = new RAMDirectory(); private String indexName; - public void initialize(String directoryProviderName, Properties properties, InitContext context) { + public void initialize(String directoryProviderName, Properties properties, BuildContext context) { indexName = directoryProviderName; directory.setLockFactory( DirectoryProviderHelper.createLockFactory( null, properties ) ); } diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/optimization/IncrementalOptimizerStrategy.java b/hibernate-search/src/main/java/org/hibernate/search/store/optimization/IncrementalOptimizerStrategy.java index b9830b3..d6772c6 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/optimization/IncrementalOptimizerStrategy.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/optimization/IncrementalOptimizerStrategy.java @@ -30,11 +30,10 @@ import java.util.Properties; import org.apache.lucene.index.IndexWriter; import org.slf4j.Logger; -import org.hibernate.search.InitContext; +import org.hibernate.search.BuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.backend.Workspace; import org.hibernate.search.backend.configuration.ConfigurationParseHelper; -import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.store.DirectoryProvider; import org.hibernate.search.util.LoggerFactory; @@ -53,7 +52,7 @@ public class IncrementalOptimizerStrategy implements OptimizerStrategy { private long transactions = 0; private DirectoryProvider directoryProvider; - public void initialize(DirectoryProvider directoryProvider, Properties indexProperties, InitContext context) { + public void initialize(DirectoryProvider directoryProvider, Properties indexProperties, BuildContext context) { this.directoryProvider = directoryProvider; operationMax = ConfigurationParseHelper.getIntValue( indexProperties, "optimizer.operation_limit.max", -1 ); transactionMax = ConfigurationParseHelper.getIntValue( indexProperties, "optimizer.transaction_limit.max", -1 ); diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/optimization/NoOpOptimizerStrategy.java b/hibernate-search/src/main/java/org/hibernate/search/store/optimization/NoOpOptimizerStrategy.java index 398ec6b..48cc46c 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/optimization/NoOpOptimizerStrategy.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/optimization/NoOpOptimizerStrategy.java @@ -26,16 +26,15 @@ package org.hibernate.search.store.optimization; import java.util.Properties; -import org.hibernate.search.InitContext; +import org.hibernate.search.BuildContext; import org.hibernate.search.store.DirectoryProvider; -import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.backend.Workspace; /** * @author Emmanuel Bernard */ public class NoOpOptimizerStrategy implements OptimizerStrategy { - public void initialize(DirectoryProvider directoryProvider, Properties indexProperties, InitContext context) { + public void initialize(DirectoryProvider directoryProvider, Properties indexProperties, BuildContext context) { } public void optimizationForced() { diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/optimization/OptimizerStrategy.java b/hibernate-search/src/main/java/org/hibernate/search/store/optimization/OptimizerStrategy.java index 67c65a4..fd7e060 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/optimization/OptimizerStrategy.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/optimization/OptimizerStrategy.java @@ -26,16 +26,15 @@ package org.hibernate.search.store.optimization; import java.util.Properties; -import org.hibernate.search.InitContext; +import org.hibernate.search.BuildContext; import org.hibernate.search.backend.Workspace; -import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.store.DirectoryProvider; /** * @author Emmanuel Bernard */ public interface OptimizerStrategy { - public void initialize(DirectoryProvider directoryProvider, Properties indexProperties, InitContext initContext); + public void initialize(DirectoryProvider directoryProvider, Properties indexProperties, BuildContext initContext); /** * has to be called in a thread safe way diff --git a/hibernate-search/src/test/java/org/hibernate/search/test/reader/functionality/TestableSharingBufferReaderProvider.java b/hibernate-search/src/test/java/org/hibernate/search/test/reader/functionality/TestableSharingBufferReaderProvider.java index a91932f..4f0e60f 100644 --- a/hibernate-search/src/test/java/org/hibernate/search/test/reader/functionality/TestableSharingBufferReaderProvider.java +++ b/hibernate-search/src/test/java/org/hibernate/search/test/reader/functionality/TestableSharingBufferReaderProvider.java @@ -47,7 +47,7 @@ import org.apache.lucene.index.TermPositions; import org.apache.lucene.index.TermVectorMapper; import org.apache.lucene.store.Directory; -import org.hibernate.search.InitContext; +import org.hibernate.search.BuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.reader.ReaderProviderHelper; import org.hibernate.search.reader.SharingBufferReaderProvider; @@ -111,7 +111,7 @@ public class TestableSharingBufferReaderProvider extends SharingBufferReaderProv } @Override - public void initialize(Properties props, InitContext context) { + public void initialize(Properties props, BuildContext context) { try { for ( Directory directory : manipulators.keySet() ) { currentReaders.put( directory, new PerDirectoryLatestReader( directory ) ); -- 1.6.5.1 From e79ef2d203e34a9b20c0f40c43b57d694c31cb2c Mon Sep 17 00:00:00 2001 From: Emmanuel Bernard Date: Mon, 7 Jun 2010 16:02:00 +0200 Subject: [PATCH 8/8] HSEARCH-541 Move BuildContext classes to spi --- .../java/org/hibernate/search/BuildContext.java | 38 -------------------- .../org/hibernate/search/WorkerBuildContext.java | 29 --------------- .../org/hibernate/search/WritableBuildContext.java | 18 --------- .../backend/BackendQueueProcessorFactory.java | 2 +- .../java/org/hibernate/search/backend/Worker.java | 2 +- .../hibernate/search/backend/WorkerFactory.java | 2 +- .../org/hibernate/search/backend/Workspace.java | 2 +- .../backend/impl/BatchedQueueingProcessor.java | 2 +- .../search/backend/impl/TransactionalWorker.java | 2 +- .../backend/impl/batchlucene/BatchBackend.java | 2 +- .../batchlucene/DirectoryProviderWorkspace.java | 2 +- .../impl/batchlucene/LuceneBatchBackend.java | 2 +- .../BlackHoleBackendQueueProcessorFactory.java | 2 +- .../JGroupsBackendQueueProcessorFactory.java | 2 +- .../MasterJGroupsBackendQueueProcessorFactory.java | 2 +- .../impl/jms/JMSBackendQueueProcessorFactory.java | 2 +- .../lucene/LuceneBackendQueueProcessorFactory.java | 2 +- .../search/backend/impl/lucene/PerDPResources.java | 2 +- .../hibernate/search/impl/SearchFactoryImpl.java | 4 +- .../search/reader/NotSharedReaderProvider.java | 3 +- .../hibernate/search/reader/ReaderProvider.java | 2 +- .../search/reader/ReaderProviderFactory.java | 2 +- .../search/reader/SharedReaderProvider.java | 2 +- .../search/reader/SharingBufferReaderProvider.java | 2 +- .../org/hibernate/search/spi/BuildContext.java | 38 ++++++++++++++++++++ .../hibernate/search/spi/WorkerBuildContext.java | 29 +++++++++++++++ .../hibernate/search/spi/WritableBuildContext.java | 18 +++++++++ .../hibernate/search/store/DirectoryProvider.java | 2 +- .../search/store/DirectoryProviderFactory.java | 2 +- .../search/store/FSDirectoryProvider.java | 2 +- .../search/store/FSMasterDirectoryProvider.java | 2 +- .../search/store/FSSlaveDirectoryProvider.java | 2 +- .../search/store/RAMDirectoryProvider.java | 2 +- .../optimization/IncrementalOptimizerStrategy.java | 2 +- .../store/optimization/NoOpOptimizerStrategy.java | 2 +- .../store/optimization/OptimizerStrategy.java | 2 +- .../TestableSharingBufferReaderProvider.java | 2 +- 37 files changed, 118 insertions(+), 117 deletions(-) delete mode 100644 hibernate-search/src/main/java/org/hibernate/search/BuildContext.java delete mode 100644 hibernate-search/src/main/java/org/hibernate/search/WorkerBuildContext.java delete mode 100644 hibernate-search/src/main/java/org/hibernate/search/WritableBuildContext.java create mode 100644 hibernate-search/src/main/java/org/hibernate/search/spi/BuildContext.java create mode 100644 hibernate-search/src/main/java/org/hibernate/search/spi/WorkerBuildContext.java create mode 100644 hibernate-search/src/main/java/org/hibernate/search/spi/WritableBuildContext.java diff --git a/hibernate-search/src/main/java/org/hibernate/search/BuildContext.java b/hibernate-search/src/main/java/org/hibernate/search/BuildContext.java deleted file mode 100644 index 8e9dd79..0000000 --- a/hibernate-search/src/main/java/org/hibernate/search/BuildContext.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.hibernate.search; - -import java.util.Set; - -import org.hibernate.search.engine.SearchFactoryImplementor; -import org.hibernate.search.store.DirectoryProvider; - -/** - * Build context that can be used by some services at initialization - * - * @author Emmanuel Bernard - */ -public interface BuildContext { - /** - * Returns the SessionFactoryImplementor instance. Do not use until after the initialize method is fully executed. - * Implementations should not cache values provided by the SessionFactoryImplementor but rather access them - * each time: when the configuration is dynamically updated, new changes are available through the - * SearchFactoryImplementor - * For example, prefer - * - * void method() { - * int size = sfi.getDirectoryProviders().size(); - * } - * - * to - * - * void method() { - * int size = directoryProviders().size(); - * } - * - * where directoryProviders is a class variable. - */ - SearchFactoryImplementor getUninitializedSearchFactory(); - - String getIndexingStrategy(); - - Set> getDirectoryProviders(); -} diff --git a/hibernate-search/src/main/java/org/hibernate/search/WorkerBuildContext.java b/hibernate-search/src/main/java/org/hibernate/search/WorkerBuildContext.java deleted file mode 100644 index a4789f0..0000000 --- a/hibernate-search/src/main/java/org/hibernate/search/WorkerBuildContext.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.hibernate.search; - -import java.util.Set; -import java.util.concurrent.locks.ReentrantLock; - -import org.apache.lucene.search.Similarity; - -import org.hibernate.search.backend.BackendQueueProcessorFactory; -import org.hibernate.search.backend.LuceneIndexingParameters; -import org.hibernate.search.exception.ErrorHandler; -import org.hibernate.search.store.DirectoryProvider; -import org.hibernate.search.store.optimization.OptimizerStrategy; - -/** - * Build context for the worker and other backend - * Available after all index, entity metadata are built. - * - * @author Emmanuel Bernard - */ -public interface WorkerBuildContext extends BuildContext { - void setBackendQueueProcessorFactory(BackendQueueProcessorFactory backendQueueProcessorFactory); - public OptimizerStrategy getOptimizerStrategy(DirectoryProvider provider); - Set> getClassesInDirectoryProvider(DirectoryProvider provider); - LuceneIndexingParameters getIndexingParameters(DirectoryProvider directoryProvider); - ReentrantLock getDirectoryProviderLock(DirectoryProvider provider); - Similarity getSimilarity(DirectoryProvider directoryProvider); - boolean isExclusiveIndexUsageEnabled(DirectoryProvider directoryProvider); - ErrorHandler getErrorHandler(); -} diff --git a/hibernate-search/src/main/java/org/hibernate/search/WritableBuildContext.java b/hibernate-search/src/main/java/org/hibernate/search/WritableBuildContext.java deleted file mode 100644 index 836e3a6..0000000 --- a/hibernate-search/src/main/java/org/hibernate/search/WritableBuildContext.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.hibernate.search; - -import org.hibernate.search.backend.LuceneIndexingParameters; -import org.hibernate.search.store.DirectoryProvider; -import org.hibernate.search.store.optimization.OptimizerStrategy; - -/** - * Build context where new built element can be registered. - * - * @author Emmanuel Bernard - */ -public interface WritableBuildContext extends BuildContext { - void addOptimizerStrategy(DirectoryProvider provider, OptimizerStrategy optimizerStrategy); - - void addIndexingParameters(DirectoryProvider provider, LuceneIndexingParameters indexingParams); - - void addClassToDirectoryProvider(Class entity, DirectoryProvider directoryProvider, boolean exclusiveIndexUsage); -} \ No newline at end of file diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java b/hibernate-search/src/main/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java index 45a2dd5..7559374 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java @@ -27,7 +27,7 @@ package org.hibernate.search.backend; import java.util.Properties; import java.util.List; -import org.hibernate.search.WorkerBuildContext; +import org.hibernate.search.spi.WorkerBuildContext; /** * Interface for different types of queue processor factories. Implementations need a no-arg constructor. diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/Worker.java b/hibernate-search/src/main/java/org/hibernate/search/backend/Worker.java index cc2b6d6..7a6db02 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/Worker.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/Worker.java @@ -26,7 +26,7 @@ package org.hibernate.search.backend; import java.util.Properties; -import org.hibernate.search.WorkerBuildContext; +import org.hibernate.search.spi.WorkerBuildContext; /** * Perform work for a given session. This implementation has to be multi threaded. diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/WorkerFactory.java b/hibernate-search/src/main/java/org/hibernate/search/backend/WorkerFactory.java index c8e1c8d..ca1f035 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/WorkerFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/WorkerFactory.java @@ -28,7 +28,7 @@ import java.util.Map; import java.util.Properties; import org.hibernate.search.Environment; -import org.hibernate.search.WorkerBuildContext; +import org.hibernate.search.spi.WorkerBuildContext; import org.hibernate.search.backend.impl.TransactionalWorker; import org.hibernate.search.cfg.SearchConfiguration; import org.hibernate.search.util.PluginLoader; diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/Workspace.java b/hibernate-search/src/main/java/org/hibernate/search/backend/Workspace.java index 90ee8e6..3f1cf00 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/Workspace.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/Workspace.java @@ -35,7 +35,7 @@ import org.apache.lucene.index.IndexWriter; import org.apache.lucene.search.Similarity; import org.slf4j.Logger; -import org.hibernate.search.WorkerBuildContext; +import org.hibernate.search.spi.WorkerBuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.SearchFactory; import org.hibernate.search.engine.DocumentBuilderIndexedEntity; diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java index c04db5c..06509e6 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java @@ -38,7 +38,7 @@ import org.slf4j.Logger; import org.hibernate.Hibernate; import org.hibernate.annotations.common.AssertionFailure; import org.hibernate.search.Environment; -import org.hibernate.search.WorkerBuildContext; +import org.hibernate.search.spi.WorkerBuildContext; import org.hibernate.search.backend.AddLuceneWork; import org.hibernate.search.backend.BackendQueueProcessorFactory; import org.hibernate.search.backend.DeleteLuceneWork; diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/TransactionalWorker.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/TransactionalWorker.java index 13cb377..f5ed11d 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/TransactionalWorker.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/TransactionalWorker.java @@ -29,7 +29,7 @@ import javax.transaction.Synchronization; import org.slf4j.Logger; -import org.hibernate.search.WorkerBuildContext; +import org.hibernate.search.spi.WorkerBuildContext; import org.hibernate.search.backend.QueueingProcessor; import org.hibernate.search.backend.TransactionContext; import org.hibernate.search.backend.Work; diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/BatchBackend.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/BatchBackend.java index aa7226c..a4d36c3 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/BatchBackend.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/BatchBackend.java @@ -27,7 +27,7 @@ package org.hibernate.search.backend.impl.batchlucene; import java.util.Properties; import java.util.concurrent.TimeUnit; -import org.hibernate.search.WorkerBuildContext; +import org.hibernate.search.spi.WorkerBuildContext; import org.hibernate.search.backend.LuceneWork; import org.hibernate.search.batchindexing.MassIndexerProgressMonitor; diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/DirectoryProviderWorkspace.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/DirectoryProviderWorkspace.java index e16bbee..48de9ab 100755 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/DirectoryProviderWorkspace.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/DirectoryProviderWorkspace.java @@ -30,7 +30,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import org.slf4j.Logger; -import org.hibernate.search.WorkerBuildContext; +import org.hibernate.search.spi.WorkerBuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.backend.LuceneWork; import org.hibernate.search.backend.Workspace; diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/LuceneBatchBackend.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/LuceneBatchBackend.java index 85b3f5c..fae0932 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/LuceneBatchBackend.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/LuceneBatchBackend.java @@ -30,7 +30,7 @@ import java.util.Properties; import java.util.concurrent.TimeUnit; import org.hibernate.search.Environment; -import org.hibernate.search.WorkerBuildContext; +import org.hibernate.search.spi.WorkerBuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.backend.LuceneWork; import org.hibernate.search.backend.configuration.ConfigurationParseHelper; diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/blackhole/BlackHoleBackendQueueProcessorFactory.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/blackhole/BlackHoleBackendQueueProcessorFactory.java index c1e00f6..14dd800 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/blackhole/BlackHoleBackendQueueProcessorFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/blackhole/BlackHoleBackendQueueProcessorFactory.java @@ -27,7 +27,7 @@ package org.hibernate.search.backend.impl.blackhole; import java.util.List; import java.util.Properties; -import org.hibernate.search.WorkerBuildContext; +import org.hibernate.search.spi.WorkerBuildContext; import org.hibernate.search.backend.BackendQueueProcessorFactory; import org.hibernate.search.backend.LuceneWork; import org.hibernate.search.util.LoggerFactory; diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/JGroupsBackendQueueProcessorFactory.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/JGroupsBackendQueueProcessorFactory.java index 671e821..11f21d7 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/JGroupsBackendQueueProcessorFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/JGroupsBackendQueueProcessorFactory.java @@ -35,7 +35,7 @@ import org.jgroups.JChannel; import org.slf4j.Logger; import org.hibernate.search.Environment; -import org.hibernate.search.WorkerBuildContext; +import org.hibernate.search.spi.WorkerBuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.backend.BackendQueueProcessorFactory; import org.hibernate.search.backend.LuceneWork; diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/MasterJGroupsBackendQueueProcessorFactory.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/MasterJGroupsBackendQueueProcessorFactory.java index 077a4d1..1bac4d4 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/MasterJGroupsBackendQueueProcessorFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/MasterJGroupsBackendQueueProcessorFactory.java @@ -29,7 +29,7 @@ import java.util.Properties; import org.jgroups.Receiver; -import org.hibernate.search.WorkerBuildContext; +import org.hibernate.search.spi.WorkerBuildContext; import org.hibernate.search.backend.LuceneWork; import org.hibernate.search.backend.impl.lucene.LuceneBackendQueueProcessorFactory; diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java index 063e0a5..909179c 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java @@ -35,7 +35,7 @@ import javax.naming.InitialContext; import javax.naming.NamingException; import org.hibernate.search.Environment; -import org.hibernate.search.WorkerBuildContext; +import org.hibernate.search.spi.WorkerBuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.backend.BackendQueueProcessorFactory; import org.hibernate.search.backend.LuceneWork; diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java index 3748c59..424bb2f 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java @@ -29,7 +29,7 @@ import java.util.Map; import java.util.Properties; import java.util.List; -import org.hibernate.search.WorkerBuildContext; +import org.hibernate.search.spi.WorkerBuildContext; import org.hibernate.search.backend.BackendQueueProcessorFactory; import org.hibernate.search.backend.LuceneWork; import org.hibernate.search.backend.impl.BatchedQueueingProcessor; diff --git a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/PerDPResources.java b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/PerDPResources.java index a7adc53..721a1f8 100755 --- a/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/PerDPResources.java +++ b/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/PerDPResources.java @@ -24,7 +24,7 @@ */ package org.hibernate.search.backend.impl.lucene; -import org.hibernate.search.WorkerBuildContext; +import org.hibernate.search.spi.WorkerBuildContext; import org.hibernate.search.backend.Workspace; import org.hibernate.search.backend.impl.lucene.works.LuceneWorkVisitor; import org.hibernate.search.batchindexing.Executors; diff --git a/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java b/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java index 4963456..92442ba 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java +++ b/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java @@ -45,8 +45,8 @@ import org.hibernate.annotations.common.reflection.ReflectionManager; import org.hibernate.annotations.common.reflection.XClass; import org.hibernate.annotations.common.reflection.java.JavaReflectionManager; import org.hibernate.search.Environment; -import org.hibernate.search.WritableBuildContext; -import org.hibernate.search.WorkerBuildContext; +import org.hibernate.search.spi.WritableBuildContext; +import org.hibernate.search.spi.WorkerBuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.Version; import org.hibernate.search.annotations.AnalyzerDef; diff --git a/hibernate-search/src/main/java/org/hibernate/search/reader/NotSharedReaderProvider.java b/hibernate-search/src/main/java/org/hibernate/search/reader/NotSharedReaderProvider.java index 78d05ca..196661d 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/reader/NotSharedReaderProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/reader/NotSharedReaderProvider.java @@ -29,11 +29,12 @@ import java.util.Properties; import org.apache.lucene.index.IndexReader; -import org.hibernate.search.BuildContext; +import org.hibernate.search.spi.BuildContext; import org.hibernate.search.SearchException; import static org.hibernate.search.reader.ReaderProviderHelper.buildMultiReader; import static org.hibernate.search.reader.ReaderProviderHelper.clean; + import org.hibernate.search.store.DirectoryProvider; /** diff --git a/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProvider.java b/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProvider.java index fa62cf7..d80a8dc 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProvider.java @@ -28,7 +28,7 @@ import java.util.Properties; import org.apache.lucene.index.IndexReader; -import org.hibernate.search.BuildContext; +import org.hibernate.search.spi.BuildContext; import org.hibernate.search.store.DirectoryProvider; /** diff --git a/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProviderFactory.java b/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProviderFactory.java index 7aa72e4..ce3948a 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProviderFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProviderFactory.java @@ -28,7 +28,7 @@ import java.util.Map; import java.util.Properties; import org.hibernate.search.Environment; -import org.hibernate.search.BuildContext; +import org.hibernate.search.spi.BuildContext; import org.hibernate.search.cfg.SearchConfiguration; import org.hibernate.search.util.PluginLoader; import org.hibernate.util.StringHelper; diff --git a/hibernate-search/src/main/java/org/hibernate/search/reader/SharedReaderProvider.java b/hibernate-search/src/main/java/org/hibernate/search/reader/SharedReaderProvider.java index b765fc4..9d96714 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/reader/SharedReaderProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/reader/SharedReaderProvider.java @@ -38,7 +38,7 @@ import org.apache.lucene.index.MultiReader; import org.slf4j.Logger; import org.hibernate.annotations.common.AssertionFailure; -import org.hibernate.search.BuildContext; +import org.hibernate.search.spi.BuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.store.DirectoryProvider; import org.hibernate.search.util.LoggerFactory; diff --git a/hibernate-search/src/main/java/org/hibernate/search/reader/SharingBufferReaderProvider.java b/hibernate-search/src/main/java/org/hibernate/search/reader/SharingBufferReaderProvider.java index 78593d0..08a5140 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/reader/SharingBufferReaderProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/reader/SharingBufferReaderProvider.java @@ -39,7 +39,7 @@ import org.apache.lucene.store.Directory; import org.slf4j.Logger; import org.hibernate.annotations.common.AssertionFailure; -import org.hibernate.search.BuildContext; +import org.hibernate.search.spi.BuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.store.DirectoryProvider; import org.hibernate.search.util.LoggerFactory; diff --git a/hibernate-search/src/main/java/org/hibernate/search/spi/BuildContext.java b/hibernate-search/src/main/java/org/hibernate/search/spi/BuildContext.java new file mode 100644 index 0000000..820bafd --- /dev/null +++ b/hibernate-search/src/main/java/org/hibernate/search/spi/BuildContext.java @@ -0,0 +1,38 @@ +package org.hibernate.search.spi; + +import java.util.Set; + +import org.hibernate.search.engine.SearchFactoryImplementor; +import org.hibernate.search.store.DirectoryProvider; + +/** + * Build context that can be used by some services at initialization + * + * @author Emmanuel Bernard + */ +public interface BuildContext { + /** + * Returns the SessionFactoryImplementor instance. Do not use until after the initialize method is fully executed. + * Implementations should not cache values provided by the SessionFactoryImplementor but rather access them + * each time: when the configuration is dynamically updated, new changes are available through the + * SearchFactoryImplementor + * For example, prefer + * + * void method() { + * int size = sfi.getDirectoryProviders().size(); + * } + * + * to + * + * void method() { + * int size = directoryProviders().size(); + * } + * + * where directoryProviders is a class variable. + */ + SearchFactoryImplementor getUninitializedSearchFactory(); + + String getIndexingStrategy(); + + Set> getDirectoryProviders(); +} diff --git a/hibernate-search/src/main/java/org/hibernate/search/spi/WorkerBuildContext.java b/hibernate-search/src/main/java/org/hibernate/search/spi/WorkerBuildContext.java new file mode 100644 index 0000000..32febca --- /dev/null +++ b/hibernate-search/src/main/java/org/hibernate/search/spi/WorkerBuildContext.java @@ -0,0 +1,29 @@ +package org.hibernate.search.spi; + +import java.util.Set; +import java.util.concurrent.locks.ReentrantLock; + +import org.apache.lucene.search.Similarity; + +import org.hibernate.search.backend.BackendQueueProcessorFactory; +import org.hibernate.search.backend.LuceneIndexingParameters; +import org.hibernate.search.exception.ErrorHandler; +import org.hibernate.search.store.DirectoryProvider; +import org.hibernate.search.store.optimization.OptimizerStrategy; + +/** + * Build context for the worker and other backend + * Available after all index, entity metadata are built. + * + * @author Emmanuel Bernard + */ +public interface WorkerBuildContext extends BuildContext { + void setBackendQueueProcessorFactory(BackendQueueProcessorFactory backendQueueProcessorFactory); + public OptimizerStrategy getOptimizerStrategy(DirectoryProvider provider); + Set> getClassesInDirectoryProvider(DirectoryProvider provider); + LuceneIndexingParameters getIndexingParameters(DirectoryProvider directoryProvider); + ReentrantLock getDirectoryProviderLock(DirectoryProvider provider); + Similarity getSimilarity(DirectoryProvider directoryProvider); + boolean isExclusiveIndexUsageEnabled(DirectoryProvider directoryProvider); + ErrorHandler getErrorHandler(); +} diff --git a/hibernate-search/src/main/java/org/hibernate/search/spi/WritableBuildContext.java b/hibernate-search/src/main/java/org/hibernate/search/spi/WritableBuildContext.java new file mode 100644 index 0000000..bd27035 --- /dev/null +++ b/hibernate-search/src/main/java/org/hibernate/search/spi/WritableBuildContext.java @@ -0,0 +1,18 @@ +package org.hibernate.search.spi; + +import org.hibernate.search.backend.LuceneIndexingParameters; +import org.hibernate.search.store.DirectoryProvider; +import org.hibernate.search.store.optimization.OptimizerStrategy; + +/** + * Build context where new built element can be registered. + * + * @author Emmanuel Bernard + */ +public interface WritableBuildContext extends BuildContext { + void addOptimizerStrategy(DirectoryProvider provider, OptimizerStrategy optimizerStrategy); + + void addIndexingParameters(DirectoryProvider provider, LuceneIndexingParameters indexingParams); + + void addClassToDirectoryProvider(Class entity, DirectoryProvider directoryProvider, boolean exclusiveIndexUsage); +} \ No newline at end of file diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProvider.java b/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProvider.java index e2cc241..42239a3 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProvider.java @@ -28,7 +28,7 @@ import java.util.Properties; import org.apache.lucene.store.Directory; -import org.hibernate.search.BuildContext; +import org.hibernate.search.spi.BuildContext; /** diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProviderFactory.java b/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProviderFactory.java index a4331d8..97d3eb0 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProviderFactory.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProviderFactory.java @@ -32,7 +32,7 @@ import org.hibernate.annotations.common.reflection.ReflectionManager; import org.hibernate.annotations.common.reflection.XClass; import org.hibernate.annotations.common.reflection.java.JavaReflectionManager; import org.hibernate.search.Environment; -import org.hibernate.search.WritableBuildContext; +import org.hibernate.search.spi.WritableBuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.annotations.Indexed; import org.hibernate.search.backend.LuceneIndexingParameters; diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/FSDirectoryProvider.java b/hibernate-search/src/main/java/org/hibernate/search/store/FSDirectoryProvider.java index 3eaf401..134422c 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/FSDirectoryProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/FSDirectoryProvider.java @@ -31,7 +31,7 @@ import java.util.Properties; import org.apache.lucene.store.FSDirectory; import org.slf4j.Logger; -import org.hibernate.search.BuildContext; +import org.hibernate.search.spi.BuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.util.LoggerFactory; diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/FSMasterDirectoryProvider.java b/hibernate-search/src/main/java/org/hibernate/search/store/FSMasterDirectoryProvider.java index a55f171..2615f15 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/FSMasterDirectoryProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/FSMasterDirectoryProvider.java @@ -37,7 +37,7 @@ import java.util.concurrent.locks.Lock; import org.apache.lucene.store.FSDirectory; import org.slf4j.Logger; -import org.hibernate.search.BuildContext; +import org.hibernate.search.spi.BuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.util.FileHelper; diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java b/hibernate-search/src/main/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java index 09e1889..5531302 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java @@ -37,7 +37,7 @@ import org.apache.lucene.store.FSDirectory; import org.slf4j.Logger; import org.hibernate.AssertionFailure; -import org.hibernate.search.BuildContext; +import org.hibernate.search.spi.BuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.util.FileHelper; import org.hibernate.search.util.LoggerFactory; diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/RAMDirectoryProvider.java b/hibernate-search/src/main/java/org/hibernate/search/store/RAMDirectoryProvider.java index 4a2002e..cb5f5b7 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/RAMDirectoryProvider.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/RAMDirectoryProvider.java @@ -31,7 +31,7 @@ import org.apache.lucene.analysis.SimpleAnalyzer; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.store.RAMDirectory; import org.hibernate.HibernateException; -import org.hibernate.search.BuildContext; +import org.hibernate.search.spi.BuildContext; /** * Use a Lucene RAMDirectory diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/optimization/IncrementalOptimizerStrategy.java b/hibernate-search/src/main/java/org/hibernate/search/store/optimization/IncrementalOptimizerStrategy.java index d6772c6..d549812 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/optimization/IncrementalOptimizerStrategy.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/optimization/IncrementalOptimizerStrategy.java @@ -30,7 +30,7 @@ import java.util.Properties; import org.apache.lucene.index.IndexWriter; import org.slf4j.Logger; -import org.hibernate.search.BuildContext; +import org.hibernate.search.spi.BuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.backend.Workspace; import org.hibernate.search.backend.configuration.ConfigurationParseHelper; diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/optimization/NoOpOptimizerStrategy.java b/hibernate-search/src/main/java/org/hibernate/search/store/optimization/NoOpOptimizerStrategy.java index 48cc46c..e6a43ac 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/optimization/NoOpOptimizerStrategy.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/optimization/NoOpOptimizerStrategy.java @@ -26,7 +26,7 @@ package org.hibernate.search.store.optimization; import java.util.Properties; -import org.hibernate.search.BuildContext; +import org.hibernate.search.spi.BuildContext; import org.hibernate.search.store.DirectoryProvider; import org.hibernate.search.backend.Workspace; diff --git a/hibernate-search/src/main/java/org/hibernate/search/store/optimization/OptimizerStrategy.java b/hibernate-search/src/main/java/org/hibernate/search/store/optimization/OptimizerStrategy.java index fd7e060..677c982 100644 --- a/hibernate-search/src/main/java/org/hibernate/search/store/optimization/OptimizerStrategy.java +++ b/hibernate-search/src/main/java/org/hibernate/search/store/optimization/OptimizerStrategy.java @@ -26,7 +26,7 @@ package org.hibernate.search.store.optimization; import java.util.Properties; -import org.hibernate.search.BuildContext; +import org.hibernate.search.spi.BuildContext; import org.hibernate.search.backend.Workspace; import org.hibernate.search.store.DirectoryProvider; diff --git a/hibernate-search/src/test/java/org/hibernate/search/test/reader/functionality/TestableSharingBufferReaderProvider.java b/hibernate-search/src/test/java/org/hibernate/search/test/reader/functionality/TestableSharingBufferReaderProvider.java index 4f0e60f..991b80f 100644 --- a/hibernate-search/src/test/java/org/hibernate/search/test/reader/functionality/TestableSharingBufferReaderProvider.java +++ b/hibernate-search/src/test/java/org/hibernate/search/test/reader/functionality/TestableSharingBufferReaderProvider.java @@ -47,7 +47,7 @@ import org.apache.lucene.index.TermPositions; import org.apache.lucene.index.TermVectorMapper; import org.apache.lucene.store.Directory; -import org.hibernate.search.BuildContext; +import org.hibernate.search.spi.BuildContext; import org.hibernate.search.SearchException; import org.hibernate.search.reader.ReaderProviderHelper; import org.hibernate.search.reader.SharingBufferReaderProvider; -- 1.6.5.1