[hibernate-commits] Hibernate SVN: r11631 - in trunk/HibernateExt/search/src: java/org/hibernate/search/backend and 11 other directories.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Tue Jun 5 11:48:42 EDT 2007
Author: epbernard
Date: 2007-06-05 11:48:42 -0400 (Tue, 05 Jun 2007)
New Revision: 11631
Added:
trunk/HibernateExt/search/src/java/org/hibernate/search/SearchFactory.java
trunk/HibernateExt/search/src/java/org/hibernate/search/engine/SearchFactoryImplementor.java
trunk/HibernateExt/search/src/java/org/hibernate/search/impl/SearchFactoryImpl.java
Removed:
trunk/HibernateExt/search/src/java/org/hibernate/search/SearchFactory.java
Modified:
trunk/HibernateExt/search/src/java/org/hibernate/search/FullTextSession.java
trunk/HibernateExt/search/src/java/org/hibernate/search/Version.java
trunk/HibernateExt/search/src/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java
trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Worker.java
trunk/HibernateExt/search/src/java/org/hibernate/search/backend/WorkerFactory.java
trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Workspace.java
trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java
trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/TransactionalWorker.java
trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/AbstractJMSHibernateSearchController.java
trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java
trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessor.java
trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java
trunk/HibernateExt/search/src/java/org/hibernate/search/engine/DocumentBuilder.java
trunk/HibernateExt/search/src/java/org/hibernate/search/engine/DocumentExtractor.java
trunk/HibernateExt/search/src/java/org/hibernate/search/engine/Loader.java
trunk/HibernateExt/search/src/java/org/hibernate/search/engine/ObjectLoader.java
trunk/HibernateExt/search/src/java/org/hibernate/search/engine/ProjectionLoader.java
trunk/HibernateExt/search/src/java/org/hibernate/search/engine/QueryLoader.java
trunk/HibernateExt/search/src/java/org/hibernate/search/event/FullTextIndexEventListener.java
trunk/HibernateExt/search/src/java/org/hibernate/search/impl/FullTextSessionImpl.java
trunk/HibernateExt/search/src/java/org/hibernate/search/query/FullTextQueryImpl.java
trunk/HibernateExt/search/src/java/org/hibernate/search/reader/NotSharedReaderProvider.java
trunk/HibernateExt/search/src/java/org/hibernate/search/reader/ReaderProvider.java
trunk/HibernateExt/search/src/java/org/hibernate/search/reader/ReaderProviderFactory.java
trunk/HibernateExt/search/src/java/org/hibernate/search/reader/SharedReaderProvider.java
trunk/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProvider.java
trunk/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProviderFactory.java
trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSDirectoryProvider.java
trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java
trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java
trunk/HibernateExt/search/src/java/org/hibernate/search/store/RAMDirectoryProvider.java
trunk/HibernateExt/search/src/java/org/hibernate/search/util/ContextHelper.java
trunk/HibernateExt/search/src/test/org/hibernate/search/test/SearchTestCase.java
Log:
HSEARCH-71 fulltextSession.getSearchFactory()
HSEARCH-60 SearchFactory SearchFactoryImplementor SearchFactoryImpl
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/FullTextSession.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/FullTextSession.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/FullTextSession.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -22,4 +22,9 @@
* Indexation is batched per transaction
*/
void index(Object entity);
+
+ /**
+ * return the SearchFactory
+ */
+ SearchFactory getSearchFactory();
}
Deleted: trunk/HibernateExt/search/src/java/org/hibernate/search/SearchFactory.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/SearchFactory.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/SearchFactory.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -1,171 +0,0 @@
-//$Id$
-package org.hibernate.search;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.WeakHashMap;
-import java.util.concurrent.locks.ReentrantLock;
-
-import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.analysis.standard.StandardAnalyzer;
-import org.hibernate.annotations.common.reflection.ReflectionManager;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.search.annotations.Indexed;
-import org.hibernate.search.backend.BackendQueueProcessorFactory;
-import org.hibernate.search.backend.Worker;
-import org.hibernate.search.backend.WorkerFactory;
-import org.hibernate.search.engine.DocumentBuilder;
-import org.hibernate.search.reader.ReaderProvider;
-import org.hibernate.search.reader.ReaderProviderFactory;
-import org.hibernate.search.store.DirectoryProvider;
-import org.hibernate.search.store.DirectoryProviderFactory;
-import org.hibernate.util.ReflectHelper;
-
-/**
- * @author Emmanuel Bernard
- */
-public class SearchFactory {
- private static ThreadLocal<WeakHashMap<Configuration, SearchFactory>> contexts =
- new ThreadLocal<WeakHashMap<Configuration, SearchFactory>>();
- static {
- Version.touch();
- }
- private Map<Class, DocumentBuilder<Object>> documentBuilders = new HashMap<Class, DocumentBuilder<Object>>();
- //keep track of the index modifiers per DirectoryProvider since multiple entity can use the same directory provider
- private Map<DirectoryProvider, ReentrantLock> lockableDirectoryProviders =
- new HashMap<DirectoryProvider, ReentrantLock>();
- private Worker worker;
- private ReaderProvider readerProvider;
- private BackendQueueProcessorFactory backendQueueProcessorFactory;
-
- public BackendQueueProcessorFactory getBackendQueueProcessorFactory() {
- return backendQueueProcessorFactory;
- }
-
- public void setBackendQueueProcessorFactory(BackendQueueProcessorFactory backendQueueProcessorFactory) {
- this.backendQueueProcessorFactory = backendQueueProcessorFactory;
- }
-
- public SearchFactory(Configuration cfg) {
- //yuk
- ReflectionManager reflectionManager = getReflectionManager( cfg );
-
- Class analyzerClass;
- String analyzerClassName = cfg.getProperty( Environment.ANALYZER_CLASS );
- if ( analyzerClassName != null ) {
- try {
- analyzerClass = ReflectHelper.classForName( analyzerClassName );
- }
- catch (Exception e) {
- throw new SearchException(
- "Lucene analyzer class '" + analyzerClassName + "' defined in property '" + Environment.ANALYZER_CLASS + "' could not be found.",
- e
- );
- }
- }
- else {
- analyzerClass = StandardAnalyzer.class;
- }
- // Initialize analyzer
- Analyzer analyzer;
- try {
- analyzer = (Analyzer) analyzerClass.newInstance();
- }
- catch (ClassCastException e) {
- throw new SearchException(
- "Lucene analyzer does not implement " + Analyzer.class.getName() + ": " + analyzerClassName
- );
- }
- catch (Exception e) {
- throw new SearchException( "Failed to instantiate lucene analyzer with type " + analyzerClassName );
- }
-
- Iterator iter = cfg.getClassMappings();
- DirectoryProviderFactory factory = new DirectoryProviderFactory();
- while ( iter.hasNext() ) {
- PersistentClass clazz = (PersistentClass) iter.next();
- Class<?> mappedClass = clazz.getMappedClass();
- if ( mappedClass != null ) {
- XClass mappedXClass = reflectionManager.toXClass( mappedClass );
- if ( mappedXClass != null && mappedXClass.isAnnotationPresent( Indexed.class ) ) {
- DirectoryProvider provider = factory.createDirectoryProvider( mappedXClass, cfg, this );
- if ( !lockableDirectoryProviders.containsKey( provider ) ) {
- lockableDirectoryProviders.put( provider, new ReentrantLock() );
- }
- final DocumentBuilder<Object> documentBuilder = new DocumentBuilder<Object>(
- mappedXClass, analyzer, provider, reflectionManager
- );
-
- documentBuilders.put( mappedClass, documentBuilder );
- }
- }
- }
- Set<Class> indexedClasses = documentBuilders.keySet();
- for ( DocumentBuilder builder : documentBuilders.values() ) {
- builder.postInitialize( indexedClasses );
- }
- worker = WorkerFactory.createWorker(cfg, this);
- readerProvider = ReaderProviderFactory.createReaderProvider(cfg, this);
- }
-
- //code doesn't have to be multithreaded because SF creation is not.
- //this is not a public API, should really only be used during the SessionFActory building
- public static SearchFactory getSearchFactory(Configuration cfg) {
- WeakHashMap<Configuration, SearchFactory> contextMap = contexts.get();
- if (contextMap == null) {
- contextMap = new WeakHashMap<Configuration, SearchFactory>( 2 );
- contexts.set( contextMap );
- }
- SearchFactory searchFactory = contextMap.get( cfg );
- if ( searchFactory == null) {
- searchFactory = new SearchFactory(cfg);
-
- contextMap.put( cfg, searchFactory );
- }
- return searchFactory;
- }
-
-
- public Map<Class, DocumentBuilder<Object>> getDocumentBuilders() {
- return documentBuilders;
- }
-
- public Map<DirectoryProvider, ReentrantLock> getLockableDirectoryProviders() {
- return lockableDirectoryProviders;
- }
-
- public Worker getWorker() {
- return worker;
- }
-
- public ReaderProvider getReaderProvider() {
- return readerProvider;
- }
-
- //not happy about having it as a helper class but I don't want cfg to be associated with the SearchFactory
- public static ReflectionManager getReflectionManager(Configuration cfg) {
- ReflectionManager reflectionManager;
- try {
- //TODO introduce a ReflectionManagerHolder interface to avoid reflection
- //I want to avoid hard link between HAN and Validator for usch a simple need
- //reuse the existing reflectionManager one when possible
- reflectionManager =
- (ReflectionManager) cfg.getClass().getMethod( "getReflectionManager" ).invoke( cfg );
-
- }
- catch (Exception e) {
- reflectionManager = new JavaReflectionManager();
- }
- return reflectionManager;
- }
-
- public DirectoryProvider getDirectoryProvider(Class entity) {
- DocumentBuilder<Object> documentBuilder = getDocumentBuilders().get( entity );
- return documentBuilder == null ? null : documentBuilder.getDirectoryProvider();
- }
-}
Added: trunk/HibernateExt/search/src/java/org/hibernate/search/SearchFactory.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/SearchFactory.java (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/SearchFactory.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -0,0 +1,23 @@
+//$Id: $
+package org.hibernate.search;
+
+import org.hibernate.search.reader.ReaderProvider;
+import org.hibernate.search.store.DirectoryProvider;
+
+/**
+ * Provide application wide operations as well as access to the underlying Lucene resources.
+ * @author Emmanuel Bernard
+ */
+public interface SearchFactory {
+ /**
+ * Provide the configured readerProvider strategy,
+ * hence access to a Lucene IndexReader
+ */
+ ReaderProvider getReaderProvider();
+
+ /**
+ * Provide access to the DirectoryProvider (hence the Lucene Directory)
+ * for a given entity
+ */
+ DirectoryProvider getDirectoryProvider(Class entity);
+}
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/Version.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/Version.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/Version.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -10,7 +10,7 @@
* @author Emmanuel Bernard
*/
public class Version {
- public static final String VERSION = "3.0.0.Beta2";
+ public static final String VERSION = "3.0.0.Beta3SNAPSHOT" + new Date();
private static Log log = LogFactory.getLog( Version.class );
static {
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/BackendQueueProcessorFactory.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -4,7 +4,7 @@
import java.util.Properties;
import java.util.List;
-import org.hibernate.search.SearchFactory;
+import org.hibernate.search.engine.SearchFactoryImplementor;
/**
* Build stateful backend processor
@@ -14,7 +14,7 @@
* @author Emmanuel Bernard
*/
public interface BackendQueueProcessorFactory {
- void initialize(Properties props, SearchFactory searchFactory);
+ void initialize(Properties props, SearchFactoryImplementor searchFactory);
/**
* Return a runnable implementation responsible for processing the queue to a given backend
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Worker.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Worker.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Worker.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -5,7 +5,7 @@
import java.io.Serializable;
import org.hibernate.event.EventSource;
-import org.hibernate.search.SearchFactory;
+import org.hibernate.search.engine.SearchFactoryImplementor;
/**
* Perform work for a given session. This implementation has to be multi threaded
@@ -14,5 +14,5 @@
public interface Worker {
void performWork(Object entity, Serializable id, WorkType workType, EventSource session);
- void initialize(Properties props, SearchFactory searchFactory);
+ void initialize(Properties props, SearchFactoryImplementor searchFactoryImplementor);
}
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/WorkerFactory.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/WorkerFactory.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/WorkerFactory.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -7,7 +7,7 @@
import org.hibernate.cfg.Configuration;
import org.hibernate.search.Environment;
import org.hibernate.search.SearchException;
-import org.hibernate.search.SearchFactory;
+import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.backend.impl.TransactionalWorker;
import org.hibernate.util.ReflectHelper;
import org.hibernate.util.StringHelper;
@@ -30,7 +30,7 @@
return workerProperties;
}
- public static Worker createWorker(Configuration cfg, SearchFactory searchFactory) {
+ public static Worker createWorker(Configuration cfg, SearchFactoryImplementor searchFactoryImplementor) {
Properties props = getProperties( cfg );
String impl = props.getProperty( Environment.WORKER_SCOPE );
Worker worker;
@@ -55,7 +55,7 @@
throw new SearchException("Unable to instanciate worker class: " + impl, e );
}
}
- worker.initialize( props, searchFactory );
+ worker.initialize( props, searchFactoryImplementor );
return worker;
}
}
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Workspace.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Workspace.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/Workspace.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -13,7 +13,7 @@
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.hibernate.search.engine.DocumentBuilder;
-import org.hibernate.search.SearchFactory;
+import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.SearchException;
import org.hibernate.search.store.DirectoryProvider;
import org.hibernate.annotations.common.AssertionFailure;
@@ -35,20 +35,20 @@
private Map<DirectoryProvider, IndexReader> readers = new HashMap<DirectoryProvider, IndexReader>();
private Map<DirectoryProvider, IndexWriter> writers = new HashMap<DirectoryProvider, IndexWriter>();
private List<DirectoryProvider> lockedProviders = new ArrayList<DirectoryProvider>();
- private SearchFactory searchFactory;
+ private SearchFactoryImplementor searchFactoryImplementor;
- public Workspace(SearchFactory searchFactory) {
- this.searchFactory = searchFactory;
+ public Workspace(SearchFactoryImplementor searchFactoryImplementor) {
+ this.searchFactoryImplementor = searchFactoryImplementor;
}
public DocumentBuilder getDocumentBuilder(Class entity) {
- return searchFactory.getDocumentBuilders().get( entity );
+ return searchFactoryImplementor.getDocumentBuilders().get( entity );
}
public IndexReader getIndexReader(Class entity) {
//TODO NPEs
- DirectoryProvider provider = searchFactory.getDirectoryProvider( entity );
+ DirectoryProvider provider = searchFactoryImplementor.getDirectoryProvider( entity );
//one cannot access a reader for update after a writer has been accessed
if ( writers.containsKey( provider ) )
throw new AssertionFailure("Tries to read for update a index while a writer is accessed" + entity);
@@ -66,7 +66,7 @@
}
public IndexWriter getIndexWriter(Class entity) {
- DirectoryProvider provider = searchFactory.getDirectoryProvider( entity );
+ DirectoryProvider provider = searchFactoryImplementor.getDirectoryProvider( entity );
//one has to close a reader for update before a writer is accessed
IndexReader reader = readers.get( provider );
if ( reader != null ) {
@@ -83,7 +83,7 @@
lockProvider( provider );
try {
writer = new IndexWriter(
- provider.getDirectory(), searchFactory.getDocumentBuilders().get( entity ).getAnalyzer(), false
+ provider.getDirectory(), searchFactoryImplementor.getDocumentBuilders().get( entity ).getAnalyzer(), false
); //have been created at init time
writers.put( provider, writer );
}
@@ -95,7 +95,7 @@
private void lockProvider(DirectoryProvider provider) {
//make sure to use a semaphore
- ReentrantLock lock = searchFactory.getLockableDirectoryProviders().get( provider );
+ ReentrantLock lock = searchFactoryImplementor.getLockableDirectoryProviders().get( provider );
//of course a given thread cannot have a race cond with itself
if ( !lock.isHeldByCurrentThread() ) {
lock.lock();
@@ -133,7 +133,7 @@
}
}
for ( DirectoryProvider provider : lockedProviders ) {
- searchFactory.getLockableDirectoryProviders().get( provider ).unlock();
+ searchFactoryImplementor.getLockableDirectoryProviders().get( provider ).unlock();
}
readers.clear();
writers.clear();
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -15,7 +15,6 @@
import org.hibernate.annotations.common.util.ReflectHelper;
import org.hibernate.search.Environment;
import org.hibernate.search.SearchException;
-import org.hibernate.search.SearchFactory;
import org.hibernate.search.backend.BackendQueueProcessorFactory;
import org.hibernate.search.backend.LuceneWork;
import org.hibernate.search.backend.QueueingProcessor;
@@ -25,6 +24,7 @@
import org.hibernate.search.backend.impl.jms.JMSBackendQueueProcessorFactory;
import org.hibernate.search.backend.impl.lucene.LuceneBackendQueueProcessorFactory;
import org.hibernate.search.engine.DocumentBuilder;
+import org.hibernate.search.engine.SearchFactoryImplementor;
/**
* Batch work until #performWorks is called.
@@ -36,11 +36,11 @@
private boolean sync;
private ExecutorService executorService;
private BackendQueueProcessorFactory backendQueueProcessorFactory;
- private SearchFactory searchFactory;
+ private SearchFactoryImplementor searchFactoryImplementor;
- public BatchedQueueingProcessor(SearchFactory searchFactory,
+ public BatchedQueueingProcessor(SearchFactoryImplementor searchFactoryImplementor,
Properties properties) {
- this.searchFactory = searchFactory;
+ this.searchFactoryImplementor = searchFactoryImplementor;
//default to sync if none defined
this.sync = !"async".equalsIgnoreCase( properties.getProperty( Environment.WORKER_EXECUTION ) );
@@ -88,8 +88,8 @@
throw new SearchException( "Unable to instanciate processor class: " + backend, e );
}
}
- backendQueueProcessorFactory.initialize( properties, searchFactory );
- searchFactory.setBackendQueueProcessorFactory( backendQueueProcessorFactory );
+ backendQueueProcessorFactory.initialize( properties, searchFactoryImplementor );
+ searchFactoryImplementor.setBackendQueueProcessorFactory( backendQueueProcessorFactory );
}
public void add(Object entity, Serializable id, WorkType workType, WorkQueue workQueue) {
@@ -107,9 +107,9 @@
Work work = queue.get( i );
queue.set( i, null ); // help GC and avoid 2 loaded queues in memory
Class entityClass = Hibernate.getClass( work.getEntity() );
- DocumentBuilder<Object> builder = searchFactory.getDocumentBuilders().get( entityClass );
+ DocumentBuilder<Object> builder = searchFactoryImplementor.getDocumentBuilders().get( entityClass );
if ( builder == null ) return; //or exception?
- builder.addWorkToQueue(work.getEntity(), work.getId(), work.getType(), luceneQueue, searchFactory);
+ builder.addWorkToQueue(work.getEntity(), work.getId(), work.getType(), luceneQueue, searchFactoryImplementor );
}
workQueue.setSealedQueue( luceneQueue );
}
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/TransactionalWorker.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/TransactionalWorker.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/TransactionalWorker.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -2,18 +2,15 @@
package org.hibernate.search.backend.impl;
import java.util.Properties;
-import java.util.List;
-import java.util.ArrayList;
import java.io.Serializable;
import org.hibernate.search.backend.Worker;
import org.hibernate.search.backend.QueueingProcessor;
import org.hibernate.search.backend.WorkType;
-import org.hibernate.search.backend.Work;
import org.hibernate.search.backend.WorkQueue;
import org.hibernate.search.backend.impl.BatchedQueueingProcessor;
import org.hibernate.search.util.WeakIdentityHashMap;
-import org.hibernate.search.SearchFactory;
+import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.event.EventSource;
import org.hibernate.Transaction;
@@ -51,7 +48,7 @@
}
}
- public void initialize(Properties props, SearchFactory searchFactory) {
+ public void initialize(Properties props, SearchFactoryImplementor searchFactory) {
this.queueingProcessor = new BatchedQueueingProcessor( searchFactory, props );
}
}
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/AbstractJMSHibernateSearchController.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/AbstractJMSHibernateSearchController.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/AbstractJMSHibernateSearchController.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -12,9 +12,9 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Session;
-import org.hibernate.search.SearchFactory;
import org.hibernate.search.backend.LuceneWork;
import org.hibernate.search.util.ContextHelper;
+import org.hibernate.search.engine.SearchFactoryImplementor;
/**
* Implement the Hibernate Search controller responsible for processing the
@@ -88,7 +88,7 @@
Runnable processor = null;
try {
- SearchFactory factory = ContextHelper.getSearchFactory( session );
+ SearchFactoryImplementor factory = ContextHelper.getSearchFactory( session );
processor = factory.getBackendQueueProcessorFactory().getProcessor( queue );
}
finally {
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/jms/JMSBackendQueueProcessorFactory.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -13,7 +13,7 @@
import org.hibernate.search.Environment;
import org.hibernate.search.SearchException;
-import org.hibernate.search.SearchFactory;
+import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.backend.BackendQueueProcessorFactory;
import org.hibernate.search.backend.LuceneWork;
@@ -30,7 +30,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, SearchFactory searchFactory) {
+ public void initialize(Properties props, SearchFactoryImplementor searchFactoryImplementor) {
//TODO proper exception if jms queues and connecitons are not there
this.properties = props;
this.jmsConnectionFactoryName = props.getProperty( JMS_CONNECTION_FACTORY );
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessor.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessor.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessor.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -5,10 +5,10 @@
import java.util.Comparator;
import java.util.List;
-import org.hibernate.search.SearchFactory;
import org.hibernate.search.backend.AddLuceneWork;
import org.hibernate.search.backend.LuceneWork;
import org.hibernate.search.backend.Workspace;
+import org.hibernate.search.engine.SearchFactoryImplementor;
/**
* Apply the operations to Lucene directories
@@ -18,17 +18,17 @@
*/
public class LuceneBackendQueueProcessor implements Runnable {
private List<LuceneWork> queue;
- private SearchFactory searchFactory;
+ private SearchFactoryImplementor searchFactoryImplementor;
- public LuceneBackendQueueProcessor(List<LuceneWork> queue, SearchFactory searchFactory) {
+ public LuceneBackendQueueProcessor(List<LuceneWork> queue, SearchFactoryImplementor searchFactoryImplementor) {
this.queue = queue;
- this.searchFactory = searchFactory;
+ this.searchFactoryImplementor = searchFactoryImplementor;
}
public void run() {
Workspace workspace;
LuceneWorker worker;
- workspace = new Workspace( searchFactory );
+ workspace = new Workspace( searchFactoryImplementor );
worker = new LuceneWorker( workspace );
try {
deadlockFreeQueue(queue, workspace);
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/backend/impl/lucene/LuceneBackendQueueProcessorFactory.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -4,21 +4,21 @@
import java.util.Properties;
import java.util.List;
-import org.hibernate.search.SearchFactory;
import org.hibernate.search.backend.BackendQueueProcessorFactory;
import org.hibernate.search.backend.LuceneWork;
+import org.hibernate.search.engine.SearchFactoryImplementor;
/**
* @author Emmanuel Bernard
*/
public class LuceneBackendQueueProcessorFactory implements BackendQueueProcessorFactory {
- private SearchFactory searchFactory;
+ private SearchFactoryImplementor searchFactoryImplementor;
- public void initialize(Properties props, SearchFactory searchFactory) {
- this.searchFactory = searchFactory;
+ public void initialize(Properties props, SearchFactoryImplementor searchFactoryImplementor) {
+ this.searchFactoryImplementor = searchFactoryImplementor;
}
public Runnable getProcessor(List<LuceneWork> queue) {
- return new LuceneBackendQueueProcessor( queue, searchFactory );
+ return new LuceneBackendQueueProcessor( queue, searchFactoryImplementor );
}
}
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/engine/DocumentBuilder.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/engine/DocumentBuilder.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/engine/DocumentBuilder.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -10,7 +10,6 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.Arrays;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -28,7 +27,6 @@
import org.hibernate.annotations.common.reflection.XProperty;
import org.hibernate.annotations.common.util.ReflectHelper;
import org.hibernate.search.SearchException;
-import org.hibernate.search.SearchFactory;
import org.hibernate.search.annotations.Boost;
import org.hibernate.search.annotations.ContainedIn;
import org.hibernate.search.annotations.DocumentId;
@@ -311,7 +309,7 @@
return value;
}
- public void addWorkToQueue(T entity, Serializable id, WorkType workType, List<LuceneWork> queue, SearchFactory searchFactory) {
+ public void addWorkToQueue(T entity, Serializable id, WorkType workType, List<LuceneWork> queue, SearchFactoryImplementor searchFactoryImplementor) {
Class entityClass = Hibernate.getClass( entity );
//TODO with the caller loop we are in a n^2: optimize it using a HashMap for work recognition
for ( LuceneWork luceneWork : queue) {
@@ -354,11 +352,11 @@
* When the internal object is changed, we apply the {Add|Update}Work on containedIns
*/
if (searchForContainers) {
- processContainedIn(entity, queue, rootPropertiesMetadata, searchFactory);
+ processContainedIn(entity, queue, rootPropertiesMetadata, searchFactoryImplementor);
}
}
- private void processContainedIn(Object instance, List<LuceneWork> queue, PropertiesMetadata metadata, SearchFactory searchFactory) {
+ private void processContainedIn(Object instance, List<LuceneWork> queue, PropertiesMetadata metadata, SearchFactoryImplementor searchFactoryImplementor) {
for ( int i = 0; i < metadata.containedInGetters.size(); i++ ) {
XMember member = metadata.containedInGetters.get( i );
Object value = getMemberValue( instance, member );
@@ -368,9 +366,9 @@
for ( Object arrayValue : (Object[]) value ) {
//highly inneficient but safe wrt the actual targeted class
Class valueClass = Hibernate.getClass( arrayValue );
- DocumentBuilder builder = searchFactory.getDocumentBuilders().get( valueClass );
+ DocumentBuilder builder = searchFactoryImplementor.getDocumentBuilders().get( valueClass );
if (builder == null) continue;
- processContainedInValue( arrayValue, queue, valueClass, builder, searchFactory );
+ processContainedInValue( arrayValue, queue, valueClass, builder, searchFactoryImplementor );
}
}
else if ( member.isCollection() ) {
@@ -385,16 +383,16 @@
for ( Object collectionValue : collection ) {
//highly inneficient but safe wrt the actual targeted class
Class valueClass = Hibernate.getClass( collectionValue );
- DocumentBuilder builder = searchFactory.getDocumentBuilders().get( valueClass );
+ DocumentBuilder builder = searchFactoryImplementor.getDocumentBuilders().get( valueClass );
if (builder == null) continue;
- processContainedInValue( collectionValue, queue, valueClass, builder, searchFactory );
+ processContainedInValue( collectionValue, queue, valueClass, builder, searchFactoryImplementor );
}
}
else {
Class valueClass = Hibernate.getClass( value );
- DocumentBuilder builder = searchFactory.getDocumentBuilders().get( valueClass );
+ DocumentBuilder builder = searchFactoryImplementor.getDocumentBuilders().get( valueClass );
if (builder == null) continue;
- processContainedInValue( value, queue, valueClass, builder, searchFactory );
+ processContainedInValue( value, queue, valueClass, builder, searchFactoryImplementor );
}
}
//an embedded cannot have a useful @ContainedIn (no shared reference)
@@ -402,9 +400,9 @@
}
private void processContainedInValue(Object value, List<LuceneWork> queue, Class valueClass,
- DocumentBuilder builder, SearchFactory searchFactory) {
+ DocumentBuilder builder, SearchFactoryImplementor searchFactoryImplementor) {
Serializable id = (Serializable) builder.getMemberValue( value, builder.idGetter );
- builder.addWorkToQueue( value, id, WorkType.UPDATE, queue, searchFactory );
+ builder.addWorkToQueue( value, id, WorkType.UPDATE, queue, searchFactoryImplementor );
}
public Document getDocument(T instance, Serializable id) {
@@ -537,14 +535,14 @@
}
}
- public static Serializable getDocumentId(SearchFactory searchFactory, Class clazz, Document document) {
- DocumentBuilder builder = searchFactory.getDocumentBuilders().get( clazz );
+ public static Serializable getDocumentId(SearchFactoryImplementor searchFactoryImplementor, Class clazz, Document document) {
+ DocumentBuilder builder = searchFactoryImplementor.getDocumentBuilders().get( clazz );
if ( builder == null ) throw new SearchException( "No Lucene configuration set up for: " + clazz.getName() );
return (Serializable) builder.getIdBridge().get( builder.getIdKeywordName(), document );
}
- public static Object[] getDocumentFields(SearchFactory searchFactory, Class clazz, Document document, String[] fields) {
- DocumentBuilder builder = searchFactory.getDocumentBuilders().get( clazz );
+ public static Object[] getDocumentFields(SearchFactoryImplementor searchFactoryImplementor, Class clazz, Document document, String[] fields) {
+ DocumentBuilder builder = searchFactoryImplementor.getDocumentBuilders().get( clazz );
if ( builder == null ) throw new SearchException( "No Lucene configuration set up for: " + clazz.getName() );
final int fieldNbr = fields.length;
Object[] result = new Object[fieldNbr];
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/engine/DocumentExtractor.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/engine/DocumentExtractor.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/engine/DocumentExtractor.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -2,27 +2,26 @@
package org.hibernate.search.engine;
import org.apache.lucene.document.Document;
-import org.hibernate.search.SearchFactory;
import org.hibernate.search.engine.EntityInfo;
/**
* @author Emmanuel Bernard
*/
public class DocumentExtractor {
- private SearchFactory searchFactory;
+ private SearchFactoryImplementor searchFactoryImplementor;
private String[] projection;
- public DocumentExtractor(SearchFactory searchFactory, String... projection) {
- this.searchFactory = searchFactory;
+ public DocumentExtractor(SearchFactoryImplementor searchFactoryImplementor, String... projection) {
+ this.searchFactoryImplementor = searchFactoryImplementor;
this.projection = projection;
}
public EntityInfo extract(Document document) {
EntityInfo entityInfo = new EntityInfo();
entityInfo.clazz = DocumentBuilder.getDocumentClass( document );
- entityInfo.id = DocumentBuilder.getDocumentId( searchFactory, entityInfo.clazz, document );
+ entityInfo.id = DocumentBuilder.getDocumentId( searchFactoryImplementor, entityInfo.clazz, document );
if (projection != null && projection.length > 0) {
- entityInfo.projection = DocumentBuilder.getDocumentFields( searchFactory, entityInfo.clazz, document, projection );
+ entityInfo.projection = DocumentBuilder.getDocumentFields( searchFactoryImplementor, entityInfo.clazz, document, projection );
}
//TODO read fields
return entityInfo;
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/engine/Loader.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/engine/Loader.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/engine/Loader.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -4,14 +4,13 @@
import java.util.List;
import org.hibernate.Session;
-import org.hibernate.search.SearchFactory;
import org.hibernate.search.engine.EntityInfo;
/**
* @author Emmanuel Bernard
*/
public interface Loader {
- void init(Session session, SearchFactory searchFactory);
+ void init(Session session, SearchFactoryImplementor searchFactoryImplementor);
Object load(EntityInfo entityInfo);
List load(EntityInfo... entityInfos);
}
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/engine/ObjectLoader.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/engine/ObjectLoader.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/engine/ObjectLoader.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -9,7 +9,6 @@
import org.hibernate.Hibernate;
import org.hibernate.ObjectNotFoundException;
import org.hibernate.Session;
-import org.hibernate.search.SearchFactory;
import org.hibernate.search.engine.EntityInfo;
/**
@@ -19,7 +18,7 @@
private static final Log log = LogFactory.getLog( ObjectLoader.class );
private Session session;
- public void init(Session session, SearchFactory searchFactory) {
+ public void init(Session session, SearchFactoryImplementor searchFactoryImplementor) {
this.session = session;
}
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/engine/ProjectionLoader.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/engine/ProjectionLoader.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/engine/ProjectionLoader.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -5,14 +5,13 @@
import java.util.List;
import org.hibernate.Session;
-import org.hibernate.search.SearchFactory;
import org.hibernate.search.engine.EntityInfo;
/**
* @author Emmanuel Bernard
*/
public class ProjectionLoader implements Loader {
- public void init(Session session, SearchFactory searchFactory) {
+ public void init(Session session, SearchFactoryImplementor searchFactoryImplementor) {
}
public Object load(EntityInfo entityInfo) {
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/engine/QueryLoader.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/engine/QueryLoader.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/engine/QueryLoader.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -4,15 +4,12 @@
import java.util.ArrayList;
import java.util.List;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Hibernate;
import org.hibernate.annotations.common.AssertionFailure;
import org.hibernate.criterion.Disjunction;
import org.hibernate.criterion.Restrictions;
-import org.hibernate.search.SearchFactory;
import org.hibernate.search.engine.EntityInfo;
/**
@@ -24,12 +21,12 @@
private Session session;
private Class entityType;
- private SearchFactory searchFactory;
+ private SearchFactoryImplementor searchFactoryImplementor;
private Criteria criteria;
- public void init(Session session, SearchFactory searchFactory) {
+ public void init(Session session, SearchFactoryImplementor searchFactoryImplementor) {
this.session = session;
- this.searchFactory = searchFactory;
+ this.searchFactoryImplementor = searchFactoryImplementor;
}
public void setEntityType(Class entityType) {
@@ -48,7 +45,7 @@
if (entityType == null) throw new AssertionFailure("EntityType not defined");
if (criteria == null) criteria = session.createCriteria( entityType );
- DocumentBuilder builder = searchFactory.getDocumentBuilders().get( entityType );
+ DocumentBuilder builder = searchFactoryImplementor.getDocumentBuilders().get( entityType );
String idName = builder.getIdentifierName();
int loop = maxResults / MAX_IN_CLAUSE;
boolean exact = maxResults % MAX_IN_CLAUSE == 0;
Added: trunk/HibernateExt/search/src/java/org/hibernate/search/engine/SearchFactoryImplementor.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/engine/SearchFactoryImplementor.java (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/engine/SearchFactoryImplementor.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -0,0 +1,25 @@
+//$Id: $
+package org.hibernate.search.engine;
+
+import java.util.Map;
+import java.util.concurrent.locks.ReentrantLock;
+
+import org.hibernate.search.SearchFactory;
+import org.hibernate.search.store.DirectoryProvider;
+import org.hibernate.search.backend.BackendQueueProcessorFactory;
+import org.hibernate.search.backend.Worker;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface SearchFactoryImplementor extends SearchFactory {
+ BackendQueueProcessorFactory getBackendQueueProcessorFactory();
+
+ void setBackendQueueProcessorFactory(BackendQueueProcessorFactory backendQueueProcessorFactory);
+
+ Map<Class, DocumentBuilder<Object>> getDocumentBuilders();
+
+ Map<DirectoryProvider, ReentrantLock> getLockableDirectoryProviders();
+
+ Worker getWorker();
+}
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/event/FullTextIndexEventListener.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/event/FullTextIndexEventListener.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/event/FullTextIndexEventListener.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -16,7 +16,8 @@
import org.hibernate.event.PostUpdateEventListener;
import org.hibernate.search.backend.WorkType;
import org.hibernate.search.engine.DocumentBuilder;
-import org.hibernate.search.SearchFactory;
+import org.hibernate.search.engine.SearchFactoryImplementor;
+import org.hibernate.search.impl.SearchFactoryImpl;
/**
* This listener supports setting a parent directory for all generated index files.
@@ -34,19 +35,19 @@
private static final Log log = LogFactory.getLog( FullTextIndexEventListener.class );
private boolean used;
- private SearchFactory searchFactory;
+ private SearchFactoryImplementor searchFactoryImplementor;
public void initialize(Configuration cfg) {
- searchFactory = SearchFactory.getSearchFactory( cfg );
- used = searchFactory.getDocumentBuilders().size() != 0;
+ searchFactoryImplementor = SearchFactoryImpl.getSearchFactory( cfg );
+ used = searchFactoryImplementor.getDocumentBuilders().size() != 0;
}
- public SearchFactory getSearchFactory() {
- return searchFactory;
+ public SearchFactoryImplementor getSearchFactoryImplementor() {
+ return searchFactoryImplementor;
}
public void onPostDelete(PostDeleteEvent event) {
- if ( used && searchFactory.getDocumentBuilders().containsKey( event.getEntity().getClass() ) ) {
+ if ( used && searchFactoryImplementor.getDocumentBuilders().containsKey( event.getEntity().getClass() ) ) {
processWork( event.getEntity(), event.getId(), WorkType.DELETE, event );
}
}
@@ -54,7 +55,7 @@
public void onPostInsert(PostInsertEvent event) {
if (used) {
final Object entity = event.getEntity();
- DocumentBuilder<Object> builder = searchFactory.getDocumentBuilders().get( entity.getClass() );
+ DocumentBuilder<Object> builder = searchFactoryImplementor.getDocumentBuilders().get( entity.getClass() );
//not strictly necessary but a smal optimization
if ( builder != null ) {
Serializable id = event.getId();
@@ -67,7 +68,7 @@
if (used) {
final Object entity = event.getEntity();
//not strictly necessary but a smal optimization
- DocumentBuilder<Object> builder = searchFactory.getDocumentBuilders().get( entity.getClass() );
+ DocumentBuilder<Object> builder = searchFactoryImplementor.getDocumentBuilders().get( entity.getClass() );
if ( builder != null ) {
Serializable id = event.getId();
processWork( entity, id, WorkType.UPDATE, event );
@@ -76,6 +77,6 @@
}
private void processWork(Object entity, Serializable id, WorkType workType, AbstractEvent event) {
- searchFactory.getWorker().performWork( entity, id, workType, event.getSession() );
+ searchFactoryImplementor.getWorker().performWork( entity, id, workType, event.getSession() );
}
}
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/impl/FullTextSessionImpl.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/impl/FullTextSessionImpl.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/impl/FullTextSessionImpl.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -41,10 +41,11 @@
import org.hibernate.loader.custom.CustomQuery;
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.search.FullTextSession;
+import org.hibernate.search.FullTextQuery;
import org.hibernate.search.SearchFactory;
-import org.hibernate.search.FullTextQuery;
import org.hibernate.search.backend.WorkType;
import org.hibernate.search.engine.DocumentBuilder;
+import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.query.FullTextQueryImpl;
import org.hibernate.search.util.ContextHelper;
import org.hibernate.stat.SessionStatistics;
@@ -59,6 +60,7 @@
private final Session session;
private final EventSource eventSource;
private final SessionImplementor sessionImplementor;
+ private SearchFactoryImplementor searchFactory;
public FullTextSessionImpl(org.hibernate.Session session) {
this.session = (Session) session;
@@ -87,12 +89,12 @@
if (entity == null) return;
Class clazz = Hibernate.getClass( entity );
//TODO cache that at the FTSession level
- SearchFactory searchFactory = ContextHelper.getSearchFactory( session );
+ SearchFactoryImplementor searchFactoryImplementor = ContextHelper.getSearchFactory( session );
//not strictly necessary but a small optimization
- DocumentBuilder<Object> builder = searchFactory.getDocumentBuilders().get( clazz );
+ DocumentBuilder<Object> builder = searchFactoryImplementor.getDocumentBuilders().get( clazz );
if ( builder != null ) {
Serializable id = session.getIdentifier( entity );
- searchFactory.getWorker().performWork( entity, id, WorkType.UPDATE, eventSource );
+ searchFactoryImplementor.getWorker().performWork( entity, id, WorkType.UPDATE, eventSource );
}
//TODO
//need to add elements in a queue kept at the Session level
@@ -103,6 +105,13 @@
// this is an open discussion
}
+ public SearchFactory getSearchFactory() {
+ if (searchFactory == null) {
+ searchFactory = ContextHelper.getSearchFactory( session );
+ }
+ return searchFactory;
+ }
+
public Query createSQLQuery(String sql, String returnAlias, Class returnClass) {
return session.createSQLQuery( sql, returnAlias, returnClass );
}
Copied: trunk/HibernateExt/search/src/java/org/hibernate/search/impl/SearchFactoryImpl.java (from rev 11625, trunk/HibernateExt/search/src/java/org/hibernate/search/SearchFactory.java)
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/impl/SearchFactoryImpl.java (rev 0)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/impl/SearchFactoryImpl.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -0,0 +1,177 @@
+//$Id$
+package org.hibernate.search.impl;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.WeakHashMap;
+import java.util.concurrent.locks.ReentrantLock;
+
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.backend.BackendQueueProcessorFactory;
+import org.hibernate.search.backend.Worker;
+import org.hibernate.search.backend.WorkerFactory;
+import org.hibernate.search.engine.DocumentBuilder;
+import org.hibernate.search.engine.SearchFactoryImplementor;
+import org.hibernate.search.reader.ReaderProvider;
+import org.hibernate.search.reader.ReaderProviderFactory;
+import org.hibernate.search.store.DirectoryProvider;
+import org.hibernate.search.store.DirectoryProviderFactory;
+import org.hibernate.search.SearchFactory;
+import org.hibernate.search.Version;
+import org.hibernate.search.Environment;
+import org.hibernate.search.SearchException;
+import org.hibernate.util.ReflectHelper;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class SearchFactoryImpl implements SearchFactoryImplementor {
+ private static ThreadLocal<WeakHashMap<Configuration, SearchFactoryImpl>> contexts =
+ new ThreadLocal<WeakHashMap<Configuration, SearchFactoryImpl>>();
+ static {
+ Version.touch();
+ }
+ private Map<Class, DocumentBuilder<Object>> documentBuilders = new HashMap<Class, DocumentBuilder<Object>>();
+ //keep track of the index modifiers per DirectoryProvider since multiple entity can use the same directory provider
+ private Map<DirectoryProvider, ReentrantLock> lockableDirectoryProviders =
+ new HashMap<DirectoryProvider, ReentrantLock>();
+ private Worker worker;
+ private ReaderProvider readerProvider;
+ private BackendQueueProcessorFactory backendQueueProcessorFactory;
+
+ public BackendQueueProcessorFactory getBackendQueueProcessorFactory() {
+ return backendQueueProcessorFactory;
+ }
+
+ public void setBackendQueueProcessorFactory(BackendQueueProcessorFactory backendQueueProcessorFactory) {
+ this.backendQueueProcessorFactory = backendQueueProcessorFactory;
+ }
+
+ public SearchFactoryImpl(Configuration cfg) {
+ //yuk
+ ReflectionManager reflectionManager = getReflectionManager( cfg );
+
+ Class analyzerClass;
+ String analyzerClassName = cfg.getProperty( Environment.ANALYZER_CLASS );
+ if ( analyzerClassName != null ) {
+ try {
+ analyzerClass = ReflectHelper.classForName( analyzerClassName );
+ }
+ catch (Exception e) {
+ throw new SearchException(
+ "Lucene analyzer class '" + analyzerClassName + "' defined in property '" + Environment.ANALYZER_CLASS + "' could not be found.",
+ e
+ );
+ }
+ }
+ else {
+ analyzerClass = StandardAnalyzer.class;
+ }
+ // Initialize analyzer
+ Analyzer analyzer;
+ try {
+ analyzer = (Analyzer) analyzerClass.newInstance();
+ }
+ catch (ClassCastException e) {
+ throw new SearchException(
+ "Lucene analyzer does not implement " + Analyzer.class.getName() + ": " + analyzerClassName
+ );
+ }
+ catch (Exception e) {
+ throw new SearchException( "Failed to instantiate lucene analyzer with type " + analyzerClassName );
+ }
+
+ Iterator iter = cfg.getClassMappings();
+ DirectoryProviderFactory factory = new DirectoryProviderFactory();
+ while ( iter.hasNext() ) {
+ PersistentClass clazz = (PersistentClass) iter.next();
+ Class<?> mappedClass = clazz.getMappedClass();
+ if ( mappedClass != null ) {
+ XClass mappedXClass = reflectionManager.toXClass( mappedClass );
+ if ( mappedXClass != null && mappedXClass.isAnnotationPresent( Indexed.class ) ) {
+ DirectoryProvider provider = factory.createDirectoryProvider( mappedXClass, cfg, this );
+ if ( !lockableDirectoryProviders.containsKey( provider ) ) {
+ lockableDirectoryProviders.put( provider, new ReentrantLock() );
+ }
+ final DocumentBuilder<Object> documentBuilder = new DocumentBuilder<Object>(
+ mappedXClass, analyzer, provider, reflectionManager
+ );
+
+ documentBuilders.put( mappedClass, documentBuilder );
+ }
+ }
+ }
+ Set<Class> indexedClasses = documentBuilders.keySet();
+ for ( DocumentBuilder builder : documentBuilders.values() ) {
+ builder.postInitialize( indexedClasses );
+ }
+ worker = WorkerFactory.createWorker(cfg, this);
+ readerProvider = ReaderProviderFactory.createReaderProvider(cfg, this);
+ }
+
+ //code doesn't have to be multithreaded because SF creation is not.
+ //this is not a public API, should really only be used during the SessionFActory building
+ //FIXME this is ugly, impl.staticmethod, fix that
+ public static SearchFactoryImpl getSearchFactory(Configuration cfg) {
+ WeakHashMap<Configuration, SearchFactoryImpl> contextMap = contexts.get();
+ if (contextMap == null) {
+ contextMap = new WeakHashMap<Configuration, SearchFactoryImpl>( 2 );
+ contexts.set( contextMap );
+ }
+ SearchFactoryImpl searchFactory = contextMap.get( cfg );
+ if ( searchFactory == null) {
+ searchFactory = new SearchFactoryImpl(cfg);
+
+ contextMap.put( cfg, searchFactory );
+ }
+ return searchFactory;
+ }
+
+
+ public Map<Class, DocumentBuilder<Object>> getDocumentBuilders() {
+ return documentBuilders;
+ }
+
+ public Map<DirectoryProvider, ReentrantLock> getLockableDirectoryProviders() {
+ return lockableDirectoryProviders;
+ }
+
+ public Worker getWorker() {
+ return worker;
+ }
+
+ public ReaderProvider getReaderProvider() {
+ return readerProvider;
+ }
+
+ //not happy about having it as a helper class but I don't want cfg to be associated with the SearchFactory
+ public static ReflectionManager getReflectionManager(Configuration cfg) {
+ ReflectionManager reflectionManager;
+ try {
+ //TODO introduce a ReflectionManagerHolder interface to avoid reflection
+ //I want to avoid hard link between HAN and Validator for usch a simple need
+ //reuse the existing reflectionManager one when possible
+ reflectionManager =
+ (ReflectionManager) cfg.getClass().getMethod( "getReflectionManager" ).invoke( cfg );
+
+ }
+ catch (Exception e) {
+ reflectionManager = new JavaReflectionManager();
+ }
+ return reflectionManager;
+ }
+
+ public DirectoryProvider getDirectoryProvider(Class entity) {
+ DocumentBuilder<Object> documentBuilder = getDocumentBuilders().get( entity );
+ return documentBuilder == null ? null : documentBuilder.getDirectoryProvider();
+ }
+}
Property changes on: trunk/HibernateExt/search/src/java/org/hibernate/search/impl/SearchFactoryImpl.java
___________________________________________________________________
Name: svn:keywords
+ Id
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/query/FullTextQueryImpl.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/query/FullTextQueryImpl.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/query/FullTextQueryImpl.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -35,7 +35,7 @@
import org.hibernate.impl.CriteriaImpl;
import org.hibernate.search.FullTextQuery;
import org.hibernate.search.SearchException;
-import org.hibernate.search.SearchFactory;
+import org.hibernate.search.impl.SearchFactoryImpl;
import org.hibernate.search.engine.DocumentBuilder;
import org.hibernate.search.engine.DocumentExtractor;
import org.hibernate.search.engine.EntityInfo;
@@ -43,6 +43,7 @@
import org.hibernate.search.engine.ObjectLoader;
import org.hibernate.search.engine.ProjectionLoader;
import org.hibernate.search.engine.QueryLoader;
+import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.store.DirectoryProvider;
import org.hibernate.search.util.ContextHelper;
@@ -92,9 +93,9 @@
//user stop using it
//scrollable is better in this area
- SearchFactory searchFactory = ContextHelper.getSearchFactoryBySFI( session );
+ SearchFactoryImplementor searchFactoryImplementor = ContextHelper.getSearchFactoryBySFI( session );
//find the directories
- IndexSearcher searcher = buildSearcher( searchFactory );
+ IndexSearcher searcher = buildSearcher( searchFactoryImplementor );
if ( searcher == null ) {
return new IteratorImpl( new ArrayList<EntityInfo>(0), noLoader );
}
@@ -105,13 +106,13 @@
Session sess = (Session) this.session;
List<EntityInfo> entityInfos = new ArrayList<EntityInfo>( max - first + 1 );
- DocumentExtractor extractor = new DocumentExtractor( searchFactory, indexProjection );
+ DocumentExtractor extractor = new DocumentExtractor( searchFactoryImplementor, indexProjection );
for ( int index = first; index <= max; index++ ) {
//TODO use indexSearcher.getIndexReader().document( hits.id(index), FieldSelector(indexProjection) );
Document document = hits.doc( index );
entityInfos.add( extractor.extract( document ) );
}
- Loader loader = getLoader(sess, searchFactory);
+ Loader loader = getLoader(sess, searchFactoryImplementor);
return new IteratorImpl( entityInfos, loader );
}
catch (IOException e) {
@@ -119,7 +120,7 @@
}
finally {
try {
- searchFactory.getReaderProvider().closeReader( searcher.getIndexReader() );
+ searchFactoryImplementor.getReaderProvider().closeReader( searcher.getIndexReader() );
}
catch( SearchException e ) {
log.warn( "Unable to properly close searcher during lucene query: " + getQueryString(), e );
@@ -127,10 +128,10 @@
}
}
- private Loader getLoader(Session session, SearchFactory searchFactory) {
+ private Loader getLoader(Session session, SearchFactoryImplementor searchFactoryImplementor) {
if ( indexProjection != null) {
ProjectionLoader loader = new ProjectionLoader();
- loader.init( session, searchFactory );
+ loader.init( session, searchFactoryImplementor );
return loader;
}
if (criteria != null) {
@@ -151,27 +152,27 @@
}
}
QueryLoader loader = new QueryLoader();
- loader.init( session, searchFactory );
+ loader.init( session, searchFactoryImplementor );
loader.setEntityType( classes[0] );
loader.setCriteria(criteria);
return loader;
}
else if (classes.length == 1) {
QueryLoader loader = new QueryLoader();
- loader.init( session, searchFactory );
+ loader.init( session, searchFactoryImplementor );
loader.setEntityType( classes[0] );
return loader;
}
else {
final ObjectLoader objectLoader = new ObjectLoader();
- objectLoader.init( session, searchFactory );
+ objectLoader.init( session, searchFactoryImplementor );
return objectLoader;
}
}
public ScrollableResults scroll() throws HibernateException {
//keep the searcher open until the resultset is closed
- SearchFactory searchFactory = ContextHelper.getSearchFactoryBySFI( session );
+ SearchFactoryImplementor searchFactory = ContextHelper.getSearchFactoryBySFI( session );
//find the directories
IndexSearcher searcher = buildSearcher( searchFactory );
@@ -203,9 +204,9 @@
}
public List list() throws HibernateException {
- SearchFactory searchFactory = ContextHelper.getSearchFactoryBySFI( session );
+ SearchFactoryImplementor searchFactoryImplementor = ContextHelper.getSearchFactoryBySFI( session );
//find the directories
- IndexSearcher searcher = buildSearcher( searchFactory );
+ IndexSearcher searcher = buildSearcher( searchFactoryImplementor );
if (searcher == null) return new ArrayList(0);
Hits hits;
try {
@@ -214,12 +215,12 @@
int max = max( first, hits );
Session sess = (Session) this.session;
List<EntityInfo> infos = new ArrayList<EntityInfo>( max - first + 1 );
- DocumentExtractor extractor = new DocumentExtractor( searchFactory, indexProjection );
+ DocumentExtractor extractor = new DocumentExtractor( searchFactoryImplementor, indexProjection );
for ( int index = first; index <= max; index++ ) {
Document document = hits.doc( index );
infos.add( extractor.extract( document ) );
}
- Loader loader = getLoader( sess, searchFactory );
+ Loader loader = getLoader( sess, searchFactoryImplementor );
return loader.load( infos.toArray( new EntityInfo[infos.size()]) );
}
catch (IOException e) {
@@ -227,7 +228,7 @@
}
finally {
try {
- searchFactory.getReaderProvider().closeReader( searcher.getIndexReader() );
+ searchFactoryImplementor.getReaderProvider().closeReader( searcher.getIndexReader() );
}
catch (SearchException e) {
log.warn( "Unable to properly close searcher during lucene query: " + getQueryString(), e );
@@ -296,8 +297,8 @@
* can return null
* TODO change classesAndSubclasses by side effect, which is a mismatch with the Searcher return, fix that.
*/
- private IndexSearcher buildSearcher(SearchFactory searchFactory) {
- Map<Class, DocumentBuilder<Object>> builders = searchFactory.getDocumentBuilders();
+ private IndexSearcher buildSearcher(SearchFactoryImplementor searchFactoryImplementor) {
+ Map<Class, DocumentBuilder<Object>> builders = searchFactoryImplementor.getDocumentBuilders();
List<DirectoryProvider> directories = new ArrayList<DirectoryProvider>();
if ( classes == null || classes.length == 0 ) {
//no class means all classes
@@ -330,7 +331,7 @@
//set up the searcher
final DirectoryProvider[] directoryProviders = directories.toArray( new DirectoryProvider[directories.size()] );
- return new IndexSearcher( searchFactory.getReaderProvider().openReader( directoryProviders ) );
+ return new IndexSearcher( searchFactoryImplementor.getReaderProvider().openReader( directoryProviders ) );
}
private void setResultSize(Hits hits) {
@@ -341,8 +342,8 @@
public int getResultSize() {
if (resultSize == null) {
//get result size without object initialization
- SearchFactory searchFactory = ContextHelper.getSearchFactoryBySFI( session );
- IndexSearcher searcher = buildSearcher( searchFactory );
+ SearchFactoryImplementor searchFactoryImplementor = ContextHelper.getSearchFactoryBySFI( session );
+ IndexSearcher searcher = buildSearcher( searchFactoryImplementor );
if (searcher == null) {
resultSize = 0;
}
@@ -358,7 +359,7 @@
finally {
//searcher cannot be null
try {
- searchFactory.getReaderProvider().closeReader( searcher.getIndexReader() );
+ searchFactoryImplementor.getReaderProvider().closeReader( searcher.getIndexReader() );
}
catch( SearchException e ) {
log.warn( "Unable to properly close searcher during lucene query: " + getQueryString(), e );
@@ -407,7 +408,7 @@
}
private static Loader noLoader = new Loader() {
- public void init(Session session, SearchFactory searchFactory) {
+ public void init(Session session, SearchFactoryImplementor searchFactoryImplementor) {
}
public Object load(EntityInfo entityInfo) {
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/reader/NotSharedReaderProvider.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/reader/NotSharedReaderProvider.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/reader/NotSharedReaderProvider.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -6,7 +6,7 @@
import org.apache.lucene.index.IndexReader;
import org.hibernate.search.SearchException;
-import org.hibernate.search.SearchFactory;
+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;
@@ -48,6 +48,6 @@
}
}
- public void initialize(Properties props, SearchFactory searchFactory) {
+ public void initialize(Properties props, SearchFactoryImplementor searchFactoryImplementor) {
}
}
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/reader/ReaderProvider.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/reader/ReaderProvider.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/reader/ReaderProvider.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -4,8 +4,8 @@
import java.util.Properties;
import org.apache.lucene.index.IndexReader;
-import org.hibernate.search.SearchFactory;
import org.hibernate.search.store.DirectoryProvider;
+import org.hibernate.search.engine.SearchFactoryImplementor;
/**
* Responsible for providing and managing the lifecycle of a read only reader
@@ -30,5 +30,5 @@
*/
void closeReader(IndexReader reader);
- void initialize(Properties props, SearchFactory searchFactory);
+ void initialize(Properties props, SearchFactoryImplementor searchFactoryImplementor);
}
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/reader/ReaderProviderFactory.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/reader/ReaderProviderFactory.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/reader/ReaderProviderFactory.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -7,7 +7,7 @@
import org.hibernate.cfg.Configuration;
import org.hibernate.search.Environment;
import org.hibernate.search.SearchException;
-import org.hibernate.search.SearchFactory;
+import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.util.ReflectHelper;
import org.hibernate.util.StringHelper;
@@ -28,7 +28,7 @@
return workerProperties;
}
- public static ReaderProvider createReaderProvider(Configuration cfg, SearchFactory searchFactory) {
+ public static ReaderProvider createReaderProvider(Configuration cfg, SearchFactoryImplementor searchFactoryImplementor) {
Properties props = getProperties( cfg );
String impl = props.getProperty( Environment.READER_STRATEGY );
ReaderProvider readerProvider;
@@ -57,7 +57,7 @@
throw new SearchException( "Unable to instanciate readerProvider class: " + impl, e );
}
}
- readerProvider.initialize( props, searchFactory );
+ readerProvider.initialize( props, searchFactoryImplementor );
return readerProvider;
}
}
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/reader/SharedReaderProvider.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/reader/SharedReaderProvider.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/reader/SharedReaderProvider.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -17,7 +17,7 @@
import org.apache.lucene.index.MultiReader;
import org.hibernate.annotations.common.AssertionFailure;
import org.hibernate.search.SearchException;
-import org.hibernate.search.SearchFactory;
+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;
@@ -284,7 +284,7 @@
}
}
- public void initialize(Properties props, SearchFactory searchFactory) {
+ public void initialize(Properties props, SearchFactoryImplementor searchFactoryImplementor) {
if ( subReadersField == null ) {
try {
subReadersField = MultiReader.class.getDeclaredField( "subReaders" );
@@ -294,7 +294,7 @@
throw new SearchException( "Incompatible version of Lucene: MultiReader.subReaders not accessible", e );
}
}
- Set<DirectoryProvider> providers = searchFactory.getLockableDirectoryProviders().keySet();
+ Set<DirectoryProvider> providers = searchFactoryImplementor.getLockableDirectoryProviders().keySet();
perDirectoryProviderManipulationLocks = new HashMap<DirectoryProvider, Lock>( providers.size() );
for (DirectoryProvider dp : providers) {
perDirectoryProviderManipulationLocks.put( dp, new ReentrantLock() );
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProvider.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProvider.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProvider.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -4,7 +4,7 @@
import java.util.Properties;
import org.apache.lucene.store.Directory;
-import org.hibernate.search.SearchFactory;
+import org.hibernate.search.engine.SearchFactoryImplementor;
/**
@@ -22,7 +22,7 @@
/**
* get the information to initialize the directory and build its hashCode
*/
- void initialize(String directoryProviderName, Properties properties, SearchFactory searchFactory);
+ void initialize(String directoryProviderName, Properties properties, SearchFactoryImplementor searchFactoryImplementor);
/**
* Returns an initialized Lucene Directory. This method call <b>must</b> be threadsafe
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProviderFactory.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProviderFactory.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/store/DirectoryProviderFactory.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -9,7 +9,8 @@
import org.hibernate.HibernateException;
import org.hibernate.cfg.Configuration;
import org.hibernate.search.annotations.Indexed;
-import org.hibernate.search.SearchFactory;
+import org.hibernate.search.impl.SearchFactoryImpl;
+import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.annotations.common.reflection.ReflectionManager;
import org.hibernate.annotations.common.reflection.XClass;
@@ -40,7 +41,7 @@
private static String DEFAULT_DIRECTORY_PROVIDER = FSDirectoryProvider.class.getName();
//TODO for the public?
- public DirectoryProvider<?> createDirectoryProvider(XClass entity, Configuration cfg, SearchFactory searchFactory) {
+ public DirectoryProvider<?> createDirectoryProvider(XClass entity, Configuration cfg, SearchFactoryImplementor searchFactoryImplementor) {
//get properties
String directoryProviderName = getDirectoryProviderName( entity, cfg );
Properties indexProps = getDirectoryProperties( cfg, directoryProviderName );
@@ -62,7 +63,7 @@
throw new HibernateException( "Unable to instanciate directory provider: " + className, e );
}
try {
- provider.initialize( directoryProviderName, indexProps, searchFactory );
+ provider.initialize( directoryProviderName, indexProps, searchFactoryImplementor );
}
catch (Exception e) {
throw new HibernateException( "Unable to initialize: " + directoryProviderName, e);
@@ -98,7 +99,7 @@
private static String getDirectoryProviderName(XClass clazz, Configuration cfg) {
//yuk
- ReflectionManager reflectionManager = SearchFactory.getReflectionManager(cfg);
+ ReflectionManager reflectionManager = SearchFactoryImpl.getReflectionManager(cfg);
//get the most specialized (ie subclass > superclass) non default index name
//if none extract the name from the most generic (superclass > subclass) @Indexed class in the hierarchy
//FIXME I'm inclined to get rid of the default value
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSDirectoryProvider.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSDirectoryProvider.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSDirectoryProvider.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -12,7 +12,7 @@
import org.apache.lucene.store.FSDirectory;
import org.hibernate.HibernateException;
import org.hibernate.search.util.DirectoryProviderHelper;
-import org.hibernate.search.SearchFactory;
+import org.hibernate.search.engine.SearchFactoryImplementor;
/**
* Use a Lucene FSDirectory
@@ -27,7 +27,7 @@
private static Log log = LogFactory.getLog( FSDirectoryProvider.class );
private String indexName;
- public void initialize(String directoryProviderName, Properties properties, SearchFactory searchFactory) {
+ public void initialize(String directoryProviderName, Properties properties, SearchFactoryImplementor searchFactoryImplementor) {
File indexDir = DirectoryProviderHelper.determineIndexDir( directoryProviderName, properties );
try {
boolean create = !indexDir.exists();
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -17,7 +17,7 @@
import org.apache.commons.logging.LogFactory;
import org.hibernate.search.util.DirectoryProviderHelper;
import org.hibernate.search.util.FileHelper;
-import org.hibernate.search.SearchFactory;
+import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.HibernateException;
/**
@@ -37,9 +37,9 @@
private int current;
private String indexName;
private Timer timer;
- private SearchFactory searchFactory;
+ private SearchFactoryImplementor searchFactory;
- public void initialize(String directoryProviderName, Properties properties, SearchFactory searchFactory) {
+ public void initialize(String directoryProviderName, Properties properties, SearchFactoryImplementor searchFactoryImplementor) {
//source guessing
String source = DirectoryProviderHelper.getSourceDirectory( "sourceBase", "source", directoryProviderName, properties );
if ( source == null)
@@ -90,7 +90,7 @@
timer = new Timer(true); //daemon thread, the copy algorithm is robust
TimerTask task = new FSMasterDirectoryProvider.TriggerTask(indexName, source, this );
timer.scheduleAtFixedRate( task, period, period );
- this.searchFactory = searchFactory;
+ this.searchFactory = searchFactoryImplementor;
}
public FSDirectory getDirectory() {
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -18,7 +18,7 @@
import org.hibernate.AssertionFailure;
import org.hibernate.search.util.FileHelper;
import org.hibernate.search.util.DirectoryProviderHelper;
-import org.hibernate.search.SearchFactory;
+import org.hibernate.search.engine.SearchFactoryImplementor;
/**
* File based directory provider that takes care of geting a version of the index
@@ -39,7 +39,7 @@
private String indexName;
private Timer timer;
- public void initialize(String directoryProviderName, Properties properties, SearchFactory searchFactory) {
+ public void initialize(String directoryProviderName, Properties properties, SearchFactoryImplementor searchFactoryImplementor) {
//source guessing
String source = DirectoryProviderHelper.getSourceDirectory( "sourceBase", "source", directoryProviderName, properties );
if (source == null)
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/store/RAMDirectoryProvider.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/store/RAMDirectoryProvider.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/store/RAMDirectoryProvider.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -8,7 +8,7 @@
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.RAMDirectory;
import org.hibernate.HibernateException;
-import org.hibernate.search.SearchFactory;
+import org.hibernate.search.engine.SearchFactoryImplementor;
/**
* Use a Lucene RAMDirectory
@@ -21,7 +21,7 @@
private RAMDirectory directory;
private String indexName;
- public void initialize(String directoryProviderName, Properties properties, SearchFactory searchFactory) {
+ public void initialize(String directoryProviderName, Properties properties, SearchFactoryImplementor searchFactoryImplementor) {
indexName = directoryProviderName;
directory = new RAMDirectory();
try {
Modified: trunk/HibernateExt/search/src/java/org/hibernate/search/util/ContextHelper.java
===================================================================
--- trunk/HibernateExt/search/src/java/org/hibernate/search/util/ContextHelper.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/java/org/hibernate/search/util/ContextHelper.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -6,19 +6,19 @@
import org.hibernate.engine.SessionImplementor;
import org.hibernate.event.PostInsertEventListener;
import org.hibernate.search.event.FullTextIndexEventListener;
-import org.hibernate.search.SearchFactory;
+import org.hibernate.search.engine.SearchFactoryImplementor;
/**
* @author Emmanuel Bernard
*/
public abstract class ContextHelper {
- public static SearchFactory getSearchFactory(Session session) {
+ public static SearchFactoryImplementor getSearchFactory(Session session) {
return getSearchFactoryBySFI( (SessionImplementor) session );
}
- public static SearchFactory getSearchFactoryBySFI(SessionImplementor session) {
+ public static SearchFactoryImplementor getSearchFactoryBySFI(SessionImplementor session) {
PostInsertEventListener[] listeners = session.getListeners().getPostInsertEventListeners();
FullTextIndexEventListener listener = null;
//FIXME this sucks since we mandante the event listener use
@@ -31,6 +31,6 @@
if ( listener == null ) throw new HibernateException(
"Hibernate Search Event listeners not configured, please check the reference documentation and the " +
"application's hibernate.cfg.xml" );
- return listener.getSearchFactory();
+ return listener.getSearchFactoryImplementor();
}
}
Modified: trunk/HibernateExt/search/src/test/org/hibernate/search/test/SearchTestCase.java
===================================================================
--- trunk/HibernateExt/search/src/test/org/hibernate/search/test/SearchTestCase.java 2007-06-05 02:25:56 UTC (rev 11630)
+++ trunk/HibernateExt/search/src/test/org/hibernate/search/test/SearchTestCase.java 2007-06-05 15:48:42 UTC (rev 11631)
@@ -20,7 +20,7 @@
}
protected Directory getDirectory(Class clazz) {
- return getLuceneEventListener().getSearchFactory().getDirectoryProvider( clazz ).getDirectory();
+ return getLuceneEventListener().getSearchFactoryImplementor().getDirectoryProvider( clazz ).getDirectory();
}
private FullTextIndexEventListener getLuceneEventListener() {
More information about the hibernate-commits
mailing list