Author: epbernard
Date: 2010-06-28 08:31:04 -0400 (Mon, 28 Jun 2010)
New Revision: 19833
Added:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/ConfigContext.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/DirectoryProviderData.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/PolymorphicIndexHierarchy.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/spi/
search/trunk/hibernate-search/src/main/java/org/hibernate/search/spi/BuildContext.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/spi/WorkerBuildContext.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/spi/WritableBuildContext.java
Removed:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/InitContext.java
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/Worker.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/WorkerFactory.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/Workspace.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/TransactionalWorker.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/BatchBackend.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/DirectoryProviderWorkspace.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/LuceneBatchBackend.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/blackhole/BlackHoleBackendQueueProcessorFactory.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/JGroupsBackendQueueProcessorFactory.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/MasterJGroupsBackendQueueProcessorFactory.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/PerDPResources.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/DocumentBuilderContainedEntity.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/DocumentBuilderIndexedEntity.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/reader/NotSharedReaderProvider.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProvider.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProviderFactory.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/reader/SharedReaderProvider.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/reader/SharingBufferReaderProvider.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProvider.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProviderFactory.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/FSDirectoryProvider.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/FSMasterDirectoryProvider.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/RAMDirectoryProvider.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/optimization/IncrementalOptimizerStrategy.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/optimization/NoOpOptimizerStrategy.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/optimization/OptimizerStrategy.java
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/analyzer/AnalyzerTest.java
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/reader/functionality/TestableSharingBufferReaderProvider.java
Log:
Merge branch 'initialize'
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -27,7 +27,7 @@
import java.util.Properties;
import java.util.List;
-import org.hibernate.search.engine.SearchFactoryImplementor;
+import org.hibernate.search.spi.WorkerBuildContext;
/**
* Interface for different types of queue processor factories. Implementations need a
no-arg constructor.
@@ -42,7 +42,7 @@
* @param props all configuration properties
* @param searchFactory the client
*/
- void initialize(Properties props, SearchFactoryImplementor searchFactory);
+ void initialize(Properties props, WorkerBuildContext context);
/**
* Return a runnable implementation responsible for processing the queue to a given
backend.
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/Worker.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/Worker.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/Worker.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -26,7 +26,7 @@
import java.util.Properties;
-import org.hibernate.search.engine.SearchFactoryImplementor;
+import org.hibernate.search.spi.WorkerBuildContext;
/**
* Perform work for a given session. This implementation has to be multi threaded.
@@ -41,7 +41,7 @@
*/
void performWork(Work work, TransactionContext transactionContext);
- void initialize(Properties props, SearchFactoryImplementor searchFactoryImplementor);
+ void initialize(Properties props, WorkerBuildContext context);
/**
* clean resources
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/WorkerFactory.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/WorkerFactory.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/WorkerFactory.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -28,9 +28,9 @@
import java.util.Properties;
import org.hibernate.search.Environment;
+import org.hibernate.search.spi.WorkerBuildContext;
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 @@
return workerProperties;
}
- public static Worker createWorker(SearchConfiguration cfg, SearchFactoryImplementor
searchFactoryImplementor) {
+ public static Worker createWorker(SearchConfiguration cfg, WorkerBuildContext context)
{
Properties props = getProperties( cfg );
String impl = props.getProperty( Environment.WORKER_SCOPE );
Worker worker;
@@ -66,7 +66,7 @@
worker = PluginLoader.instanceFromName( Worker.class,
impl, WorkerFactory.class, "worker" );
}
- worker.initialize( props, searchFactoryImplementor );
+ worker.initialize( props, context );
return worker;
}
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/Workspace.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/Workspace.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/Workspace.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -35,6 +35,7 @@
import org.apache.lucene.search.Similarity;
import org.slf4j.Logger;
+import org.hibernate.search.spi.WorkerBuildContext;
import org.hibernate.search.SearchException;
import org.hibernate.search.SearchFactory;
import org.hibernate.search.engine.DocumentBuilderIndexedEntity;
@@ -82,14 +83,14 @@
*/
private final AtomicLong operations = new AtomicLong( 0L );
- public Workspace(SearchFactoryImplementor searchFactoryImplementor,
DirectoryProvider<?> provider) {
- this.searchFactoryImplementor = searchFactoryImplementor;
+ public Workspace(WorkerBuildContext 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 <T> DocumentBuilderIndexedEntity<T> getDocumentBuilder(Class<T>
entity) {
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -38,6 +38,7 @@
import org.hibernate.Hibernate;
import org.hibernate.annotations.common.AssertionFailure;
import org.hibernate.search.Environment;
+import org.hibernate.search.spi.WorkerBuildContext;
import org.hibernate.search.backend.AddLuceneWork;
import org.hibernate.search.backend.BackendQueueProcessorFactory;
import org.hibernate.search.backend.DeleteLuceneWork;
@@ -76,8 +77,7 @@
private final BackendQueueProcessorFactory backendQueueProcessorFactory;
private final SearchFactoryImplementor searchFactoryImplementor;
- public BatchedQueueingProcessor(SearchFactoryImplementor searchFactoryImplementor,
Properties properties) {
- this.searchFactoryImplementor = searchFactoryImplementor;
+ public BatchedQueueingProcessor(WorkerBuildContext context, Properties properties) {
this.sync = isConfiguredAsSync( properties );
//default to a simple asynchronous operation
@@ -118,8 +118,9 @@
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) {
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/TransactionalWorker.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/TransactionalWorker.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/TransactionalWorker.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -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.spi.WorkerBuildContext;
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 void initialize(Properties props, SearchFactoryImplementor searchFactory) {
- this.queueingProcessor = new BatchedQueueingProcessor( searchFactory, props );
+ public void initialize(Properties props, WorkerBuildContext context) {
+ this.queueingProcessor = new BatchedQueueingProcessor( context, props );
}
public void close() {
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/BatchBackend.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/BatchBackend.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/BatchBackend.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -27,9 +27,9 @@
import java.util.Properties;
import java.util.concurrent.TimeUnit;
+import org.hibernate.search.spi.WorkerBuildContext;
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 @@
* @param props all configuration properties
* @param searchFactory the client
*/
- void initialize(Properties props, MassIndexerProgressMonitor monitor,
SearchFactoryImplementor searchFactory);
+ void initialize(Properties props, MassIndexerProgressMonitor monitor, WorkerBuildContext
context);
/**
* Enqueues one work to be processed asynchronously
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/DirectoryProviderWorkspace.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/DirectoryProviderWorkspace.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/DirectoryProviderWorkspace.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -28,6 +28,9 @@
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
+import org.slf4j.Logger;
+
+import org.hibernate.search.spi.WorkerBuildContext;
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.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 @@
private final AtomicBoolean closed = new AtomicBoolean( false );
- DirectoryProviderWorkspace(SearchFactoryImplementor searchFactoryImp,
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" );
}
this.monitor = monitor;
- workspace = new Workspace( searchFactoryImp, dp );
+ workspace = new Workspace( context, dp );
visitor = new LuceneWorkVisitor( workspace );
executor = Executors.newFixedThreadPool( maxThreads, "indexwriter" );
}
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/LuceneBatchBackend.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/LuceneBatchBackend.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/LuceneBatchBackend.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -30,6 +30,7 @@
import java.util.concurrent.TimeUnit;
import org.hibernate.search.Environment;
+import org.hibernate.search.spi.WorkerBuildContext;
import org.hibernate.search.SearchException;
import org.hibernate.search.backend.LuceneWork;
import org.hibernate.search.backend.configuration.ConfigurationParseHelper;
@@ -59,14 +60,14 @@
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,
WorkerBuildContext 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 );
}
}
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/blackhole/BlackHoleBackendQueueProcessorFactory.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/blackhole/BlackHoleBackendQueueProcessorFactory.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/blackhole/BlackHoleBackendQueueProcessorFactory.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -27,9 +27,9 @@
import java.util.List;
import java.util.Properties;
+import org.hibernate.search.spi.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;
@@ -52,7 +52,7 @@
return noOp;
}
- public void initialize(Properties props, SearchFactoryImplementor searchFactory) {
+ public void initialize(Properties props, WorkerBuildContext context) {
// no-op
log.warn( "initialized \"blackhole\" backend. Index changes will be
prepared but discarded!" );
}
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/JGroupsBackendQueueProcessorFactory.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/JGroupsBackendQueueProcessorFactory.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/JGroupsBackendQueueProcessorFactory.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -35,6 +35,7 @@
import org.slf4j.Logger;
import org.hibernate.search.Environment;
+import org.hibernate.search.spi.WorkerBuildContext;
import org.hibernate.search.SearchException;
import org.hibernate.search.backend.BackendQueueProcessorFactory;
import org.hibernate.search.backend.LuceneWork;
@@ -67,13 +68,12 @@
protected Channel channel = null;
protected Address address;
- public void initialize(Properties props, SearchFactoryImplementor searchFactory) {
- this.searchFactory = searchFactory;
+ public void initialize(Properties props, WorkerBuildContext context) {
+ this.searchFactory = context.getUninitializedSearchFactory();
if ( props.containsKey( JG_CLUSTER_NAME ) ) {
setClusterName( props.getProperty( JG_CLUSTER_NAME ) );
}
-
prepareJGroupsChannel( props );
}
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/MasterJGroupsBackendQueueProcessorFactory.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/MasterJGroupsBackendQueueProcessorFactory.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jgroups/MasterJGroupsBackendQueueProcessorFactory.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -29,9 +29,9 @@
import org.jgroups.Receiver;
+import org.hibernate.search.spi.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.
@@ -48,10 +48,9 @@
private Receiver masterListener;
@Override
- public void initialize(Properties props, SearchFactoryImplementor searchFactory) {
- super.initialize( props, searchFactory );
- initLuceneBackendQueueProcessorFactory( props, searchFactory );
-
+ public void initialize(Properties props, WorkerBuildContext context) {
+ super.initialize( props, context );
+ initLuceneBackendQueueProcessorFactory( props, context );
registerMasterListener();
}
@@ -65,9 +64,9 @@
channel.setReceiver( masterListener );
}
- private void initLuceneBackendQueueProcessorFactory(Properties props,
SearchFactoryImplementor searchFactory) {
+ private void initLuceneBackendQueueProcessorFactory(Properties props, WorkerBuildContext
context) {
luceneBackendQueueProcessorFactory = new LuceneBackendQueueProcessorFactory();
- luceneBackendQueueProcessorFactory.initialize( props, searchFactory );
+ luceneBackendQueueProcessorFactory.initialize( props, context );
}
public Receiver getMasterListener() {
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -35,8 +35,8 @@
import javax.naming.NamingException;
import org.hibernate.search.Environment;
+import org.hibernate.search.spi.WorkerBuildContext;
import org.hibernate.search.SearchException;
-import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.backend.BackendQueueProcessorFactory;
import org.hibernate.search.backend.LuceneWork;
@@ -53,7 +53,7 @@
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, WorkerBuildContext context) {
//TODO proper exception if jms queues and connecitons are not there
this.properties = props;
this.jmsConnectionFactoryName = props.getProperty( JMS_CONNECTION_FACTORY );
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -29,6 +29,7 @@
import java.util.Properties;
import java.util.List;
+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;
@@ -63,11 +64,11 @@
*/
private boolean sync;
- public void initialize(Properties props, SearchFactoryImplementor
searchFactoryImplementor) {
- this.searchFactoryImp = searchFactoryImplementor;
+ public void initialize(Properties props, WorkerBuildContext 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 );
}
}
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/PerDPResources.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/PerDPResources.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/PerDPResources.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -24,10 +24,10 @@
*/
package org.hibernate.search.backend.impl.lucene;
+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;
-import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.exception.ErrorHandler;
import org.hibernate.search.store.DirectoryProvider;
import org.hibernate.search.util.LoggerFactory;
@@ -52,12 +52,12 @@
private final boolean exclusiveIndexUsage;
private final ErrorHandler errorHandler;
- PerDPResources(SearchFactoryImplementor searchFactoryImp, DirectoryProvider<?> dp)
{
- workspace = new Workspace( searchFactoryImp, dp );
+ PerDPResources(WorkerBuildContext 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() {
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/DocumentBuilderContainedEntity.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/DocumentBuilderContainedEntity.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/DocumentBuilderContainedEntity.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -56,7 +56,6 @@
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.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 @@
* @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 @@
}
}
- 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 @@
}
private void initializeClass(XClass clazz, PropertiesMetadata propertiesMetadata,
boolean isRoot, String prefix,
- Set<XClass> processedClasses, InitContext context) {
+ Set<XClass> processedClasses, ConfigContext context) {
List<XClass> hierarchy = new ArrayList<XClass>();
for ( XClass currentClass = clazz; currentClass != null; currentClass =
currentClass.getSuperclass() ) {
hierarchy.add( currentClass );
@@ -187,7 +186,7 @@
* @param prefix The current prefix used for the <code>Document</code> 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 @@
}
protected void initializeMemberLevelAnnotations(XProperty member, PropertiesMetadata
propertiesMetadata, boolean isRoot,
- String prefix, Set<XClass> processedClasses, InitContext context) {
+ String prefix, Set<XClass> processedClasses, ConfigContext context) {
checkDocumentId( member, propertiesMetadata, isRoot, prefix, context );
checkForField( member, propertiesMetadata, prefix, context );
checkForFields( member, propertiesMetadata, prefix, context );
@@ -232,13 +231,13 @@
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 @@
}
}
- 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 @@
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 @@
}
}
- 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 @@
}
}
- private void checkForIndexedEmbedded(XProperty member, PropertiesMetadata
propertiesMetadata, String prefix, Set<XClass> processedClasses, InitContext
context) {
+ private void checkForIndexedEmbedded(XProperty member, PropertiesMetadata
propertiesMetadata, String prefix, Set<XClass> processedClasses, ConfigContext
context) {
IndexedEmbedded embeddedAnn = member.getAnnotation( IndexedEmbedded.class );
if ( embeddedAnn != null ) {
int oldMaxLevel = maxLevel;
@@ -426,7 +425,7 @@
}
}
- 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 @@
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 @@
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()
);
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/DocumentBuilderIndexedEntity.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/DocumentBuilderIndexedEntity.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/DocumentBuilderIndexedEntity.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -68,7 +68,7 @@
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 @@
* @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 @@
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 @@
}
}
- 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 @@
*
* @return the annotation used as document id or <code>null</code> 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 @@
@SuppressWarnings("unchecked")
Class<? extends Annotation> 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 ) {
Copied:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/ConfigContext.java
(from rev 19832,
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/InitContext.java)
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/ConfigContext.java
(rev 0)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/ConfigContext.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -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
<code>Analyzer</code> or default
+ * <code>Similarity</code>) 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<String, AnalyzerDef> analyzerDefs = new HashMap<String,
AnalyzerDef>();
+ private final List<DelegateNamedAnalyzer> lazyAnalyzers = new
ArrayList<DelegateNamedAnalyzer>();
+ 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<DelegateNamedAnalyzer> 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<String, Analyzer> initLazyAnalyzers() {
+ Map<String, Analyzer> initializedAnalyzers = new HashMap<String, Analyzer>(
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<String, AnalyzerDef> 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;
+ }
+ }
+}
Added:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/DirectoryProviderData.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/DirectoryProviderData.java
(rev 0)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/DirectoryProviderData.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -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<Class<?>> classes = new HashSet<Class<?>>( 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<Class<?>> getClasses() {
+ return classes;
+ }
+
+ public Similarity getSimilarity() {
+ return similarity;
+ }
+
+ public boolean isExclusiveIndexUsage() {
+ return exclusiveIndexUsage;
+ }
+}
Deleted:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/InitContext.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/InitContext.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/InitContext.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -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
<code>Analyzer</code> or default
- * <code>Similarity</code>) 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<String, AnalyzerDef> analyzerDefs = new HashMap<String,
AnalyzerDef>();
- private final List<DelegateNamedAnalyzer> lazyAnalyzers = new
ArrayList<DelegateNamedAnalyzer>();
- 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<DelegateNamedAnalyzer> 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<String, Analyzer> initLazyAnalyzers() {
- Map<String, Analyzer> initializedAnalyzers = new HashMap<String, Analyzer>(
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<String, AnalyzerDef> 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;
- }
- }
-}
Added:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/PolymorphicIndexHierarchy.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/PolymorphicIndexHierarchy.java
(rev 0)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/PolymorphicIndexHierarchy.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -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<Class<?>, Set<Class<?>>> classToIndexedClass;
+
+ PolymorphicIndexHierarchy() {
+ classToIndexedClass = new HashMap<Class<?>, Set<Class<?>>>();
+ }
+
+ 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<Class<?>> classesSet = classToIndexedClass.get( superclass );
+ if ( classesSet == null ) {
+ classesSet = new HashSet<Class<?>>();
+ classToIndexedClass.put( superclass, classesSet );
+ }
+ classesSet.add( indexedClass );
+ }
+
+ Set<Class<?>> getIndexedClasses(Class<?>[] classes) {
+ Set<Class<?>> idexedClasses = new HashSet<Class<?>>();
+ for ( Class clazz : classes ) {
+ Set<Class<?>> 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;
+ }
+}
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -27,10 +27,8 @@
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;
@@ -47,6 +45,8 @@
import org.hibernate.annotations.common.reflection.XClass;
import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
import org.hibernate.search.Environment;
+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;
@@ -97,7 +97,7 @@
/**
* @author Emmanuel Bernard
*/
-public class SearchFactoryImpl implements SearchFactoryImplementor {
+public class SearchFactoryImpl implements SearchFactoryImplementor, WritableBuildContext,
WorkerBuildContext {
static {
Version.touch();
@@ -191,17 +191,17 @@
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 +266,14 @@
data = new DirectoryProviderData();
dirProviderData.put( directoryProvider, data );
}
- data.classes.add( clazz );
- data.exclusiveIndexUsage = exclusiveIndexUsage;
+ data.getClasses().add( clazz );
+ data.setExclusiveIndexUsage( exclusiveIndexUsage );
}
public Set<Class<?>>
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 +400,7 @@
data = new DirectoryProviderData();
dirProviderData.put( provider, data );
}
- data.optimizerStrategy = optimizerStrategy;
+ data.setOptimizerStrategy( optimizerStrategy );
}
public void addIndexingParameters(DirectoryProvider<?> provider,
LuceneIndexingParameters indexingParams) {
@@ -411,7 +411,7 @@
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) {
@@ -483,7 +483,7 @@
}
private void initDocumentBuilders(SearchConfiguration cfg, ReflectionManager
reflectionManager) {
- InitContext context = new InitContext( cfg );
+ ConfigContext context = new ConfigContext( cfg );
Iterator<Class<?>> iter = cfg.getClassMappings();
DirectoryProviderFactory factory = new DirectoryProviderFactory();
@@ -539,7 +539,7 @@
factory.startDirectoryProviders();
}
- private void initProgrammaticAnalyzers(InitContext context, ReflectionManager
reflectionManager) {
+ private void initProgrammaticAnalyzers(ConfigContext context, ReflectionManager
reflectionManager) {
final Map defaults = reflectionManager.getDefaults();
if (defaults != null) {
@@ -578,24 +578,16 @@
return filterDefinitions.get( name );
}
- private static class DirectoryProviderData {
- public final ReentrantLock dirLock = new ReentrantLock();
- public OptimizerStrategy optimizerStrategy;
- public final Set<Class<?>> classes = new HashSet<Class<?>>( 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 +619,10 @@
return batchBackend;
}
- /**
- * Helper class which keeps track of all super classes and interfaces of the indexed
entities.
- */
- private static class PolymorphicIndexHierarchy {
- private Map<Class<?>, Set<Class<?>>> classToIndexedClass;
-
- PolymorphicIndexHierarchy() {
- classToIndexedClass = new HashMap<Class<?>, Set<Class<?>>>();
- }
-
- 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<Class<?>> classesSet = classToIndexedClass.get( superclass );
- if ( classesSet == null ) {
- classesSet = new HashSet<Class<?>>();
- classToIndexedClass.put( superclass, classesSet );
- }
- classesSet.add( indexedClass );
- }
-
- Set<Class<?>> getIndexedClasses(Class<?>[] classes) {
- Set<Class<?>> idexedClasses = new HashSet<Class<?>>();
- for ( Class clazz : classes ) {
- Set<Class<?>> 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 +630,7 @@
public boolean isExclusiveIndexUsageEnabled(DirectoryProvider<?> provider) {
if ( barrier != 0 ) {
} //read barrier
- return dirProviderData.get( provider ).exclusiveIndexUsage;
+ return dirProviderData.get( provider ).isExclusiveIndexUsage();
}
/**
@@ -713,4 +657,7 @@
return errorHandler;
}
+ public SearchFactoryImplementor getUninitializedSearchFactory() {
+ return this;
+ }
}
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/reader/NotSharedReaderProvider.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/reader/NotSharedReaderProvider.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/reader/NotSharedReaderProvider.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -28,10 +28,13 @@
import java.util.Properties;
import org.apache.lucene.index.IndexReader;
+
+import org.hibernate.search.spi.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;
/**
@@ -68,7 +71,7 @@
}
}
- public void initialize(Properties props, SearchFactoryImplementor
searchFactoryImplementor) {
+ public void initialize(Properties props, BuildContext context) {
}
public void destroy() {
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProvider.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProvider.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProvider.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -27,8 +27,9 @@
import java.util.Properties;
import org.apache.lucene.index.IndexReader;
+
+import org.hibernate.search.spi.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
@@ -55,7 +56,7 @@
/**
* Inialize the reader provider before its use.
*/
- void initialize(Properties props, SearchFactoryImplementor searchFactoryImplementor);
+ void initialize(Properties props, BuildContext context);
/**
* Called when a <code>SearchFactory</code> is destroyed. This method
typically releases resources.
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProviderFactory.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProviderFactory.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/reader/ReaderProviderFactory.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -28,8 +28,8 @@
import java.util.Properties;
import org.hibernate.search.Environment;
+import org.hibernate.search.spi.BuildContext;
import org.hibernate.search.cfg.SearchConfiguration;
-import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.util.PluginLoader;
import org.hibernate.util.StringHelper;
@@ -50,7 +50,7 @@
return workerProperties;
}
- public static ReaderProvider createReaderProvider(SearchConfiguration cfg,
SearchFactoryImplementor searchFactoryImplementor) {
+ public static ReaderProvider createReaderProvider(SearchConfiguration cfg, BuildContext
context) {
Properties props = getProperties( cfg );
String impl = props.getProperty( Environment.READER_STRATEGY );
ReaderProvider readerProvider;
@@ -72,7 +72,7 @@
readerProvider = PluginLoader.instanceFromName( ReaderProvider.class, impl,
ReaderProviderFactory.class, "readerProvider" );
}
- readerProvider.initialize( props, searchFactoryImplementor );
+ readerProvider.initialize( props, context );
return readerProvider;
}
}
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/reader/SharedReaderProvider.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/reader/SharedReaderProvider.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/reader/SharedReaderProvider.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -38,13 +38,14 @@
import org.slf4j.Logger;
import org.hibernate.annotations.common.AssertionFailure;
+import org.hibernate.search.spi.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;
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 <code>SearchFactory</code>, 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 void initialize(Properties props, SearchFactoryImplementor
searchFactoryImplementor) {
- Set<DirectoryProvider<?>> providers =
searchFactoryImplementor.getDirectoryProviders();
+ public void initialize(Properties props, BuildContext context) {
+ Set<DirectoryProvider<?>> providers = context.getDirectoryProviders();
perDirectoryProviderManipulationLocks = new HashMap<DirectoryProvider, Lock>(
providers.size() );
for ( DirectoryProvider dp : providers ) {
perDirectoryProviderManipulationLocks.put( dp, new ReentrantLock() );
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/reader/SharingBufferReaderProvider.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/reader/SharingBufferReaderProvider.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/reader/SharingBufferReaderProvider.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -39,8 +39,8 @@
import org.slf4j.Logger;
import org.hibernate.annotations.common.AssertionFailure;
+import org.hibernate.search.spi.BuildContext;
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 @@
log.trace( "IndexReader closed." );
}
- public void initialize(Properties props, SearchFactoryImplementor
searchFactoryImplementor) {
- Set<DirectoryProvider<?>> providers =
searchFactoryImplementor.getDirectoryProviders();
+ public void initialize(Properties props, BuildContext context) {
+ Set<DirectoryProvider<?>> 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
Added:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/spi/BuildContext.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/spi/BuildContext.java
(rev 0)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/spi/BuildContext.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -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
+ * <code>
+ * void method() {
+ * int size = sfi.getDirectoryProviders().size();
+ * }
+ * </code>
+ * to
+ * <code>
+ * void method() {
+ * int size = directoryProviders().size();
+ * }
+ * </code>
+ * where directoryProviders is a class variable.
+ */
+ SearchFactoryImplementor getUninitializedSearchFactory();
+
+ String getIndexingStrategy();
+
+ Set<DirectoryProvider<?>> getDirectoryProviders();
+}
Added:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/spi/WorkerBuildContext.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/spi/WorkerBuildContext.java
(rev 0)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/spi/WorkerBuildContext.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -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<Class<?>> getClassesInDirectoryProvider(DirectoryProvider<?>
provider);
+ LuceneIndexingParameters getIndexingParameters(DirectoryProvider<?>
directoryProvider);
+ ReentrantLock getDirectoryProviderLock(DirectoryProvider<?> provider);
+ Similarity getSimilarity(DirectoryProvider<?> directoryProvider);
+ boolean isExclusiveIndexUsageEnabled(DirectoryProvider<?> directoryProvider);
+ ErrorHandler getErrorHandler();
+}
Added:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/spi/WritableBuildContext.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/spi/WritableBuildContext.java
(rev 0)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/spi/WritableBuildContext.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -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
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProvider.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProvider.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProvider.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -27,9 +27,10 @@
import java.util.Properties;
import org.apache.lucene.store.Directory;
-import org.hibernate.search.engine.SearchFactoryImplementor;
+import org.hibernate.search.spi.BuildContext;
+
/**
* Set up and provide a Lucene <code>Directory</code>
* <code>equals()</code> and <code>hashCode()</code> must
guaranty equality
@@ -45,7 +46,7 @@
/**
* 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, BuildContext
context);
/**
* Executed after initialize, this method set up the heavy process of starting up the
DirectoryProvider
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProviderFactory.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProviderFactory.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/DirectoryProviderFactory.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -32,13 +32,13 @@
import org.hibernate.annotations.common.reflection.XClass;
import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
import org.hibernate.search.Environment;
+import org.hibernate.search.spi.WritableBuildContext;
import org.hibernate.search.SearchException;
import org.hibernate.search.annotations.Indexed;
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;
@@ -70,7 +70,7 @@
private static final String NBR_OF_SHARDS = SHARDING_STRATEGY +
".nbr_of_shards";
public DirectoryProviders createDirectoryProviders(XClass entity, SearchConfiguration
cfg,
- SearchFactoryImplementor searchFactoryImplementor,
+ WritableBuildContext context,
ReflectionManager reflectionManager) {
//get properties
String directoryProviderName = getDirectoryProviderName( entity, cfg );
@@ -83,8 +83,10 @@
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
@@ -115,7 +117,7 @@
}
private DirectoryProvider<?> createDirectoryProvider(String directoryProviderName,
Properties indexProps,
- Class<?> entity, SearchFactoryImplementor searchFactoryImplementor)
{
+ Class<?> entity, WritableBuildContext context) {
String className = indexProps.getProperty( "directory_provider" );
DirectoryProvider<?> provider;
if ( StringHelper.isEmpty( className ) ) {
@@ -126,7 +128,7 @@
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 );
@@ -136,30 +138,30 @@
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 {
- configureOptimizerStrategy( 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;
}
}
- private void configureOptimizerStrategy(SearchFactoryImplementor
searchFactoryImplementor, 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;
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 );
}
/**
@@ -178,10 +180,10 @@
* @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(WritableBuildContext context,
Properties directoryProperties, DirectoryProvider<?> provider) {
LuceneIndexingParameters indexingParams = new LuceneIndexingParameters(
directoryProperties );
- searchFactoryImplementor.addIndexingParameters( provider, indexingParams );
+ context.addIndexingParameters( provider, indexingParams );
}
/**
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/FSDirectoryProvider.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/FSDirectoryProvider.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/FSDirectoryProvider.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -31,8 +31,8 @@
import org.apache.lucene.store.FSDirectory;
import org.slf4j.Logger;
+import org.hibernate.search.spi.BuildContext;
import org.hibernate.search.SearchException;
-import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.util.LoggerFactory;
/**
@@ -57,9 +57,9 @@
private FSDirectory directory;
private String indexName;
- public void initialize(String directoryProviderName, Properties properties,
SearchFactoryImplementor searchFactoryImplementor) {
+ public void initialize(String directoryProviderName, Properties properties, BuildContext
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();
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/FSMasterDirectoryProvider.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/FSMasterDirectoryProvider.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/FSMasterDirectoryProvider.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -37,6 +37,7 @@
import org.apache.lucene.store.FSDirectory;
import org.slf4j.Logger;
+import org.hibernate.search.spi.BuildContext;
import org.hibernate.search.SearchException;
import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.util.FileHelper;
@@ -79,7 +80,7 @@
private Properties properties;
private TriggerTask task;
- public void initialize(String directoryProviderName, Properties properties,
SearchFactoryImplementor searchFactoryImplementor) {
+ public void initialize(String directoryProviderName, Properties properties, BuildContext
context) {
this.properties = properties;
this.directoryProviderName = directoryProviderName;
//source guessing
@@ -95,7 +96,7 @@
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
}
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -37,8 +37,8 @@
import org.slf4j.Logger;
import org.hibernate.AssertionFailure;
+import org.hibernate.search.spi.BuildContext;
import org.hibernate.search.SearchException;
-import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.util.FileHelper;
import org.hibernate.search.util.LoggerFactory;
@@ -74,7 +74,7 @@
private Properties properties;
private TriggerTask task;
- public void initialize(String directoryProviderName, Properties properties,
SearchFactoryImplementor searchFactoryImplementor) {
+ public void initialize(String directoryProviderName, Properties properties, BuildContext
context) {
this.properties = properties;
this.directoryProviderName = directoryProviderName;
//source guessing
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/RAMDirectoryProvider.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/RAMDirectoryProvider.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/RAMDirectoryProvider.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -31,7 +31,7 @@
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.RAMDirectory;
import org.hibernate.HibernateException;
-import org.hibernate.search.engine.SearchFactoryImplementor;
+import org.hibernate.search.spi.BuildContext;
/**
* Use a Lucene RAMDirectory
@@ -44,7 +44,7 @@
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, BuildContext
context) {
indexName = directoryProviderName;
directory.setLockFactory( DirectoryProviderHelper.createLockFactory( null, properties )
);
}
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/optimization/IncrementalOptimizerStrategy.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/optimization/IncrementalOptimizerStrategy.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/optimization/IncrementalOptimizerStrategy.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -30,10 +30,10 @@
import org.apache.lucene.index.IndexWriter;
import org.slf4j.Logger;
+import org.hibernate.search.spi.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;
@@ -52,7 +52,7 @@
private long transactions = 0;
private DirectoryProvider directoryProvider;
- public void initialize(DirectoryProvider directoryProvider, Properties indexProperties,
SearchFactoryImplementor searchFactoryImplementor) {
+ 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 );
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/optimization/NoOpOptimizerStrategy.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/optimization/NoOpOptimizerStrategy.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/optimization/NoOpOptimizerStrategy.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -26,15 +26,15 @@
import java.util.Properties;
+import org.hibernate.search.spi.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,
SearchFactoryImplementor searchFactoryImplementor) {
+ public void initialize(DirectoryProvider directoryProvider, Properties indexProperties,
BuildContext context) {
}
public void optimizationForced() {
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/optimization/OptimizerStrategy.java
===================================================================
---
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/optimization/OptimizerStrategy.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/optimization/OptimizerStrategy.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -26,15 +26,15 @@
import java.util.Properties;
+import org.hibernate.search.spi.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,
SearchFactoryImplementor searchFactoryImplementor);
+ public void initialize(DirectoryProvider directoryProvider, Properties indexProperties,
BuildContext initContext);
/**
* has to be called in a thread safe way
Modified:
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/analyzer/AnalyzerTest.java
===================================================================
---
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/analyzer/AnalyzerTest.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/analyzer/AnalyzerTest.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -40,7 +40,7 @@
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 @@
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();
Modified:
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/reader/functionality/TestableSharingBufferReaderProvider.java
===================================================================
---
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/reader/functionality/TestableSharingBufferReaderProvider.java 2010-06-28
12:28:59 UTC (rev 19832)
+++
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/reader/functionality/TestableSharingBufferReaderProvider.java 2010-06-28
12:31:04 UTC (rev 19833)
@@ -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.TermVectorMapper;
import org.apache.lucene.store.Directory;
+import org.hibernate.search.spi.BuildContext;
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 @@
}
@Override
- public void initialize(Properties props, SearchFactoryImplementor
searchFactoryImplementor) {
+ public void initialize(Properties props, BuildContext context) {
try {
for ( Directory directory : manipulators.keySet() ) {
currentReaders.put( directory, new PerDirectoryLatestReader( directory ) );