Hibernate SVN: r19839 - in search/trunk/hibernate-search/src: main/java/org/hibernate/search/batchindexing and 4 other directories.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2010-06-28 14:44:09 -0400 (Mon, 28 Jun 2010)
New Revision: 19839
Added:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/util/HibernateHelper.java
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/batchindexing/EntityConsumerLuceneworkProducer.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/engine/ObjectLoader.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/ObjectLoaderHelper.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/FullTextSessionImpl.java
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/query/LuceneQueryTest.java
Log:
HSEARCH-549 Isolate Hibernate.initialize / Hibernate.getClass calls into HibernateHelper
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 13:03:24 UTC (rev 19838)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java 2010-06-28 18:44:09 UTC (rev 19839)
@@ -35,7 +35,6 @@
import org.slf4j.Logger;
-import org.hibernate.Hibernate;
import org.hibernate.annotations.common.AssertionFailure;
import org.hibernate.search.Environment;
import org.hibernate.search.spi.WorkerBuildContext;
@@ -57,6 +56,7 @@
import org.hibernate.search.engine.DocumentBuilderContainedEntity;
import org.hibernate.search.engine.DocumentBuilderIndexedEntity;
import org.hibernate.search.engine.SearchFactoryImplementor;
+import org.hibernate.search.util.HibernateHelper;
import org.hibernate.search.util.LoggerFactory;
import org.hibernate.search.util.PluginLoader;
import org.hibernate.util.StringHelper;
@@ -253,10 +253,9 @@
}
private <T> void addWorkToBuilderQueue(List<LuceneWork> luceneQueue, Work<T> work) {
- @SuppressWarnings("unchecked")
Class<T> entityClass = work.getEntityClass() != null ?
work.getEntityClass() :
- Hibernate.getClass( work.getEntity() );
+ HibernateHelper.getClass( work.getEntity() );
DocumentBuilderIndexedEntity<T> entityBuilder = searchFactoryImplementor.getDocumentBuilderIndexedEntity( entityClass );
if ( entityBuilder != null ) {
entityBuilder.addWorkToQueue(
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/batchindexing/EntityConsumerLuceneworkProducer.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/batchindexing/EntityConsumerLuceneworkProducer.java 2010-06-28 13:03:24 UTC (rev 19838)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/batchindexing/EntityConsumerLuceneworkProducer.java 2010-06-28 18:44:09 UTC (rev 19839)
@@ -31,7 +31,6 @@
import org.hibernate.CacheMode;
import org.hibernate.FlushMode;
-import org.hibernate.Hibernate;
import org.hibernate.LockOptions;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
@@ -41,6 +40,7 @@
import org.hibernate.search.bridge.TwoWayFieldBridge;
import org.hibernate.search.engine.DocumentBuilderIndexedEntity;
import org.hibernate.search.engine.SearchFactoryImplementor;
+import org.hibernate.search.util.HibernateHelper;
import org.hibernate.search.util.LoggerFactory;
import org.slf4j.Logger;
@@ -129,7 +129,7 @@
@SuppressWarnings("unchecked")
private void index( Object entity, Session session ) throws InterruptedException {
Serializable id = session.getIdentifier( entity );
- Class clazz = Hibernate.getClass( entity );
+ Class<?> clazz = HibernateHelper.getClass( entity );
DocumentBuilderIndexedEntity docBuilder = documentBuilders.get( clazz );
TwoWayFieldBridge idBridge = docBuilder.getIdBridge();
String idInString = idBridge.objectToString( id );
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 13:03:24 UTC (rev 19838)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/DocumentBuilderContainedEntity.java 2010-06-28 18:44:09 UTC (rev 19839)
@@ -40,7 +40,6 @@
import org.apache.lucene.search.Similarity;
import org.slf4j.Logger;
-import org.hibernate.Hibernate;
import org.hibernate.annotations.common.AssertionFailure;
import org.hibernate.annotations.common.reflection.ReflectionManager;
import org.hibernate.annotations.common.reflection.XAnnotatedElement;
@@ -67,6 +66,7 @@
import org.hibernate.search.bridge.FieldBridge;
import org.hibernate.search.bridge.LuceneOptions;
import org.hibernate.search.impl.ConfigContext;
+import org.hibernate.search.util.HibernateHelper;
import org.hibernate.search.util.LoggerFactory;
import org.hibernate.search.util.PassThroughAnalyzer;
import org.hibernate.search.util.ReflectionHelper;
@@ -703,8 +703,7 @@
}
private <T> void processSingleContainedInInstance(List<LuceneWork> queue, SearchFactoryImplementor searchFactoryImplementor, T value) {
- @SuppressWarnings("unchecked")
- Class<T> valueClass = Hibernate.getClass( value );
+ Class<T> valueClass = HibernateHelper.getClass( value );
DocumentBuilderIndexedEntity<T> builderIndexedEntity =
searchFactoryImplementor.getDocumentBuilderIndexedEntity( valueClass );
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 13:03:24 UTC (rev 19838)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/DocumentBuilderIndexedEntity.java 2010-06-28 18:44:09 UTC (rev 19839)
@@ -41,7 +41,6 @@
import org.apache.lucene.index.Term;
import org.slf4j.Logger;
-import org.hibernate.Hibernate;
import org.hibernate.annotations.common.AssertionFailure;
import org.hibernate.annotations.common.util.ReflectHelper;
import org.hibernate.annotations.common.reflection.ReflectionManager;
@@ -71,6 +70,7 @@
import org.hibernate.search.impl.ConfigContext;
import org.hibernate.search.store.DirectoryProvider;
import org.hibernate.search.store.IndexShardingStrategy;
+import org.hibernate.search.util.HibernateHelper;
import org.hibernate.search.util.LoggerFactory;
import org.hibernate.search.util.ReflectionHelper;
@@ -389,7 +389,7 @@
}
Document doc = new Document();
- final Class<?> entityType = Hibernate.getClass( instance );
+ final Class<?> entityType = HibernateHelper.getClass( instance );
doc.setBoost( metadata.getClassBoost( instance ) );
// add the class name of the entity to the document
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/ObjectLoader.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/ObjectLoader.java 2010-06-28 13:03:24 UTC (rev 19838)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/ObjectLoader.java 2010-06-28 18:44:09 UTC (rev 19839)
@@ -30,8 +30,8 @@
import org.slf4j.Logger;
-import org.hibernate.Hibernate;
import org.hibernate.Session;
+import org.hibernate.search.util.HibernateHelper;
import org.hibernate.search.util.LoggerFactory;
/**
@@ -71,7 +71,7 @@
for (EntityInfo entityInfo : entityInfos) {
try {
Object entity = session.load( entityInfo.clazz, entityInfo.id );
- Hibernate.initialize( entity );
+ HibernateHelper.initialize( entity );
result.add( entity );
}
catch (RuntimeException e) {
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/ObjectLoaderHelper.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/ObjectLoaderHelper.java 2010-06-28 13:03:24 UTC (rev 19838)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/ObjectLoaderHelper.java 2010-06-28 18:44:09 UTC (rev 19839)
@@ -32,10 +32,10 @@
import org.slf4j.Logger;
import org.hibernate.Criteria;
-import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.criterion.Disjunction;
import org.hibernate.criterion.Restrictions;
+import org.hibernate.search.util.HibernateHelper;
import org.hibernate.search.util.LoggerFactory;
/**
@@ -50,7 +50,7 @@
//be sure to get an initialized object but save from ONFE and ENFE
Object maybeProxy = session.load( entityInfo.clazz, entityInfo.id );
try {
- Hibernate.initialize( maybeProxy );
+ HibernateHelper.initialize( maybeProxy );
}
catch (RuntimeException e) {
if ( LoaderHelper.isObjectNotFoundException( e ) ) {
@@ -99,7 +99,7 @@
List result = new ArrayList( entityInfos.length );
for (EntityInfo entityInfo : entityInfos) {
Object element = session.load( entityInfo.clazz, entityInfo.id );
- if ( Hibernate.isInitialized( element ) ) {
+ if ( HibernateHelper.isInitialized( element ) ) {
//all existing elements should have been loaded by the query,
//the other ones are missing ones
result.add( element );
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/FullTextSessionImpl.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/FullTextSessionImpl.java 2010-06-28 13:03:24 UTC (rev 19838)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/FullTextSessionImpl.java 2010-06-28 18:44:09 UTC (rev 19839)
@@ -37,7 +37,6 @@
import org.hibernate.EntityMode;
import org.hibernate.Filter;
import org.hibernate.FlushMode;
-import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Interceptor;
import org.hibernate.LockMode;
@@ -79,6 +78,7 @@
import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.query.FullTextQueryImpl;
import org.hibernate.search.util.ContextHelper;
+import org.hibernate.search.util.HibernateHelper;
import org.hibernate.stat.SessionStatistics;
import org.hibernate.type.Type;
@@ -173,7 +173,7 @@
throw new IllegalArgumentException( "Entity to index should not be null" );
}
- Class<?> clazz = Hibernate.getClass( entity );
+ Class<?> clazz = HibernateHelper.getClass( entity );
//TODO cache that at the FTSession level
SearchFactoryImplementor searchFactoryImplementor = getSearchFactoryImplementor();
//not strictly necessary but a small optimization
Added: search/trunk/hibernate-search/src/main/java/org/hibernate/search/util/HibernateHelper.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/util/HibernateHelper.java (rev 0)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/util/HibernateHelper.java 2010-06-28 18:44:09 UTC (rev 19839)
@@ -0,0 +1,28 @@
+package org.hibernate.search.util;
+
+import org.hibernate.Hibernate;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public final class HibernateHelper {
+ private HibernateHelper() {};
+
+ /**
+ * Get the real class type.
+ * In case of Hibernate proxies, return the entity type rather than the proxy's
+ */
+ public static <T> Class<T> getClass(T entity) {
+ @SuppressWarnings("unchecked")
+ final Class<T> type = Hibernate.getClass( entity );
+ return type;
+ }
+
+ public static void initialize(Object entity) {
+ Hibernate.initialize( entity );
+ }
+
+ public static boolean isInitialized(Object entity) {
+ return Hibernate.isInitialized( entity );
+ }
+}
Modified: search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/query/LuceneQueryTest.java
===================================================================
--- search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/query/LuceneQueryTest.java 2010-06-28 13:03:24 UTC (rev 19838)
+++ search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/query/LuceneQueryTest.java 2010-06-28 18:44:09 UTC (rev 19839)
@@ -30,13 +30,13 @@
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Query;
import org.hibernate.FetchMode;
-import org.hibernate.Hibernate;
import org.hibernate.ScrollableResults;
import org.hibernate.Transaction;
import org.hibernate.search.FullTextQuery;
import org.hibernate.search.FullTextSession;
import org.hibernate.search.Search;
import org.hibernate.search.test.SearchTestCase;
+import org.hibernate.search.util.HibernateHelper;
import org.hibernate.stat.Statistics;
@@ -86,7 +86,7 @@
assertNotNull( result );
assertEquals( "Query with no class filter", 2, result.size() );
for (Object element : result) {
- assertTrue( Hibernate.isInitialized( element ) );
+ assertTrue( HibernateHelper.isInitialized( element ) );
s.delete( element );
}
s.flush();
@@ -530,7 +530,7 @@
assertNotNull( result );
assertEquals( "Query with no class filter", 2, result.size() );
for (Object element : result) {
- assertTrue( Hibernate.isInitialized( element ) );
+ assertTrue( HibernateHelper.isInitialized( element ) );
s.delete( element );
}
for (Object element : s.createQuery( "from java.lang.Object" ).list()) s.delete( element );
@@ -558,14 +558,14 @@
assertNotNull( result );
assertEquals( "Query with no explicit criteria", 1, result.size() );
book = (Book) result.get( 0 );
- assertFalse( "Association should not be inintialized", Hibernate.isInitialized( book.getAuthors() ) );
+ assertFalse( "Association should not be inintialized", HibernateHelper.isInitialized( book.getAuthors() ) );
result = s.createFullTextQuery( query ).setCriteriaQuery(
s.createCriteria( Book.class ).setFetchMode( "authors", FetchMode.JOIN ) ).list();
assertNotNull( result );
assertEquals( "Query with explicit criteria", 1, result.size() );
book = (Book) result.get( 0 );
- assertTrue( "Association should be inintialized", Hibernate.isInitialized( book.getAuthors() ) );
+ assertTrue( "Association should be inintialized", HibernateHelper.isInitialized( book.getAuthors() ) );
assertEquals( 1, book.getAuthors().size() );
//cleanup
15 years, 3 months
Hibernate SVN: r19838 - in validator/trunk: hibernate-validator and 4 other directories.
by hibernate-commits@lists.jboss.org
Author: hardy.ferentschik
Date: 2010-06-28 09:03:24 -0400 (Mon, 28 Jun 2010)
New Revision: 19838
Modified:
validator/trunk/hibernate-validator-annotation-processor/pom.xml
validator/trunk/hibernate-validator-archetype/pom.xml
validator/trunk/hibernate-validator-legacy/pom.xml
validator/trunk/hibernate-validator-tck-runner/pom.xml
validator/trunk/hibernate-validator/pom.xml
validator/trunk/pom.xml
Log:
[maven-release-plugin] prepare for next development iteration
Modified: validator/trunk/hibernate-validator/pom.xml
===================================================================
--- validator/trunk/hibernate-validator/pom.xml 2010-06-28 13:03:06 UTC (rev 19837)
+++ validator/trunk/hibernate-validator/pom.xml 2010-06-28 13:03:24 UTC (rev 19838)
@@ -3,7 +3,7 @@
<parent>
<artifactId>hibernate-validator-parent</artifactId>
<groupId>org.hibernate</groupId>
- <version>4.1.0.Final</version>
+ <version>4.2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
Modified: validator/trunk/hibernate-validator-annotation-processor/pom.xml
===================================================================
--- validator/trunk/hibernate-validator-annotation-processor/pom.xml 2010-06-28 13:03:06 UTC (rev 19837)
+++ validator/trunk/hibernate-validator-annotation-processor/pom.xml 2010-06-28 13:03:24 UTC (rev 19838)
@@ -4,7 +4,7 @@
<parent>
<artifactId>hibernate-validator-parent</artifactId>
<groupId>org.hibernate</groupId>
- <version>4.1.0.Final</version>
+ <version>4.2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>org.hibernate</groupId>
Modified: validator/trunk/hibernate-validator-archetype/pom.xml
===================================================================
--- validator/trunk/hibernate-validator-archetype/pom.xml 2010-06-28 13:03:06 UTC (rev 19837)
+++ validator/trunk/hibernate-validator-archetype/pom.xml 2010-06-28 13:03:24 UTC (rev 19838)
@@ -4,7 +4,7 @@
<parent>
<artifactId>hibernate-validator-parent</artifactId>
<groupId>org.hibernate</groupId>
- <version>4.1.0.Final</version>
+ <version>4.2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>org.hibernate</groupId>
Modified: validator/trunk/hibernate-validator-legacy/pom.xml
===================================================================
--- validator/trunk/hibernate-validator-legacy/pom.xml 2010-06-28 13:03:06 UTC (rev 19837)
+++ validator/trunk/hibernate-validator-legacy/pom.xml 2010-06-28 13:03:24 UTC (rev 19838)
@@ -4,13 +4,13 @@
<parent>
<artifactId>hibernate-validator-parent</artifactId>
<groupId>org.hibernate</groupId>
- <version>4.1.0.Final</version>
+ <version>4.2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>hibernate-validator-legacy</artifactId>
<packaging>jar</packaging>
<name>Hibernate Validator Legacy</name>
- <version>4.1.0.Final</version>
+ <version>3.1.0.GA</version>
<url>http://validator.hibernate.org</url>
<licenses>
<license>
Modified: validator/trunk/hibernate-validator-tck-runner/pom.xml
===================================================================
--- validator/trunk/hibernate-validator-tck-runner/pom.xml 2010-06-28 13:03:06 UTC (rev 19837)
+++ validator/trunk/hibernate-validator-tck-runner/pom.xml 2010-06-28 13:03:24 UTC (rev 19838)
@@ -4,7 +4,7 @@
<parent>
<artifactId>hibernate-validator-parent</artifactId>
<groupId>org.hibernate</groupId>
- <version>4.1.0.Final</version>
+ <version>4.2.0-SNAPSHOT</version>
</parent>
<artifactId>hibernate-validator-tck-runner</artifactId>
<name>Hibernate Validator TCK Runner</name>
Modified: validator/trunk/pom.xml
===================================================================
--- validator/trunk/pom.xml 2010-06-28 13:03:06 UTC (rev 19837)
+++ validator/trunk/pom.xml 2010-06-28 13:03:24 UTC (rev 19838)
@@ -4,7 +4,7 @@
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator-parent</artifactId>
<packaging>pom</packaging>
- <version>4.1.0.Final</version>
+ <version>4.2.0-SNAPSHOT</version>
<name>Hibernate Validator Aggregator</name>
<url>http://validator.hibernate.org</url>
@@ -329,8 +329,8 @@
</licenses>
<scm>
- <connection>scm:svn:https://svn.jboss.org/repos/hibernate/validator/tags/v4_1_0_Final</connection>
- <url>http://fisheye.jboss.org/browse/Hibernate/validator/tags/v4_1_0_Final</url>
+ <connection>scm:svn:https://svn.jboss.org/repos/hibernate/validator/trunk</connection>
+ <url>http://fisheye.jboss.org/browse/Hibernate/validator/trunk</url>
</scm>
<distributionManagement>
15 years, 3 months
Hibernate SVN: r19837 - validator/tags.
by hibernate-commits@lists.jboss.org
Author: hardy.ferentschik
Date: 2010-06-28 09:03:06 -0400 (Mon, 28 Jun 2010)
New Revision: 19837
Added:
validator/tags/v4_1_0_Final/
Log:
[maven-release-plugin] copy for tag v4_1_0_Final
Copied: validator/tags/v4_1_0_Final (from rev 19836, validator/trunk)
15 years, 3 months
Hibernate SVN: r19836 - in validator/trunk: hibernate-validator and 4 other directories.
by hibernate-commits@lists.jboss.org
Author: hardy.ferentschik
Date: 2010-06-28 09:02:46 -0400 (Mon, 28 Jun 2010)
New Revision: 19836
Modified:
validator/trunk/hibernate-validator-annotation-processor/pom.xml
validator/trunk/hibernate-validator-archetype/pom.xml
validator/trunk/hibernate-validator-legacy/pom.xml
validator/trunk/hibernate-validator-tck-runner/pom.xml
validator/trunk/hibernate-validator/pom.xml
validator/trunk/pom.xml
Log:
[maven-release-plugin] prepare release v4_1_0_Final
Modified: validator/trunk/hibernate-validator/pom.xml
===================================================================
--- validator/trunk/hibernate-validator/pom.xml 2010-06-28 12:43:06 UTC (rev 19835)
+++ validator/trunk/hibernate-validator/pom.xml 2010-06-28 13:02:46 UTC (rev 19836)
@@ -3,7 +3,7 @@
<parent>
<artifactId>hibernate-validator-parent</artifactId>
<groupId>org.hibernate</groupId>
- <version>4.1.0-SNAPSHOT</version>
+ <version>4.1.0.Final</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
Modified: validator/trunk/hibernate-validator-annotation-processor/pom.xml
===================================================================
--- validator/trunk/hibernate-validator-annotation-processor/pom.xml 2010-06-28 12:43:06 UTC (rev 19835)
+++ validator/trunk/hibernate-validator-annotation-processor/pom.xml 2010-06-28 13:02:46 UTC (rev 19836)
@@ -4,7 +4,7 @@
<parent>
<artifactId>hibernate-validator-parent</artifactId>
<groupId>org.hibernate</groupId>
- <version>4.1.0-SNAPSHOT</version>
+ <version>4.1.0.Final</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>org.hibernate</groupId>
Modified: validator/trunk/hibernate-validator-archetype/pom.xml
===================================================================
--- validator/trunk/hibernate-validator-archetype/pom.xml 2010-06-28 12:43:06 UTC (rev 19835)
+++ validator/trunk/hibernate-validator-archetype/pom.xml 2010-06-28 13:02:46 UTC (rev 19836)
@@ -4,7 +4,7 @@
<parent>
<artifactId>hibernate-validator-parent</artifactId>
<groupId>org.hibernate</groupId>
- <version>4.1.0-SNAPSHOT</version>
+ <version>4.1.0.Final</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>org.hibernate</groupId>
Modified: validator/trunk/hibernate-validator-legacy/pom.xml
===================================================================
--- validator/trunk/hibernate-validator-legacy/pom.xml 2010-06-28 12:43:06 UTC (rev 19835)
+++ validator/trunk/hibernate-validator-legacy/pom.xml 2010-06-28 13:02:46 UTC (rev 19836)
@@ -4,13 +4,13 @@
<parent>
<artifactId>hibernate-validator-parent</artifactId>
<groupId>org.hibernate</groupId>
- <version>4.1.0-SNAPSHOT</version>
+ <version>4.1.0.Final</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>hibernate-validator-legacy</artifactId>
<packaging>jar</packaging>
<name>Hibernate Validator Legacy</name>
- <version>3.1.0.GA</version>
+ <version>4.1.0.Final</version>
<url>http://validator.hibernate.org</url>
<licenses>
<license>
Modified: validator/trunk/hibernate-validator-tck-runner/pom.xml
===================================================================
--- validator/trunk/hibernate-validator-tck-runner/pom.xml 2010-06-28 12:43:06 UTC (rev 19835)
+++ validator/trunk/hibernate-validator-tck-runner/pom.xml 2010-06-28 13:02:46 UTC (rev 19836)
@@ -4,7 +4,7 @@
<parent>
<artifactId>hibernate-validator-parent</artifactId>
<groupId>org.hibernate</groupId>
- <version>4.1.0-SNAPSHOT</version>
+ <version>4.1.0.Final</version>
</parent>
<artifactId>hibernate-validator-tck-runner</artifactId>
<name>Hibernate Validator TCK Runner</name>
Modified: validator/trunk/pom.xml
===================================================================
--- validator/trunk/pom.xml 2010-06-28 12:43:06 UTC (rev 19835)
+++ validator/trunk/pom.xml 2010-06-28 13:02:46 UTC (rev 19836)
@@ -4,7 +4,7 @@
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator-parent</artifactId>
<packaging>pom</packaging>
- <version>4.1.0-SNAPSHOT</version>
+ <version>4.1.0.Final</version>
<name>Hibernate Validator Aggregator</name>
<url>http://validator.hibernate.org</url>
@@ -329,8 +329,8 @@
</licenses>
<scm>
- <connection>scm:svn:https://svn.jboss.org/repos/hibernate/validator/trunk</connection>
- <url>http://fisheye.jboss.org/browse/Hibernate/validator/trunk</url>
+ <connection>scm:svn:https://svn.jboss.org/repos/hibernate/validator/tags/v4_1_0_Final</connection>
+ <url>http://fisheye.jboss.org/browse/Hibernate/validator/tags/v4_1_0_Final</url>
</scm>
<distributionManagement>
15 years, 3 months
Hibernate SVN: r19834 - in search/trunk/hibernate-search/src: main/java/org/hibernate/search/backend/impl/lucene and 12 other directories.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2010-06-28 08:32:47 -0400 (Mon, 28 Jun 2010)
New Revision: 19834
Added:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/ImmutableSearchFactory.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/MutableSearchFactory.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryBuilder.java
Removed:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java
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/lucene/PerDPResources.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/works/DeleteExtWorkDelegate.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/works/LuceneWorkVisitor.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/SearchFactoryImplementor.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/event/ContextHolder.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/event/FullTextIndexEventListener.java
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/store/FSMasterDirectoryProvider.java
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/SearchTestCase.java
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/configuration/ConfigurationReadTestCase.java
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/configuration/CustomBackendTest.java
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/errorhandling/LuceneErrorHandlingTest.java
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/id/providedId/ProvidedIdTest.java
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/jgroups/common/JGroupsCommonTest.java
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/worker/duplication/WorkDuplicationTest.java
Log:
Merge branch 'immutablefactory'
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:31:04 UTC (rev 19833)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/batchlucene/DirectoryProviderWorkspace.java 2010-06-28 12:32:47 UTC (rev 19834)
@@ -68,7 +68,7 @@
}
this.monitor = monitor;
workspace = new Workspace( context, dp );
- visitor = new LuceneWorkVisitor( workspace );
+ visitor = new LuceneWorkVisitor( workspace, context );
executor = Executors.newFixedThreadPool( maxThreads, "indexwriter" );
}
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:31:04 UTC (rev 19833)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/PerDPResources.java 2010-06-28 12:32:47 UTC (rev 19834)
@@ -54,7 +54,7 @@
PerDPResources(WorkerBuildContext context, DirectoryProvider<?> dp) {
workspace = new Workspace( context, dp );
- visitor = new LuceneWorkVisitor( workspace );
+ visitor = new LuceneWorkVisitor( workspace, context );
executor = Executors.newFixedThreadPool( 1, "Directory writer" );
exclusiveIndexUsage = context.isExclusiveIndexUsageEnabled( dp );
errorHandler = context.getErrorHandler();
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/works/DeleteExtWorkDelegate.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/works/DeleteExtWorkDelegate.java 2010-06-28 12:31:04 UTC (rev 19833)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/works/DeleteExtWorkDelegate.java 2010-06-28 12:32:47 UTC (rev 19834)
@@ -33,6 +33,7 @@
import org.hibernate.search.backend.LuceneWork;
import org.hibernate.search.backend.Workspace;
import org.hibernate.search.engine.DocumentBuilderIndexedEntity;
+import org.hibernate.search.spi.WorkerBuildContext;
import org.hibernate.search.util.LoggerFactory;
import org.slf4j.Logger;
@@ -51,10 +52,10 @@
private final DocumentBuilderIndexedEntity<?> builder;
private final Logger log = LoggerFactory.make();
- DeleteExtWorkDelegate(Workspace workspace) {
+ DeleteExtWorkDelegate(Workspace workspace, WorkerBuildContext context) {
super( workspace );
managedType = workspace.getEntitiesInDirectory().iterator().next();
- builder = workspace.getDocumentBuilder( managedType );
+ builder = context.getDocumentBuilderIndexedEntity( managedType );
}
@Override
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/works/LuceneWorkVisitor.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/works/LuceneWorkVisitor.java 2010-06-28 12:31:04 UTC (rev 19833)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/lucene/works/LuceneWorkVisitor.java 2010-06-28 12:32:47 UTC (rev 19834)
@@ -30,6 +30,7 @@
import org.hibernate.search.backend.PurgeAllLuceneWork;
import org.hibernate.search.backend.WorkVisitor;
import org.hibernate.search.backend.Workspace;
+import org.hibernate.search.spi.WorkerBuildContext;
/**
* @author Sanne Grinovero
@@ -41,9 +42,9 @@
private final OptimizeWorkDelegate optimizeDelegate;
private final PurgeAllWorkDelegate purgeAllDelegate;
- public LuceneWorkVisitor(Workspace workspace) {
+ public LuceneWorkVisitor(Workspace workspace, WorkerBuildContext context) {
if ( workspace.getEntitiesInDirectory().size() == 1 ) {
- this.deleteDelegate = new DeleteExtWorkDelegate( workspace );
+ this.deleteDelegate = new DeleteExtWorkDelegate( workspace, context );
}
else {
this.deleteDelegate = new DeleteWorkDelegate( workspace );
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/SearchFactoryImplementor.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/SearchFactoryImplementor.java 2010-06-28 12:31:04 UTC (rev 19833)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/SearchFactoryImplementor.java 2010-06-28 12:32:47 UTC (rev 19834)
@@ -49,8 +49,6 @@
public interface SearchFactoryImplementor extends SearchFactory {
BackendQueueProcessorFactory getBackendQueueProcessorFactory();
- void setBackendQueueProcessorFactory(BackendQueueProcessorFactory backendQueueProcessorFactory);
-
Map<Class<?>, DocumentBuilderIndexedEntity<?>> getDocumentBuildersIndexedEntities();
<T> DocumentBuilderIndexedEntity<T> getDocumentBuilderIndexedEntity(Class<T> entityType);
@@ -59,8 +57,6 @@
Worker getWorker();
- void addOptimizerStrategy(DirectoryProvider<?> provider, OptimizerStrategy optimizerStrategy);
-
OptimizerStrategy getOptimizerStrategy(DirectoryProvider<?> provider);
FilterCachingStrategy getFilterCachingStrategy();
@@ -69,22 +65,16 @@
LuceneIndexingParameters getIndexingParameters(DirectoryProvider<?> provider);
- void addIndexingParameters(DirectoryProvider<?> provider, LuceneIndexingParameters indexingParams);
-
String getIndexingStrategy();
void close();
- void addClassToDirectoryProvider(Class<?> clazz, DirectoryProvider<?> directoryProvider, boolean exclusiveIndexUsage);
-
Set<Class<?>> getClassesInDirectoryProvider(DirectoryProvider<?> directoryProvider);
Set<DirectoryProvider<?>> getDirectoryProviders();
ReentrantLock getDirectoryProviderLock(DirectoryProvider<?> dp);
- void addDirectoryProvider(DirectoryProvider<?> provider, boolean exclusiveIndexUsage);
-
int getFilterCacheBitResultsSize();
Set<Class<?>> getIndexedTypesPolymorphic(Class<?>[] classes);
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/event/ContextHolder.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/event/ContextHolder.java 2010-06-28 12:31:04 UTC (rev 19833)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/event/ContextHolder.java 2010-06-28 12:32:47 UTC (rev 19834)
@@ -30,7 +30,7 @@
import org.hibernate.cfg.Configuration;
import org.hibernate.search.cfg.SearchConfigurationFromHibernateCore;
import org.hibernate.search.engine.SearchFactoryImplementor;
-import org.hibernate.search.impl.SearchFactoryImpl;
+import org.hibernate.search.impl.SearchFactoryBuilder;
/**
* Holds already built SearchFactory per Hibernate Configuration object
@@ -44,20 +44,22 @@
* @author Emmanuel Bernard
*/
public class ContextHolder {
- private static final ThreadLocal<WeakHashMap<Configuration, SearchFactoryImpl>> contexts =
- new ThreadLocal<WeakHashMap<Configuration, SearchFactoryImpl>>();
+ private static final ThreadLocal<WeakHashMap<Configuration, SearchFactoryImplementor>> contexts =
+ new ThreadLocal<WeakHashMap<Configuration, SearchFactoryImplementor>>();
//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 SearchFactoryImpl getOrBuildSearchFactory(Configuration cfg) {
- WeakHashMap<Configuration, SearchFactoryImpl> contextMap = contexts.get();
+ public static SearchFactoryImplementor getOrBuildSearchFactory(Configuration cfg) {
+ WeakHashMap<Configuration, SearchFactoryImplementor> contextMap = contexts.get();
if ( contextMap == null ) {
- contextMap = new WeakHashMap<Configuration, SearchFactoryImpl>( 2 );
+ contextMap = new WeakHashMap<Configuration, SearchFactoryImplementor>( 2 );
contexts.set( contextMap );
}
- SearchFactoryImpl searchFactory = contextMap.get( cfg );
+ SearchFactoryImplementor searchFactory = contextMap.get( cfg );
if ( searchFactory == null ) {
- searchFactory = new SearchFactoryImpl( new SearchConfigurationFromHibernateCore( cfg ) );
+ searchFactory = new SearchFactoryBuilder()
+ .configuration( new SearchConfigurationFromHibernateCore( cfg ) )
+ .buildSearchFactory();
contextMap.put( cfg, searchFactory );
}
return searchFactory;
@@ -66,9 +68,9 @@
//code doesn't have to be multithreaded because SF creation is not.
//this is not a public API, should really only be used by the same
public static void removeSearchFactoryFromCache(SearchFactoryImplementor factory) {
- WeakHashMap<Configuration, SearchFactoryImpl> contextMap = contexts.get();
+ WeakHashMap<Configuration, SearchFactoryImplementor> contextMap = contexts.get();
if ( contextMap != null ) {
- for ( Map.Entry<Configuration, SearchFactoryImpl> entry : contextMap.entrySet() ) {
+ for ( Map.Entry<Configuration, SearchFactoryImplementor> entry : contextMap.entrySet() ) {
if ( entry.getValue() == factory ) {
contextMap.remove( entry.getKey() );
}
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/event/FullTextIndexEventListener.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/event/FullTextIndexEventListener.java 2010-06-28 12:31:04 UTC (rev 19833)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/event/FullTextIndexEventListener.java 2010-06-28 12:32:47 UTC (rev 19834)
@@ -62,7 +62,7 @@
import org.hibernate.search.backend.impl.EventSourceTransactionContext;
import org.hibernate.search.cfg.SearchConfigurationFromHibernateCore;
import org.hibernate.search.engine.SearchFactoryImplementor;
-import org.hibernate.search.impl.SearchFactoryImpl;
+import org.hibernate.search.impl.SearchFactoryBuilder;
import org.hibernate.search.util.LoggerFactory;
import org.hibernate.search.util.ReflectionHelper;
import org.hibernate.search.util.WeakIdentityHashMap;
@@ -124,7 +124,9 @@
}
else {
if ( searchFactoryImplementor == null ) {
- searchFactoryImplementor = new SearchFactoryImpl( new SearchConfigurationFromHibernateCore( cfg ) );
+ searchFactoryImplementor = new SearchFactoryBuilder()
+ .configuration( new SearchConfigurationFromHibernateCore( cfg ) )
+ .buildSearchFactory();
}
}
String indexingStrategy = searchFactoryImplementor.getIndexingStrategy();
Added: search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/ImmutableSearchFactory.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/ImmutableSearchFactory.java (rev 0)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/ImmutableSearchFactory.java 2010-06-28 12:32:47 UTC (rev 19834)
@@ -0,0 +1,300 @@
+/* $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.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.locks.ReentrantLock;
+
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.search.Similarity;
+import org.slf4j.Logger;
+
+import org.hibernate.annotations.common.AssertionFailure;
+import org.hibernate.search.Environment;
+import org.hibernate.search.SearchException;
+import org.hibernate.search.Version;
+import org.hibernate.search.backend.BackendQueueProcessorFactory;
+import org.hibernate.search.backend.LuceneIndexingParameters;
+import org.hibernate.search.backend.LuceneWork;
+import org.hibernate.search.backend.OptimizeLuceneWork;
+import org.hibernate.search.backend.Worker;
+import org.hibernate.search.backend.configuration.MaskedProperty;
+import org.hibernate.search.backend.impl.batchlucene.BatchBackend;
+import org.hibernate.search.backend.impl.batchlucene.LuceneBatchBackend;
+import org.hibernate.search.batchindexing.MassIndexerProgressMonitor;
+import org.hibernate.search.engine.DocumentBuilderContainedEntity;
+import org.hibernate.search.engine.DocumentBuilderIndexedEntity;
+import org.hibernate.search.engine.FilterDef;
+import org.hibernate.search.engine.SearchFactoryImplementor;
+import org.hibernate.search.exception.ErrorHandler;
+import org.hibernate.search.filter.FilterCachingStrategy;
+import org.hibernate.search.query.dsl.v2.QueryContextBuilder;
+import org.hibernate.search.query.dsl.v2.impl.ConnectedQueryContextBuilder;
+import org.hibernate.search.reader.ReaderProvider;
+import org.hibernate.search.spi.WorkerBuildContext;
+import org.hibernate.search.store.DirectoryProvider;
+import org.hibernate.search.store.optimization.OptimizerStrategy;
+import org.hibernate.search.util.LoggerFactory;
+import org.hibernate.search.util.PluginLoader;
+import org.hibernate.util.StringHelper;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ImmutableSearchFactory implements SearchFactoryImplementor, WorkerBuildContext {
+
+ static {
+ Version.touch();
+ }
+
+ private static final Logger log = LoggerFactory.make();
+
+ private final Map<Class<?>, DocumentBuilderIndexedEntity<?>> documentBuildersIndexedEntities;
+ private final Map<Class<?>, DocumentBuilderContainedEntity<?>> documentBuildersContainedEntities;
+ //keep track of the index modifiers per DirectoryProvider since multiple entity can use the same directory provider
+ private final Map<DirectoryProvider<?>, DirectoryProviderData> dirProviderData;
+ private final Worker worker;
+ private final ReaderProvider readerProvider;
+ private final BackendQueueProcessorFactory backendQueueProcessorFactory;
+ private final Map<String, FilterDef> filterDefinitions;
+ private final FilterCachingStrategy filterCachingStrategy;
+ private final Map<String, Analyzer> analyzers;
+ private final AtomicBoolean stopped = new AtomicBoolean( false );
+ private final int cacheBitResultsSize;
+ private final Properties configurationProperties;
+ private final ErrorHandler errorHandler;
+ private final PolymorphicIndexHierarchy indexHierarchy;
+
+ /**
+ * Each directory provider (index) can have its own performance settings.
+ */
+ private final Map<DirectoryProvider, LuceneIndexingParameters> dirProviderIndexingParams;
+ private final String indexingStrategy;
+
+ public ImmutableSearchFactory(SearchFactoryBuilder cfg) {
+ this.analyzers = cfg.analyzers;
+ this.backendQueueProcessorFactory = cfg.backendQueueProcessorFactory;
+ this.cacheBitResultsSize = cfg.cacheBitResultsSize;
+ this.configurationProperties = cfg.configurationProperties;
+ this.dirProviderData = cfg.dirProviderData;
+ this.dirProviderIndexingParams = cfg.dirProviderIndexingParams;
+ this.documentBuildersIndexedEntities = cfg.documentBuildersIndexedEntities;
+ this.documentBuildersContainedEntities = cfg.documentBuildersContainedEntities;
+ this.errorHandler = cfg.errorHandler;
+ this.filterCachingStrategy = cfg.filterCachingStrategy;
+ this.filterDefinitions = cfg.filterDefinitions;
+ this.indexHierarchy = cfg.indexHierarchy;
+ this.indexingStrategy = cfg.indexingStrategy;
+ this.readerProvider = cfg.readerProvider;
+ this.worker = cfg.worker;
+ }
+
+
+ public BackendQueueProcessorFactory getBackendQueueProcessorFactory() {
+ return backendQueueProcessorFactory;
+ }
+
+ public String getIndexingStrategy() {
+ return indexingStrategy;
+ }
+
+ public void close() {
+ if ( stopped.compareAndSet( false, true ) ) { //make sure we only sop once
+ try {
+ worker.close();
+ }
+ catch ( Exception e ) {
+ log.error( "Worker raises an exception on close()", e );
+ }
+
+ try {
+ readerProvider.destroy();
+ }
+ catch ( Exception e ) {
+ log.error( "ReaderProvider raises an exception on destroy()", e );
+ }
+
+ //TODO move directory provider cleaning to DirectoryProviderFactory
+ for ( DirectoryProvider dp : getDirectoryProviders() ) {
+ try {
+ dp.stop();
+ }
+ catch ( Exception e ) {
+ log.error( "DirectoryProvider raises an exception on stop() ", e );
+ }
+ }
+ }
+ }
+
+ public Set<Class<?>> getClassesInDirectoryProvider(DirectoryProvider<?> directoryProvider) {
+ return Collections.unmodifiableSet( dirProviderData.get( directoryProvider ).getClasses() );
+ }
+
+ public Map<Class<?>, DocumentBuilderIndexedEntity<?>> getDocumentBuildersIndexedEntities() {
+ return documentBuildersIndexedEntities;
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T> DocumentBuilderIndexedEntity<T> getDocumentBuilderIndexedEntity(Class<T> entityType) {
+ return ( DocumentBuilderIndexedEntity<T> ) documentBuildersIndexedEntities.get( entityType );
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T> DocumentBuilderContainedEntity<T> getDocumentBuilderContainedEntity(Class<T> entityType) {
+ return ( DocumentBuilderContainedEntity<T> ) documentBuildersContainedEntities.get( entityType );
+ }
+
+ public Set<DirectoryProvider<?>> getDirectoryProviders() {
+ return this.dirProviderData.keySet();
+ }
+
+ public Worker getWorker() {
+ return worker;
+ }
+
+ public void setBackendQueueProcessorFactory(BackendQueueProcessorFactory backendQueueProcessorFactory) {
+ throw new AssertionFailure( "ImmutableSearchFactory is immutable: should never be called");
+ }
+
+ public OptimizerStrategy getOptimizerStrategy(DirectoryProvider<?> provider) {
+ return dirProviderData.get( provider ).getOptimizerStrategy();
+ }
+
+ public LuceneIndexingParameters getIndexingParameters(DirectoryProvider<?> provider) {
+ return dirProviderIndexingParams.get( provider );
+ }
+
+ public ReaderProvider getReaderProvider() {
+ return readerProvider;
+ }
+
+ public DirectoryProvider[] getDirectoryProviders(Class<?> entity) {
+ DocumentBuilderIndexedEntity<?> documentBuilder = getDocumentBuilderIndexedEntity( entity );
+ return documentBuilder == null ? null : documentBuilder.getDirectoryProviders();
+ }
+
+ public void optimize() {
+ Set<Class<?>> clazzs = getDocumentBuildersIndexedEntities().keySet();
+ for ( Class clazz : clazzs ) {
+ optimize( clazz );
+ }
+ }
+
+ public void optimize(Class entityType) {
+ if ( !getDocumentBuildersIndexedEntities().containsKey( entityType ) ) {
+ throw new SearchException( "Entity not indexed: " + entityType );
+ }
+ List<LuceneWork> queue = new ArrayList<LuceneWork>( 1 );
+ queue.add( new OptimizeLuceneWork( entityType ) );
+ getBackendQueueProcessorFactory().getProcessor( queue ).run();
+ }
+
+ public Analyzer getAnalyzer(String name) {
+ final Analyzer analyzer = analyzers.get( name );
+ if ( analyzer == null ) {
+ throw new SearchException( "Unknown Analyzer definition: " + name );
+ }
+ return analyzer;
+ }
+
+ public Analyzer getAnalyzer(Class<?> clazz) {
+ if ( clazz == null ) {
+ throw new IllegalArgumentException( "A class has to be specified for retrieving a scoped analyzer" );
+ }
+
+ DocumentBuilderIndexedEntity<?> builder = documentBuildersIndexedEntities.get( clazz );
+ if ( builder == null ) {
+ throw new IllegalArgumentException(
+ "Entity for which to retrieve the scoped analyzer is not an @Indexed entity: " + clazz.getName()
+ );
+ }
+
+ return builder.getAnalyzer();
+ }
+
+ public QueryContextBuilder buildQueryBuilder() {
+ return new ConnectedQueryContextBuilder( this );
+ }
+
+ public FilterCachingStrategy getFilterCachingStrategy() {
+ return filterCachingStrategy;
+ }
+
+ public FilterDef getFilterDefinition(String name) {
+ return filterDefinitions.get( name );
+ }
+
+ public ReentrantLock getDirectoryProviderLock(DirectoryProvider<?> dp) {
+ return this.dirProviderData.get( dp ).getDirLock();
+ }
+
+ public int getFilterCacheBitResultsSize() {
+ return cacheBitResultsSize;
+ }
+
+ public Set<Class<?>> getIndexedTypesPolymorphic(Class<?>[] classes) {
+ return indexHierarchy.getIndexedClasses( classes );
+ }
+
+ public BatchBackend makeBatchBackend(MassIndexerProgressMonitor progressMonitor) {
+ BatchBackend batchBackend;
+ String impl = configurationProperties.getProperty( Environment.BATCH_BACKEND );
+ if ( StringHelper.isEmpty( impl ) || "LuceneBatch".equalsIgnoreCase( impl ) ) {
+ batchBackend = new LuceneBatchBackend();
+ }
+ else {
+ batchBackend = PluginLoader.instanceFromName( BatchBackend.class, impl, ImmutableSearchFactory.class,
+ "batchbackend" );
+ }
+ Properties batchBackendConfiguration = new MaskedProperty(
+ this.configurationProperties, Environment.BATCH_BACKEND );
+ batchBackend.initialize( batchBackendConfiguration, progressMonitor, this );
+ return batchBackend;
+ }
+
+ public Similarity getSimilarity(DirectoryProvider<?> provider) {
+ Similarity similarity = dirProviderData.get( provider ).getSimilarity();
+ if ( similarity == null ) throw new SearchException( "Assertion error: a similarity should be defined for each provider" );
+ return similarity;
+ }
+
+ public boolean isExclusiveIndexUsageEnabled(DirectoryProvider<?> provider) {
+ return dirProviderData.get( provider ).isExclusiveIndexUsage();
+ }
+
+ public ErrorHandler getErrorHandler() {
+ return errorHandler;
+ }
+
+ public SearchFactoryImplementor getUninitializedSearchFactory() {
+ return this;
+ }
+}
Added: search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/MutableSearchFactory.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/MutableSearchFactory.java (rev 0)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/MutableSearchFactory.java 2010-06-28 12:32:47 UTC (rev 19834)
@@ -0,0 +1,147 @@
+package org.hibernate.search.impl;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.locks.ReentrantLock;
+
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.search.Similarity;
+
+import org.hibernate.search.backend.BackendQueueProcessorFactory;
+import org.hibernate.search.backend.LuceneIndexingParameters;
+import org.hibernate.search.backend.Worker;
+import org.hibernate.search.backend.impl.batchlucene.BatchBackend;
+import org.hibernate.search.batchindexing.MassIndexerProgressMonitor;
+import org.hibernate.search.engine.DocumentBuilderContainedEntity;
+import org.hibernate.search.engine.DocumentBuilderIndexedEntity;
+import org.hibernate.search.engine.FilterDef;
+import org.hibernate.search.engine.SearchFactoryImplementor;
+import org.hibernate.search.exception.ErrorHandler;
+import org.hibernate.search.filter.FilterCachingStrategy;
+import org.hibernate.search.query.dsl.v2.QueryContextBuilder;
+import org.hibernate.search.reader.ReaderProvider;
+import org.hibernate.search.store.DirectoryProvider;
+import org.hibernate.search.store.optimization.OptimizerStrategy;
+
+/**
+ * Factory delegating to a concrete implementation of another factory,
+ * Useful to swap one factory for another.
+ * Swapping factory is thread safe.
+ *
+ * @author Emmanuel Bernard
+ */
+public class MutableSearchFactory implements SearchFactoryImplementor {
+ private volatile SearchFactoryImplementor delegate;
+
+ void setDelegate(SearchFactoryImplementor delegate) {
+ this.delegate = delegate;
+ }
+
+ public BackendQueueProcessorFactory getBackendQueueProcessorFactory() {
+ return delegate.getBackendQueueProcessorFactory();
+ }
+
+ public Map<Class<?>, DocumentBuilderIndexedEntity<?>> getDocumentBuildersIndexedEntities() {
+ return delegate.getDocumentBuildersIndexedEntities();
+ }
+
+ public <T> DocumentBuilderIndexedEntity<T> getDocumentBuilderIndexedEntity(Class<T> entityType) {
+ return delegate.getDocumentBuilderIndexedEntity( entityType );
+ }
+
+ public <T> DocumentBuilderContainedEntity<T> getDocumentBuilderContainedEntity(Class<T> entityType) {
+ return delegate.getDocumentBuilderContainedEntity( entityType );
+ }
+
+ public Worker getWorker() {
+ return delegate.getWorker();
+ }
+
+ public OptimizerStrategy getOptimizerStrategy(DirectoryProvider<?> provider) {
+ return delegate.getOptimizerStrategy( provider );
+ }
+
+ public FilterCachingStrategy getFilterCachingStrategy() {
+ return delegate.getFilterCachingStrategy();
+ }
+
+ public FilterDef getFilterDefinition(String name) {
+ return delegate.getFilterDefinition( name );
+ }
+
+ public LuceneIndexingParameters getIndexingParameters(DirectoryProvider<?> provider) {
+ return delegate.getIndexingParameters( provider );
+ }
+
+ public String getIndexingStrategy() {
+ return delegate.getIndexingStrategy();
+ }
+
+ public void close() {
+ delegate.close();
+ }
+
+ public Set<Class<?>> getClassesInDirectoryProvider(DirectoryProvider<?> directoryProvider) {
+ return delegate.getClassesInDirectoryProvider( directoryProvider );
+ }
+
+ public Set<DirectoryProvider<?>> getDirectoryProviders() {
+ return delegate.getDirectoryProviders();
+ }
+
+ public ReentrantLock getDirectoryProviderLock(DirectoryProvider<?> dp) {
+ return delegate.getDirectoryProviderLock( dp );
+ }
+
+ public int getFilterCacheBitResultsSize() {
+ return delegate.getFilterCacheBitResultsSize();
+ }
+
+ public Set<Class<?>> getIndexedTypesPolymorphic(Class<?>[] classes) {
+ return delegate.getIndexedTypesPolymorphic( classes );
+ }
+
+ public BatchBackend makeBatchBackend(MassIndexerProgressMonitor progressMonitor) {
+ return delegate.makeBatchBackend( progressMonitor );
+ }
+
+ public Similarity getSimilarity(DirectoryProvider<?> directoryProvider) {
+ return delegate.getSimilarity( directoryProvider );
+ }
+
+ public boolean isExclusiveIndexUsageEnabled(DirectoryProvider<?> provider) {
+ return delegate.isExclusiveIndexUsageEnabled( provider );
+ }
+
+ public ErrorHandler getErrorHandler() {
+ return delegate.getErrorHandler();
+ }
+
+ public ReaderProvider getReaderProvider() {
+ return delegate.getReaderProvider();
+ }
+
+ public DirectoryProvider[] getDirectoryProviders(Class<?> entity) {
+ return delegate.getDirectoryProviders( entity );
+ }
+
+ public void optimize() {
+ delegate.optimize();
+ }
+
+ public void optimize(Class entityType) {
+ delegate.optimize( entityType );
+ }
+
+ public Analyzer getAnalyzer(String name) {
+ return delegate.getAnalyzer( name );
+ }
+
+ public Analyzer getAnalyzer(Class<?> clazz) {
+ return delegate.getAnalyzer( clazz );
+ }
+
+ public QueryContextBuilder buildQueryBuilder() {
+ return delegate.buildQueryBuilder();
+ }
+}
Copied: search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryBuilder.java (from rev 19833, search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java)
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryBuilder.java (rev 0)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryBuilder.java 2010-06-28 12:32:47 UTC (rev 19834)
@@ -0,0 +1,445 @@
+package org.hibernate.search.impl;
+
+import java.beans.Introspector;
+import java.lang.reflect.Method;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.concurrent.locks.ReentrantLock;
+
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.search.Similarity;
+import org.slf4j.Logger;
+
+import org.hibernate.annotations.common.reflection.MetadataProvider;
+import org.hibernate.annotations.common.reflection.MetadataProviderInjector;
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+import org.hibernate.annotations.common.reflection.XClass;
+import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
+import org.hibernate.search.Environment;
+import org.hibernate.search.spi.WorkerBuildContext;
+import org.hibernate.search.spi.WritableBuildContext;
+import org.hibernate.search.SearchException;
+import org.hibernate.search.annotations.AnalyzerDef;
+import org.hibernate.search.annotations.AnalyzerDefs;
+import org.hibernate.search.annotations.Factory;
+import org.hibernate.search.annotations.FullTextFilterDef;
+import org.hibernate.search.annotations.FullTextFilterDefs;
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.annotations.Key;
+import org.hibernate.search.backend.BackendQueueProcessorFactory;
+import org.hibernate.search.backend.LuceneIndexingParameters;
+import org.hibernate.search.backend.Worker;
+import org.hibernate.search.backend.WorkerFactory;
+import org.hibernate.search.backend.configuration.ConfigurationParseHelper;
+import org.hibernate.search.backend.impl.BatchedQueueingProcessor;
+import org.hibernate.search.cfg.SearchConfiguration;
+import org.hibernate.search.cfg.SearchMapping;
+import org.hibernate.search.engine.DocumentBuilderContainedEntity;
+import org.hibernate.search.engine.DocumentBuilderIndexedEntity;
+import org.hibernate.search.engine.EntityState;
+import org.hibernate.search.engine.FilterDef;
+import org.hibernate.search.engine.SearchFactoryImplementor;
+import org.hibernate.search.exception.ErrorHandler;
+import org.hibernate.search.exception.impl.LogErrorHandler;
+import org.hibernate.search.filter.CachingWrapperFilter;
+import org.hibernate.search.filter.FilterCachingStrategy;
+import org.hibernate.search.filter.MRUFilterCachingStrategy;
+import org.hibernate.search.filter.ShardSensitiveOnlyFilter;
+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.store.optimization.OptimizerStrategy;
+import org.hibernate.search.util.LoggerFactory;
+import org.hibernate.search.util.PluginLoader;
+import org.hibernate.search.util.ReflectionHelper;
+import org.hibernate.util.StringHelper;
+
+/**
+ * Build a search factory
+ * @author Emmanuel Bernard
+ */
+public class SearchFactoryBuilder implements WritableBuildContext, WorkerBuildContext {
+ private static final Logger log = LoggerFactory.make();
+ SearchConfiguration cfg;
+ MutableSearchFactory rootFactory;
+
+ public SearchFactoryBuilder configuration(SearchConfiguration configuration) {
+ this.cfg = configuration;
+ return this;
+ }
+
+ public SearchFactoryBuilder rootFactory(MutableSearchFactory factory) {
+ this.rootFactory = factory;
+ return this;
+ }
+
+ //processing properties
+ ReflectionManager reflectionManager;
+ String indexingStrategy;
+ Map<Class<?>, DocumentBuilderIndexedEntity<?>> documentBuildersIndexedEntities;
+ Map<Class<?>, DocumentBuilderContainedEntity<?>> documentBuildersContainedEntities;
+ //keep track of the index modifiers per DirectoryProvider since multiple entity can use the same directory provider
+ Map<DirectoryProvider<?>, DirectoryProviderData> dirProviderData;
+ Worker worker;
+ ReaderProvider readerProvider;
+ BackendQueueProcessorFactory backendQueueProcessorFactory;
+ Map<String, FilterDef> filterDefinitions;
+ FilterCachingStrategy filterCachingStrategy;
+ Map<String, Analyzer> analyzers;
+ int cacheBitResultsSize;
+ Properties configurationProperties;
+ ErrorHandler errorHandler;
+ PolymorphicIndexHierarchy indexHierarchy;
+ Map<DirectoryProvider, LuceneIndexingParameters> dirProviderIndexingParams;
+
+ public SearchFactoryImplementor buildSearchFactory() {
+ createCleanFactoryState();
+
+ configurationProperties = cfg.getProperties();
+ errorHandler = createErrorHandler( configurationProperties );
+ reflectionManager = getReflectionManager(cfg);
+
+ final SearchMapping mapping = SearchMappingBuilder.getSearchMapping(cfg);
+ if ( mapping != null) {
+ if ( ! ( reflectionManager instanceof MetadataProviderInjector )) {
+ throw new SearchException("Programmatic mapping model used but ReflectionManager does not implement "
+ + MetadataProviderInjector.class.getName() );
+ }
+ MetadataProviderInjector injector = (MetadataProviderInjector) reflectionManager;
+ MetadataProvider original = injector.getMetadataProvider();
+ injector.setMetadataProvider( new MappingModelMetadataProvider( original, mapping ) );
+ }
+
+ indexingStrategy = defineIndexingStrategy( cfg );//need to be done before the document builds
+ dirProviderIndexingParams = new HashMap<DirectoryProvider, LuceneIndexingParameters>();
+ initDocumentBuilders( cfg, reflectionManager );
+
+ Set<Class<?>> indexedClasses = documentBuildersIndexedEntities.keySet();
+ for ( DocumentBuilderIndexedEntity builder : documentBuildersIndexedEntities.values() ) {
+ builder.postInitialize( indexedClasses );
+ }
+ //not really necessary today
+ for ( DocumentBuilderContainedEntity builder : documentBuildersContainedEntities.values() ) {
+ builder.postInitialize( indexedClasses );
+ }
+ fillSimilarityMapping();
+
+ //build back end
+ this.worker = WorkerFactory.createWorker( cfg, this );
+ this.readerProvider = ReaderProviderFactory.createReaderProvider( cfg, this );
+ this.filterCachingStrategy = buildFilterCachingStrategy( cfg.getProperties() );
+ this.cacheBitResultsSize = ConfigurationParseHelper.getIntValue(
+ cfg.getProperties(), Environment.CACHE_DOCIDRESULTS_SIZE, CachingWrapperFilter.DEFAULT_SIZE
+ );
+ //TODO uncomment
+ SearchFactoryImplementor factory = new ImmutableSearchFactory( this );
+ rootFactory.setDelegate( factory );
+ return rootFactory;
+ }
+
+ private void fillSimilarityMapping() {
+ for ( DirectoryProviderData directoryConfiguration : dirProviderData.values() ) {
+ for ( Class<?> indexedType : directoryConfiguration.getClasses() ) {
+ DocumentBuilderIndexedEntity<?> documentBuilder = documentBuildersIndexedEntities.get( indexedType );
+ Similarity similarity = documentBuilder.getSimilarity();
+ 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.setSimilarity( similarity );
+ }
+ }
+ }
+ }
+
+ private static FilterCachingStrategy buildFilterCachingStrategy(Properties properties) {
+ FilterCachingStrategy filterCachingStrategy;
+ String impl = properties.getProperty( Environment.FILTER_CACHING_STRATEGY );
+ if ( StringHelper.isEmpty( impl ) || "mru".equalsIgnoreCase( impl ) ) {
+ filterCachingStrategy = new MRUFilterCachingStrategy();
+ }
+ else {
+ filterCachingStrategy = PluginLoader.instanceFromName( FilterCachingStrategy.class,
+ impl, ImmutableSearchFactory.class, "filterCachingStrategy" );
+ }
+ filterCachingStrategy.initialize( properties );
+ return filterCachingStrategy;
+ }
+
+ private void createCleanFactoryState() {
+ if ( rootFactory == null ) {
+ rootFactory = new MutableSearchFactory();
+ documentBuildersIndexedEntities = new HashMap<Class<?>, DocumentBuilderIndexedEntity<?>>();
+ documentBuildersContainedEntities = new HashMap<Class<?>, DocumentBuilderContainedEntity<?>>();
+ dirProviderData = new HashMap<DirectoryProvider<?>, DirectoryProviderData>();
+ filterDefinitions = new HashMap<String, FilterDef>();
+ indexHierarchy = new PolymorphicIndexHierarchy();
+ }
+ }
+
+ private void initDocumentBuilders(SearchConfiguration cfg, ReflectionManager reflectionManager) {
+ ConfigContext context = new ConfigContext( cfg );
+ Iterator<Class<?>> iter = cfg.getClassMappings();
+ DirectoryProviderFactory factory = new DirectoryProviderFactory();
+
+ initProgrammaticAnalyzers(context, reflectionManager);
+ initProgrammaticallyDefinedFilterDef(reflectionManager);
+
+ while ( iter.hasNext() ) {
+ Class mappedClass = iter.next();
+ if ( mappedClass == null ) {
+ continue;
+ }
+ @SuppressWarnings( "unchecked" )
+ XClass mappedXClass = reflectionManager.toXClass( mappedClass );
+ if ( mappedXClass == null ) {
+ continue;
+ }
+
+ if ( mappedXClass.isAnnotationPresent( Indexed.class ) ) {
+
+ if ( mappedXClass.isAbstract() ) {
+ log.warn( "Abstract classes can never insert index documents. Remove @Indexed." );
+ continue;
+ }
+
+ DirectoryProviderFactory.DirectoryProviders providers = factory.createDirectoryProviders(
+ mappedXClass, cfg, this, reflectionManager
+ );
+ //FIXME DocumentBuilderIndexedEntity needs to be built by a helper method receiving Class<T> to infer T properly
+ //XClass unfortunately is not (yet) genericized: TODO?
+ final DocumentBuilderIndexedEntity<?> documentBuilder = new DocumentBuilderIndexedEntity(
+ mappedXClass, context, providers.getProviders(), providers.getSelectionStrategy(),
+ reflectionManager
+ );
+
+ indexHierarchy.addIndexedClass( mappedClass );
+ documentBuildersIndexedEntities.put( mappedClass, documentBuilder );
+ }
+ else {
+ //FIXME DocumentBuilderIndexedEntity needs to be built by a helper method receiving Class<T> to infer T properly
+ //XClass unfortunately is not (yet) genericized: TODO?
+ final DocumentBuilderContainedEntity<?> documentBuilder = new DocumentBuilderContainedEntity(
+ mappedXClass, context, reflectionManager
+ );
+ //TODO enhance that, I don't like to expose EntityState
+ if ( documentBuilder.getEntityState() != EntityState.NON_INDEXABLE ) {
+ documentBuildersContainedEntities.put( mappedClass, documentBuilder );
+ }
+ }
+ bindFilterDefs( mappedXClass );
+ //TODO should analyzer def for classes at tyher sqme level???
+ }
+ analyzers = context.initLazyAnalyzers();
+ factory.startDirectoryProviders();
+ }
+
+ private void bindFilterDefs(XClass mappedXClass) {
+ FullTextFilterDef defAnn = mappedXClass.getAnnotation( FullTextFilterDef.class );
+ if ( defAnn != null ) {
+ bindFilterDef( defAnn, mappedXClass );
+ }
+ FullTextFilterDefs defsAnn = mappedXClass.getAnnotation( FullTextFilterDefs.class );
+ if ( defsAnn != null ) {
+ for ( FullTextFilterDef def : defsAnn.value() ) {
+ bindFilterDef( def, mappedXClass );
+ }
+ }
+ }
+
+ private void bindFilterDef(FullTextFilterDef defAnn, XClass mappedXClass) {
+ if ( filterDefinitions.containsKey( defAnn.name() ) ) {
+ throw new SearchException(
+ "Multiple definition of @FullTextFilterDef.name=" + defAnn.name() + ": "
+ + mappedXClass.getName()
+ );
+ }
+
+ bindFullTextFilterDef(defAnn);
+ }
+
+ private void bindFullTextFilterDef(FullTextFilterDef defAnn) {
+ FilterDef filterDef = new FilterDef( defAnn );
+ if ( filterDef.getImpl().equals( ShardSensitiveOnlyFilter.class ) ) {
+ //this is a placeholder don't process regularly
+ filterDefinitions.put( defAnn.name(), filterDef );
+ return;
+ }
+ try {
+ filterDef.getImpl().newInstance();
+ }
+ catch ( IllegalAccessException e ) {
+ throw new SearchException( "Unable to create Filter class: " + filterDef.getImpl().getName(), e );
+ }
+ catch ( InstantiationException e ) {
+ throw new SearchException( "Unable to create Filter class: " + filterDef.getImpl().getName(), e );
+ }
+ for ( Method method : filterDef.getImpl().getMethods() ) {
+ if ( method.isAnnotationPresent( Factory.class ) ) {
+ if ( filterDef.getFactoryMethod() != null ) {
+ throw new SearchException(
+ "Multiple @Factory methods found" + defAnn.name() + ": "
+ + filterDef.getImpl().getName() + "." + method.getName()
+ );
+ }
+ ReflectionHelper.setAccessible( method );
+ filterDef.setFactoryMethod( method );
+ }
+ if ( method.isAnnotationPresent( Key.class ) ) {
+ if ( filterDef.getKeyMethod() != null ) {
+ throw new SearchException(
+ "Multiple @Key methods found" + defAnn.name() + ": "
+ + filterDef.getImpl().getName() + "." + method.getName()
+ );
+ }
+ ReflectionHelper.setAccessible( method );
+ filterDef.setKeyMethod( method );
+ }
+
+ String name = method.getName();
+ if ( name.startsWith( "set" ) && method.getParameterTypes().length == 1 ) {
+ filterDef.addSetter( Introspector.decapitalize( name.substring( 3 ) ), method );
+ }
+ }
+ filterDefinitions.put( defAnn.name(), filterDef );
+ }
+
+ private void initProgrammaticAnalyzers(ConfigContext context, ReflectionManager reflectionManager) {
+ final Map defaults = reflectionManager.getDefaults();
+
+ if (defaults != null) {
+ AnalyzerDef[] defs = (AnalyzerDef[]) defaults.get( AnalyzerDefs.class );
+ if ( defs != null ) {
+ for (AnalyzerDef def : defs) {
+ context.addAnalyzerDef( def );
+ }
+ }
+ }
+ }
+
+ private void initProgrammaticallyDefinedFilterDef(ReflectionManager reflectionManager) {
+ @SuppressWarnings("unchecked") Map defaults = reflectionManager.getDefaults();
+ FullTextFilterDef[] filterDefs = (FullTextFilterDef[]) defaults.get( FullTextFilterDefs.class);
+ if (filterDefs != null && filterDefs.length != 0) {
+ for (FullTextFilterDef defAnn : filterDefs) {
+ if ( filterDefinitions.containsKey( defAnn.name() ) ) {
+ throw new SearchException("Multiple definition of @FullTextFilterDef.name=" + defAnn.name());
+ }
+ bindFullTextFilterDef(defAnn);
+ }
+ }
+ }
+
+ private static ErrorHandler createErrorHandler(Properties configuration) {
+ boolean sync = BatchedQueueingProcessor.isConfiguredAsSync( configuration );
+ String errorHandlerClassName = configuration.getProperty( Environment.ERROR_HANDLER );
+ if ( StringHelper.isEmpty( errorHandlerClassName ) ) {
+ return new LogErrorHandler();
+ }
+ else if ( errorHandlerClassName.trim().equals( "log" ) ) {
+ return new LogErrorHandler();
+ }
+ else {
+ return PluginLoader.instanceFromName( ErrorHandler.class, errorHandlerClassName,
+ ImmutableSearchFactory.class, "Error Handler" );
+ }
+ }
+
+ private ReflectionManager getReflectionManager(SearchConfiguration cfg) {
+ ReflectionManager reflectionManager = cfg.getReflectionManager();
+ if ( reflectionManager == null ) {
+ reflectionManager = new JavaReflectionManager();
+ }
+ return reflectionManager;
+ }
+
+ private static String defineIndexingStrategy(SearchConfiguration cfg) {
+ String indexingStrategy = cfg.getProperties().getProperty( Environment.INDEXING_STRATEGY, "event" );
+ if ( !( "event".equals( indexingStrategy ) || "manual".equals( indexingStrategy ) ) ) {
+ throw new SearchException( Environment.INDEXING_STRATEGY + " unknown: " + indexingStrategy );
+ }
+ return indexingStrategy;
+ }
+
+ public void addOptimizerStrategy(DirectoryProvider<?> provider, OptimizerStrategy optimizerStrategy) {
+ DirectoryProviderData data = dirProviderData.get( provider );
+ if ( data == null ) {
+ data = new DirectoryProviderData();
+ dirProviderData.put( provider, data );
+ }
+ data.setOptimizerStrategy( optimizerStrategy );
+ }
+
+ public void addIndexingParameters(DirectoryProvider<?> provider, LuceneIndexingParameters indexingParams) {
+ dirProviderIndexingParams.put( provider, indexingParams );
+ }
+
+ public void addClassToDirectoryProvider(Class<?> entity, DirectoryProvider<?> directoryProvider, boolean exclusiveIndexUsage) {
+ DirectoryProviderData data = dirProviderData.get( directoryProvider );
+ if ( data == null ) {
+ data = new DirectoryProviderData();
+ dirProviderData.put( directoryProvider, data );
+ }
+ data.getClasses().add( entity );
+ data.setExclusiveIndexUsage( exclusiveIndexUsage );
+ }
+
+ public SearchFactoryImplementor getUninitializedSearchFactory() {
+ return rootFactory;
+ }
+
+ public String getIndexingStrategy() {
+ return indexingStrategy;
+ }
+
+ public Set<DirectoryProvider<?>> getDirectoryProviders() {
+ return this.dirProviderData.keySet();
+ }
+
+ public void setBackendQueueProcessorFactory(BackendQueueProcessorFactory backendQueueProcessorFactory) {
+ this.backendQueueProcessorFactory = backendQueueProcessorFactory;
+ }
+
+ public OptimizerStrategy getOptimizerStrategy(DirectoryProvider<?> provider) {
+ return dirProviderData.get( provider ).getOptimizerStrategy();
+ }
+
+ public Set<Class<?>> getClassesInDirectoryProvider(DirectoryProvider<?> directoryProvider) {
+ return Collections.unmodifiableSet( dirProviderData.get( directoryProvider ).getClasses() );
+ }
+
+ public LuceneIndexingParameters getIndexingParameters(DirectoryProvider<?> provider) {
+ return dirProviderIndexingParams.get( provider );
+ }
+
+ public ReentrantLock getDirectoryProviderLock(DirectoryProvider<?> dp) {
+ return this.dirProviderData.get( dp ).getDirLock();
+ }
+
+ public Similarity getSimilarity(DirectoryProvider<?> provider) {
+ Similarity similarity = dirProviderData.get( provider ).getSimilarity();
+ if ( similarity == null ) throw new SearchException( "Assertion error: a similarity should be defined for each provider" );
+ return similarity;
+ }
+
+ public boolean isExclusiveIndexUsageEnabled(DirectoryProvider<?> provider) {
+ return dirProviderData.get( provider ).isExclusiveIndexUsage();
+ }
+
+ public ErrorHandler getErrorHandler() {
+ return errorHandler;
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T> DocumentBuilderIndexedEntity<T> getDocumentBuilderIndexedEntity(Class<T> entityType) {
+ return ( DocumentBuilderIndexedEntity<T> ) documentBuildersIndexedEntities.get( entityType );
+ }
+}
Deleted: 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:31:04 UTC (rev 19833)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.java 2010-06-28 12:32:47 UTC (rev 19834)
@@ -1,663 +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.beans.Introspector;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.locks.ReentrantLock;
-
-import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.search.Similarity;
-import org.hibernate.annotations.common.reflection.MetadataProvider;
-import org.hibernate.annotations.common.reflection.MetadataProviderInjector;
-import org.hibernate.annotations.common.reflection.ReflectionManager;
-import org.hibernate.annotations.common.reflection.XClass;
-import org.hibernate.annotations.common.reflection.java.JavaReflectionManager;
-import org.hibernate.search.Environment;
-import org.hibernate.search.spi.WritableBuildContext;
-import org.hibernate.search.spi.WorkerBuildContext;
-import org.hibernate.search.SearchException;
-import org.hibernate.search.Version;
-import org.hibernate.search.annotations.AnalyzerDef;
-import org.hibernate.search.annotations.AnalyzerDefs;
-import org.hibernate.search.annotations.Factory;
-import org.hibernate.search.annotations.FullTextFilterDef;
-import org.hibernate.search.annotations.FullTextFilterDefs;
-import org.hibernate.search.annotations.Indexed;
-import org.hibernate.search.annotations.Key;
-import org.hibernate.search.backend.BackendQueueProcessorFactory;
-import org.hibernate.search.backend.LuceneIndexingParameters;
-import org.hibernate.search.backend.LuceneWork;
-import org.hibernate.search.backend.OptimizeLuceneWork;
-import org.hibernate.search.backend.Worker;
-import org.hibernate.search.backend.WorkerFactory;
-import org.hibernate.search.backend.configuration.ConfigurationParseHelper;
-import org.hibernate.search.backend.configuration.MaskedProperty;
-import org.hibernate.search.backend.impl.BatchedQueueingProcessor;
-import org.hibernate.search.backend.impl.batchlucene.BatchBackend;
-import org.hibernate.search.backend.impl.batchlucene.LuceneBatchBackend;
-import org.hibernate.search.batchindexing.MassIndexerProgressMonitor;
-import org.hibernate.search.cfg.SearchConfiguration;
-import org.hibernate.search.cfg.SearchMapping;
-import org.hibernate.search.engine.DocumentBuilderContainedEntity;
-import org.hibernate.search.engine.DocumentBuilderIndexedEntity;
-import org.hibernate.search.engine.EntityState;
-import org.hibernate.search.engine.FilterDef;
-import org.hibernate.search.engine.SearchFactoryImplementor;
-import org.hibernate.search.filter.CachingWrapperFilter;
-import org.hibernate.search.filter.FilterCachingStrategy;
-import org.hibernate.search.filter.MRUFilterCachingStrategy;
-import org.hibernate.search.filter.ShardSensitiveOnlyFilter;
-import org.hibernate.search.query.dsl.v2.QueryContextBuilder;
-import org.hibernate.search.query.dsl.v2.impl.ConnectedQueryContextBuilder;
-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.store.optimization.OptimizerStrategy;
-import org.hibernate.search.util.LoggerFactory;
-import org.hibernate.search.util.PluginLoader;
-import org.hibernate.search.util.ReflectionHelper;
-import org.hibernate.util.StringHelper;
-import org.slf4j.Logger;
-import org.hibernate.search.exception.ErrorHandler;
-import org.hibernate.search.exception.impl.LogErrorHandler;
-
-/**
- * @author Emmanuel Bernard
- */
-public class SearchFactoryImpl implements SearchFactoryImplementor, WritableBuildContext, WorkerBuildContext {
-
- static {
- Version.touch();
- }
-
- private static final Logger log = LoggerFactory.make();
-
- private final Map<Class<?>, DocumentBuilderIndexedEntity<?>> documentBuildersIndexedEntities = new HashMap<Class<?>, DocumentBuilderIndexedEntity<?>>();
- private final Map<Class<?>, DocumentBuilderContainedEntity<?>> documentBuildersContainedEntities = new HashMap<Class<?>, DocumentBuilderContainedEntity<?>>();
- //keep track of the index modifiers per DirectoryProvider since multiple entity can use the same directory provider
- private final Map<DirectoryProvider<?>, DirectoryProviderData> dirProviderData = new HashMap<DirectoryProvider<?>, DirectoryProviderData>();
- private final Worker worker;
- private final ReaderProvider readerProvider;
- private BackendQueueProcessorFactory backendQueueProcessorFactory;
- private final Map<String, FilterDef> filterDefinitions = new HashMap<String, FilterDef>();
- private final FilterCachingStrategy filterCachingStrategy;
- private Map<String, Analyzer> analyzers;
- private final AtomicBoolean stopped = new AtomicBoolean( false );
- private final int cacheBitResultsSize;
- private final Properties configurationProperties;
- private final ErrorHandler errorHandler;
-
- private final PolymorphicIndexHierarchy indexHierarchy = new PolymorphicIndexHierarchy();
-
- /*
- * Used as a barrier (piggyback usage) between initialization and subsequent usage of searchFactory in different threads
- * this is due to our use of the initialize pattern is a few areas
- * subsequent reads on volatiles should be very cheap on most platform especially since we don't write after init
- *
- * This volatile is meant to be written after initialization
- * and read by all subsequent methods accessing the SearchFactory state
- * read to be as barrier != 0. If barrier == 0 we have a race condition, but is not likely to happen.
- */
- private volatile short barrier;
-
- /**
- * Each directory provider (index) can have its own performance settings.
- */
- private Map<DirectoryProvider, LuceneIndexingParameters> dirProviderIndexingParams =
- new HashMap<DirectoryProvider, LuceneIndexingParameters>();
- private final String indexingStrategy;
-
-
- public BackendQueueProcessorFactory getBackendQueueProcessorFactory() {
- if ( barrier != 0 ) {
- } //read barrier
- return backendQueueProcessorFactory;
- }
-
- public void setBackendQueueProcessorFactory(BackendQueueProcessorFactory backendQueueProcessorFactory) {
- //no need to set a barrier, we init in the same thread as the init one
- this.backendQueueProcessorFactory = backendQueueProcessorFactory;
- }
-
- public SearchFactoryImpl(SearchConfiguration cfg) {
- this.configurationProperties = cfg.getProperties();
- this.errorHandler = createErrorHandler( configurationProperties );
- ReflectionManager reflectionManager = getReflectionManager(cfg);
- final SearchMapping mapping = SearchMappingBuilder.getSearchMapping(cfg);
- if ( mapping != null) {
- if ( ! ( reflectionManager instanceof MetadataProviderInjector)) {
- throw new SearchException("Programmatic mapping model used but ReflectionManager does not implement "
- + MetadataProviderInjector.class.getName() );
- }
- MetadataProviderInjector injector = (MetadataProviderInjector) reflectionManager;
- MetadataProvider original = injector.getMetadataProvider();
- injector.setMetadataProvider( new MappingModelMetadataProvider( original, mapping ) );
-
- }
-
- this.indexingStrategy = defineIndexingStrategy( cfg ); //need to be done before the document builds
- initDocumentBuilders( cfg, reflectionManager );
-
- Set<Class<?>> indexedClasses = documentBuildersIndexedEntities.keySet();
- for ( DocumentBuilderIndexedEntity builder : documentBuildersIndexedEntities.values() ) {
- builder.postInitialize( indexedClasses );
- }
- //not really necessary today
- for ( DocumentBuilderContainedEntity builder : documentBuildersContainedEntities.values() ) {
- builder.postInitialize( indexedClasses );
- }
- fillSimilarityMapping();
- this.worker = WorkerFactory.createWorker( cfg, this );
- this.readerProvider = ReaderProviderFactory.createReaderProvider( cfg, this );
- this.filterCachingStrategy = buildFilterCachingStrategy( cfg.getProperties() );
- this.cacheBitResultsSize = ConfigurationParseHelper.getIntValue(
- cfg.getProperties(), Environment.CACHE_DOCIDRESULTS_SIZE, CachingWrapperFilter.DEFAULT_SIZE
- );
- this.barrier = 1; //write barrier
- }
-
- private void fillSimilarityMapping() {
- for ( DirectoryProviderData directoryConfiguration : dirProviderData.values() ) {
- for ( Class<?> indexedType : directoryConfiguration.getClasses() ) {
- DocumentBuilderIndexedEntity<?> documentBuilder = documentBuildersIndexedEntities.get( indexedType );
- Similarity similarity = documentBuilder.getSimilarity();
- 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.setSimilarity( similarity );
- }
- }
- }
- }
-
- private ReflectionManager getReflectionManager(SearchConfiguration cfg) {
- ReflectionManager reflectionManager = cfg.getReflectionManager();
- if ( reflectionManager == null ) {
- reflectionManager = new JavaReflectionManager();
- }
- return reflectionManager;
- }
-
- private static String defineIndexingStrategy(SearchConfiguration cfg) {
- String indexingStrategy = cfg.getProperties().getProperty( Environment.INDEXING_STRATEGY, "event" );
- if ( !( "event".equals( indexingStrategy ) || "manual".equals( indexingStrategy ) ) ) {
- throw new SearchException( Environment.INDEXING_STRATEGY + " unknown: " + indexingStrategy );
- }
- return indexingStrategy;
- }
-
- public String getIndexingStrategy() {
- if ( barrier != 0 ) {
- } //read barrier
- return indexingStrategy;
- }
-
- public void close() {
- if ( barrier != 0 ) {
- } //read barrier
- if ( stopped.compareAndSet( false, true ) ) { //make sure we only sop once
- try {
- worker.close();
- }
- catch ( Exception e ) {
- log.error( "Worker raises an exception on close()", e );
- }
-
- try {
- readerProvider.destroy();
- }
- catch ( Exception e ) {
- log.error( "ReaderProvider raises an exception on destroy()", e );
- }
-
- //TODO move directory provider cleaning to DirectoryProviderFactory
- for ( DirectoryProvider dp : getDirectoryProviders() ) {
- try {
- dp.stop();
- }
- catch ( Exception e ) {
- log.error( "DirectoryProvider raises an exception on stop() ", e );
- }
- }
- }
- }
-
- public void addClassToDirectoryProvider(Class<?> clazz, DirectoryProvider<?> directoryProvider, boolean exclusiveIndexUsage) {
- //no need to set a read barrier, we only use this class in the init thread
- DirectoryProviderData data = dirProviderData.get( directoryProvider );
- if ( data == null ) {
- data = new DirectoryProviderData();
- dirProviderData.put( directoryProvider, data );
- }
- data.getClasses().add( clazz );
- data.setExclusiveIndexUsage( exclusiveIndexUsage );
- }
-
- public Set<Class<?>> getClassesInDirectoryProvider(DirectoryProvider<?> directoryProvider) {
- if ( barrier != 0 ) {
- } //read barrier
- return Collections.unmodifiableSet( dirProviderData.get( directoryProvider ).getClasses() );
- }
-
- private void bindFilterDefs(XClass mappedXClass) {
- FullTextFilterDef defAnn = mappedXClass.getAnnotation( FullTextFilterDef.class );
- if ( defAnn != null ) {
- bindFilterDef( defAnn, mappedXClass );
- }
- FullTextFilterDefs defsAnn = mappedXClass.getAnnotation( FullTextFilterDefs.class );
- if ( defsAnn != null ) {
- for ( FullTextFilterDef def : defsAnn.value() ) {
- bindFilterDef( def, mappedXClass );
- }
- }
- }
-
-
- private void initProgrammaticallyDefinedFilterDef(ReflectionManager reflectionManager) {
- @SuppressWarnings("unchecked") Map defaults = reflectionManager.getDefaults();
- FullTextFilterDef[] filterDefs = (FullTextFilterDef[]) defaults.get(FullTextFilterDefs.class);
- if (filterDefs != null && filterDefs.length != 0) {
- for (FullTextFilterDef defAnn : filterDefs) {
- if ( filterDefinitions.containsKey( defAnn.name() ) ) {
- throw new SearchException("Multiple definition of @FullTextFilterDef.name=" + defAnn.name());
- }
- bindFullTextFilterDef(defAnn);
- }
- }
- }
-
- private void bindFilterDef(FullTextFilterDef defAnn, XClass mappedXClass) {
- if ( filterDefinitions.containsKey( defAnn.name() ) ) {
- throw new SearchException(
- "Multiple definition of @FullTextFilterDef.name=" + defAnn.name() + ": "
- + mappedXClass.getName()
- );
- }
-
- bindFullTextFilterDef(defAnn);
- }
-
- private void bindFullTextFilterDef(FullTextFilterDef defAnn) {
- FilterDef filterDef = new FilterDef( defAnn );
- if ( filterDef.getImpl().equals( ShardSensitiveOnlyFilter.class ) ) {
- //this is a placeholder don't process regularly
- filterDefinitions.put( defAnn.name(), filterDef );
- return;
- }
- try {
- filterDef.getImpl().newInstance();
- }
- catch ( IllegalAccessException e ) {
- throw new SearchException( "Unable to create Filter class: " + filterDef.getImpl().getName(), e );
- }
- catch ( InstantiationException e ) {
- throw new SearchException( "Unable to create Filter class: " + filterDef.getImpl().getName(), e );
- }
- for ( Method method : filterDef.getImpl().getMethods() ) {
- if ( method.isAnnotationPresent( Factory.class ) ) {
- if ( filterDef.getFactoryMethod() != null ) {
- throw new SearchException(
- "Multiple @Factory methods found" + defAnn.name() + ": "
- + filterDef.getImpl().getName() + "." + method.getName()
- );
- }
- ReflectionHelper.setAccessible( method );
- filterDef.setFactoryMethod( method );
- }
- if ( method.isAnnotationPresent( Key.class ) ) {
- if ( filterDef.getKeyMethod() != null ) {
- throw new SearchException(
- "Multiple @Key methods found" + defAnn.name() + ": "
- + filterDef.getImpl().getName() + "." + method.getName()
- );
- }
- ReflectionHelper.setAccessible( method );
- filterDef.setKeyMethod( method );
- }
-
- String name = method.getName();
- if ( name.startsWith( "set" ) && method.getParameterTypes().length == 1 ) {
- filterDef.addSetter( Introspector.decapitalize( name.substring( 3 ) ), method );
- }
- }
- filterDefinitions.put( defAnn.name(), filterDef );
- }
-
-
- public Map<Class<?>, DocumentBuilderIndexedEntity<?>> getDocumentBuildersIndexedEntities() {
- if ( barrier != 0 ) {
- } //read barrier
- return documentBuildersIndexedEntities;
- }
-
- @SuppressWarnings("unchecked")
- public <T> DocumentBuilderIndexedEntity<T> getDocumentBuilderIndexedEntity(Class<T> entityType) {
- if ( barrier != 0 ) {
- } //read barrier
- return ( DocumentBuilderIndexedEntity<T> ) documentBuildersIndexedEntities.get( entityType );
- }
-
- @SuppressWarnings("unchecked")
- public <T> DocumentBuilderContainedEntity<T> getDocumentBuilderContainedEntity(Class<T> entityType) {
- if ( barrier != 0 ) {
- } //read barrier
- return ( DocumentBuilderContainedEntity<T> ) documentBuildersContainedEntities.get( entityType );
- }
-
- public Set<DirectoryProvider<?>> getDirectoryProviders() {
- if ( barrier != 0 ) {
- } //read barrier
- return this.dirProviderData.keySet();
- }
-
- public Worker getWorker() {
- if ( barrier != 0 ) {
- } //read barrier
- return worker;
- }
-
- public void addOptimizerStrategy(DirectoryProvider<?> provider, OptimizerStrategy optimizerStrategy) {
- //no need to set a read barrier, we run this method on the init thread
- DirectoryProviderData data = dirProviderData.get( provider );
- if ( data == null ) {
- data = new DirectoryProviderData();
- dirProviderData.put( provider, data );
- }
- data.setOptimizerStrategy( optimizerStrategy );
- }
-
- public void addIndexingParameters(DirectoryProvider<?> provider, LuceneIndexingParameters indexingParams) {
- //no need to set a read barrier, we run this method on the init thread
- dirProviderIndexingParams.put( provider, indexingParams );
- }
-
- public OptimizerStrategy getOptimizerStrategy(DirectoryProvider<?> provider) {
- if ( barrier != 0 ) {
- } //read barrier
- return dirProviderData.get( provider ).getOptimizerStrategy();
- }
-
- public LuceneIndexingParameters getIndexingParameters(DirectoryProvider<?> provider) {
- if ( barrier != 0 ) {
- } //read barrier
- return dirProviderIndexingParams.get( provider );
- }
-
- public ReaderProvider getReaderProvider() {
- if ( barrier != 0 ) {
- } //read barrier
- return readerProvider;
- }
-
- public DirectoryProvider[] getDirectoryProviders(Class<?> entity) {
- if ( barrier != 0 ) {
- } //read barrier
- DocumentBuilderIndexedEntity<?> documentBuilder = getDocumentBuilderIndexedEntity( entity );
- return documentBuilder == null ? null : documentBuilder.getDirectoryProviders();
- }
-
- public void optimize() {
- if ( barrier != 0 ) {
- } //read barrier
- Set<Class<?>> clazzs = getDocumentBuildersIndexedEntities().keySet();
- for ( Class clazz : clazzs ) {
- optimize( clazz );
- }
- }
-
- public void optimize(Class entityType) {
- if ( barrier != 0 ) {
- } //read barrier
- if ( !getDocumentBuildersIndexedEntities().containsKey( entityType ) ) {
- throw new SearchException( "Entity not indexed: " + entityType );
- }
- List<LuceneWork> queue = new ArrayList<LuceneWork>( 1 );
- queue.add( new OptimizeLuceneWork( entityType ) );
- getBackendQueueProcessorFactory().getProcessor( queue ).run();
- }
-
- public Analyzer getAnalyzer(String name) {
- if ( barrier != 0 ) {
- } //read barrier
- final Analyzer analyzer = analyzers.get( name );
- if ( analyzer == null ) {
- throw new SearchException( "Unknown Analyzer definition: " + name );
- }
- return analyzer;
- }
-
- public Analyzer getAnalyzer(Class<?> clazz) {
- if ( clazz == null ) {
- throw new IllegalArgumentException( "A class has to be specified for retrieving a scoped analyzer" );
- }
-
- DocumentBuilderIndexedEntity<?> builder = documentBuildersIndexedEntities.get( clazz );
- if ( builder == null ) {
- throw new IllegalArgumentException(
- "Entity for which to retrieve the scoped analyzer is not an @Indexed entity: " + clazz.getName()
- );
- }
-
- return builder.getAnalyzer();
- }
-
- public QueryContextBuilder buildQueryBuilder() {
- return new ConnectedQueryContextBuilder( this );
- }
-
- private void initDocumentBuilders(SearchConfiguration cfg, ReflectionManager reflectionManager) {
- ConfigContext context = new ConfigContext( cfg );
- Iterator<Class<?>> iter = cfg.getClassMappings();
- DirectoryProviderFactory factory = new DirectoryProviderFactory();
-
- initProgrammaticAnalyzers(context, reflectionManager);
- initProgrammaticallyDefinedFilterDef(reflectionManager);
-
- while ( iter.hasNext() ) {
- Class mappedClass = iter.next();
- if ( mappedClass == null ) {
- continue;
- }
- @SuppressWarnings( "unchecked" )
- XClass mappedXClass = reflectionManager.toXClass( mappedClass );
- if ( mappedXClass == null ) {
- continue;
- }
-
- if ( mappedXClass.isAnnotationPresent( Indexed.class ) ) {
-
- if ( mappedXClass.isAbstract() ) {
- log.warn( "Abstract classes can never insert index documents. Remove @Indexed." );
- continue;
- }
-
- DirectoryProviderFactory.DirectoryProviders providers = factory.createDirectoryProviders(
- mappedXClass, cfg, this, reflectionManager
- );
- //FIXME DocumentBuilderIndexedEntity needs to be built by a helper method receiving Class<T> to infer T properly
- //XClass unfortunately is not (yet) genericized: TODO?
- final DocumentBuilderIndexedEntity<?> documentBuilder = new DocumentBuilderIndexedEntity(
- mappedXClass, context, providers.getProviders(), providers.getSelectionStrategy(),
- reflectionManager
- );
-
- indexHierarchy.addIndexedClass( mappedClass );
- documentBuildersIndexedEntities.put( mappedClass, documentBuilder );
- }
- else {
- //FIXME DocumentBuilderIndexedEntity needs to be built by a helper method receiving Class<T> to infer T properly
- //XClass unfortunately is not (yet) genericized: TODO?
- final DocumentBuilderContainedEntity<?> documentBuilder = new DocumentBuilderContainedEntity(
- mappedXClass, context, reflectionManager
- );
- //TODO enhance that, I don't like to expose EntityState
- if ( documentBuilder.getEntityState() != EntityState.NON_INDEXABLE ) {
- documentBuildersContainedEntities.put( mappedClass, documentBuilder );
- }
- }
- bindFilterDefs( mappedXClass );
- //TODO should analyzer def for classes at tyher sqme level???
- }
- analyzers = context.initLazyAnalyzers();
- factory.startDirectoryProviders();
- }
-
- private void initProgrammaticAnalyzers(ConfigContext context, ReflectionManager reflectionManager) {
- final Map defaults = reflectionManager.getDefaults();
-
- if (defaults != null) {
- AnalyzerDef[] defs = (AnalyzerDef[]) defaults.get( AnalyzerDefs.class );
- if ( defs != null ) {
- for (AnalyzerDef def : defs) {
- context.addAnalyzerDef( def );
- }
- }
- }
- }
-
- private static FilterCachingStrategy buildFilterCachingStrategy(Properties properties) {
- FilterCachingStrategy filterCachingStrategy;
- String impl = properties.getProperty( Environment.FILTER_CACHING_STRATEGY );
- if ( StringHelper.isEmpty( impl ) || "mru".equalsIgnoreCase( impl ) ) {
- filterCachingStrategy = new MRUFilterCachingStrategy();
- }
- else {
- filterCachingStrategy = PluginLoader.instanceFromName( FilterCachingStrategy.class,
- impl, SearchFactoryImpl.class, "filterCachingStrategy" );
- }
- filterCachingStrategy.initialize( properties );
- return filterCachingStrategy;
- }
-
- public FilterCachingStrategy getFilterCachingStrategy() {
- if ( barrier != 0 ) {
- } //read barrier
- return filterCachingStrategy;
- }
-
- public FilterDef getFilterDefinition(String name) {
- if ( barrier != 0 ) {
- } //read barrier
- return filterDefinitions.get( name );
- }
-
- public ReentrantLock getDirectoryProviderLock(DirectoryProvider<?> dp) {
- if ( barrier != 0 ) {
- } //read barrier
- 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.setExclusiveIndexUsage( exclusiveIndexUsage );
- this.dirProviderData.put( provider, dirConfiguration );
- }
-
- public int getFilterCacheBitResultsSize() {
- if ( barrier != 0 ) {
- } //read barrier
- return cacheBitResultsSize;
- }
-
- public Set<Class<?>> getIndexedTypesPolymorphic(Class<?>[] classes) {
- if ( barrier != 0 ) {
- } //read barrier
- return indexHierarchy.getIndexedClasses( classes );
- }
-
- public BatchBackend makeBatchBackend(MassIndexerProgressMonitor progressMonitor) {
- BatchBackend batchBackend;
- String impl = configurationProperties.getProperty( Environment.BATCH_BACKEND );
- if ( StringHelper.isEmpty( impl ) || "LuceneBatch".equalsIgnoreCase( impl ) ) {
- batchBackend = new LuceneBatchBackend();
- }
- else {
- batchBackend = PluginLoader.instanceFromName( BatchBackend.class, impl, SearchFactoryImpl.class,
- "batchbackend" );
- }
- Properties batchBackendConfiguration = new MaskedProperty(
- this.configurationProperties, Environment.BATCH_BACKEND );
- batchBackend.initialize( batchBackendConfiguration, progressMonitor, this );
- return batchBackend;
- }
-
- public Similarity getSimilarity(DirectoryProvider<?> provider) {
- if ( barrier != 0 ) {
- } //read barrier
- Similarity similarity = dirProviderData.get( provider ).getSimilarity();
- if ( similarity == null ) throw new SearchException( "Assertion error: a similarity should be defined for each provider" );
- return similarity;
- }
-
- public boolean isExclusiveIndexUsageEnabled(DirectoryProvider<?> provider) {
- if ( barrier != 0 ) {
- } //read barrier
- return dirProviderData.get( provider ).isExclusiveIndexUsage();
- }
-
- /**
- * @param configuration
- * @return the configured ErrorHandler
- * @since 3.2
- */
- private static ErrorHandler createErrorHandler(Properties configuration) {
- boolean sync = BatchedQueueingProcessor.isConfiguredAsSync( configuration );
- String errorHandlerClassName = configuration.getProperty( Environment.ERROR_HANDLER );
- if ( StringHelper.isEmpty( errorHandlerClassName ) ) {
- return new LogErrorHandler();
- }
- else if ( errorHandlerClassName.trim().equals( "log" ) ) {
- return new LogErrorHandler();
- }
- else {
- return PluginLoader.instanceFromName( ErrorHandler.class, errorHandlerClassName,
- SearchFactoryImpl.class, "Error Handler" );
- }
- }
-
- public ErrorHandler getErrorHandler() {
- return errorHandler;
- }
-
- public SearchFactoryImplementor getUninitializedSearchFactory() {
- return this;
- }
-}
Modified: 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 2010-06-28 12:31:04 UTC (rev 19833)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/spi/BuildContext.java 2010-06-28 12:32:47 UTC (rev 19834)
@@ -1,6 +1,7 @@
package org.hibernate.search.spi;
import java.util.Set;
+import java.util.concurrent.locks.ReentrantLock;
import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.store.DirectoryProvider;
@@ -12,7 +13,8 @@
*/
public interface BuildContext {
/**
- * Returns the SessionFactoryImplementor instance. Do not use until after the initialize method is fully executed.
+ * Returns the SessionFactoryImplementor instance. Do not use until after the initialize and/or stard 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
@@ -35,4 +37,11 @@
String getIndexingStrategy();
Set<DirectoryProvider<?>> getDirectoryProviders();
+
+ /**
+ * This method cannot be used in intialize methods. start methods can use it though.
+ * @param provider
+ * @return
+ */
+ ReentrantLock getDirectoryProviderLock(DirectoryProvider<?> provider);
}
Modified: 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 2010-06-28 12:31:04 UTC (rev 19833)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/spi/WorkerBuildContext.java 2010-06-28 12:32:47 UTC (rev 19834)
@@ -7,6 +7,7 @@
import org.hibernate.search.backend.BackendQueueProcessorFactory;
import org.hibernate.search.backend.LuceneIndexingParameters;
+import org.hibernate.search.engine.DocumentBuilderIndexedEntity;
import org.hibernate.search.exception.ErrorHandler;
import org.hibernate.search.store.DirectoryProvider;
import org.hibernate.search.store.optimization.OptimizerStrategy;
@@ -22,8 +23,8 @@
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();
+ <T> DocumentBuilderIndexedEntity<T> getDocumentBuilderIndexedEntity(Class<T> managedType);
}
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:31:04 UTC (rev 19833)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/store/FSMasterDirectoryProvider.java 2010-06-28 12:32:47 UTC (rev 19834)
@@ -70,7 +70,8 @@
//variables having visibility granted by a read of "current"
private FSDirectory directory;
private String indexName;
- private SearchFactoryImplementor searchFactory;
+ //get rid of it after start()
+ private BuildContext context;
private long copyChunkSize;
//variables needed between initialize and start (used by same thread: no special care needed)
@@ -79,6 +80,7 @@
private String directoryProviderName;
private Properties properties;
private TriggerTask task;
+ private Lock directoryProviderLock;
public void initialize(String directoryProviderName, Properties properties, BuildContext context) {
this.properties = properties;
@@ -96,12 +98,14 @@
throw new SearchException( "Unable to initialize index: " + directoryProviderName, e );
}
copyChunkSize = DirectoryProviderHelper.getCopyBufferSize( directoryProviderName, properties );
- this.searchFactory = context.getUninitializedSearchFactory();
+ this.context = context;
current = 0; //write to volatile to publish all state
}
public void start() {
int currentLocal = 0;
+ this.directoryProviderLock = this.context.getDirectoryProviderLock( this );
+ this.context = null;
try {
//copy to source
if ( new File( sourceDir, CURRENT1 ).exists() ) {
@@ -126,7 +130,7 @@
catch (IOException e) {
throw new SearchException( "Unable to initialize index: " + directoryProviderName, e );
}
- task = new FSMasterDirectoryProvider.TriggerTask( indexDir, sourceDir, this );
+ task = new FSMasterDirectoryProvider.TriggerTask( indexDir, sourceDir );
long period = DirectoryProviderHelper.getRefreshPeriod( properties, directoryProviderName );
timer.scheduleAtFixedRate( task, period, period );
this.current = currentLocal; //write to volatile to publish all state
@@ -182,9 +186,9 @@
private final ExecutorService executor;
private final FSMasterDirectoryProvider.CopyDirectory copyTask;
- public TriggerTask(File source, File destination, DirectoryProvider<FSDirectory> directoryProvider) {
+ public TriggerTask(File source, File destination) {
executor = Executors.newSingleThreadExecutor();
- copyTask = new FSMasterDirectoryProvider.CopyDirectory( source, destination, directoryProvider );
+ copyTask = new FSMasterDirectoryProvider.CopyDirectory( source, destination );
}
public void run() {
@@ -205,12 +209,10 @@
private final File source;
private final File destination;
private final AtomicBoolean inProgress = new AtomicBoolean( false );
- private final Lock directoryProviderLock;
- public CopyDirectory(File source, File destination, DirectoryProvider<FSDirectory> directoryProvider) {
+ public CopyDirectory(File source, File destination) {
this.source = source;
this.destination = destination;
- this.directoryProviderLock = searchFactory.getDirectoryProviderLock( directoryProvider );
}
public void run() {
Modified: search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/SearchTestCase.java
===================================================================
--- search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/SearchTestCase.java 2010-06-28 12:31:04 UTC (rev 19833)
+++ search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/SearchTestCase.java 2010-06-28 12:32:47 UTC (rev 19834)
@@ -49,8 +49,8 @@
import org.hibernate.search.Search;
import org.hibernate.search.SearchFactory;
import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.event.FullTextIndexEventListener;
-import org.hibernate.search.impl.SearchFactoryImpl;
import org.hibernate.search.store.RAMDirectoryProvider;
import org.hibernate.tool.hbm2ddl.SchemaExport;
@@ -70,7 +70,7 @@
private static File indexDir;
- private SearchFactoryImpl searchFactory;
+ private SearchFactoryImplementor searchFactory;
static {
String buildDir = System.getProperty( "build.dir" );
@@ -139,7 +139,7 @@
if ( searchFactory == null ) {
Session session = openSession();
FullTextSession fullTextSession = Search.getFullTextSession( session );
- searchFactory = (SearchFactoryImpl) fullTextSession.getSearchFactory();
+ searchFactory = ( SearchFactoryImplementor) fullTextSession.getSearchFactory();
fullTextSession.close();
}
return searchFactory;
Modified: search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/configuration/ConfigurationReadTestCase.java
===================================================================
--- search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/configuration/ConfigurationReadTestCase.java 2010-06-28 12:31:04 UTC (rev 19833)
+++ search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/configuration/ConfigurationReadTestCase.java 2010-06-28 12:32:47 UTC (rev 19834)
@@ -31,7 +31,6 @@
import org.hibernate.search.SearchException;
import org.hibernate.search.backend.configuration.IndexWriterSetting;
import org.hibernate.search.engine.SearchFactoryImplementor;
-import org.hibernate.search.impl.SearchFactoryImpl;
import org.hibernate.search.store.RAMDirectoryProvider;
import org.hibernate.search.test.SearchTestCase;
import org.hibernate.search.util.FileHelper;
@@ -58,7 +57,7 @@
protected void setUp() throws Exception {
super.setUp();
FullTextSession fullTextSession = Search.getFullTextSession( openSession() );
- searchFactory = (SearchFactoryImpl) fullTextSession.getSearchFactory();
+ searchFactory = (SearchFactoryImplementor) fullTextSession.getSearchFactory();
fullTextSession.close();
FileHelper.delete( getBaseIndexDir() );
getBaseIndexDir().mkdirs();
Modified: search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/configuration/CustomBackendTest.java
===================================================================
--- search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/configuration/CustomBackendTest.java 2010-06-28 12:31:04 UTC (rev 19833)
+++ search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/configuration/CustomBackendTest.java 2010-06-28 12:32:47 UTC (rev 19834)
@@ -30,7 +30,7 @@
import org.hibernate.search.backend.BackendQueueProcessorFactory;
import org.hibernate.search.backend.impl.blackhole.BlackHoleBackendQueueProcessorFactory;
import org.hibernate.search.backend.impl.lucene.LuceneBackendQueueProcessorFactory;
-import org.hibernate.search.impl.SearchFactoryImpl;
+import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.test.util.FullTextSessionBuilder;
/**
@@ -50,7 +50,7 @@
FullTextSession ftSession = builder
.setProperty( "hibernate.search.worker.backend", name )
.openFullTextSession();
- SearchFactoryImpl searchFactory = (SearchFactoryImpl) ftSession.getSearchFactory();
+ SearchFactoryImplementor searchFactory = ( SearchFactoryImplementor) ftSession.getSearchFactory();
ftSession.close();
assertEquals( backendType, searchFactory.getBackendQueueProcessorFactory().getClass() );
builder.close();
Modified: search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/errorhandling/LuceneErrorHandlingTest.java
===================================================================
--- search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/errorhandling/LuceneErrorHandlingTest.java 2010-06-28 12:31:04 UTC (rev 19833)
+++ search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/errorhandling/LuceneErrorHandlingTest.java 2010-06-28 12:32:47 UTC (rev 19834)
@@ -29,8 +29,8 @@
import java.util.concurrent.atomic.AtomicInteger;
import junit.framework.Assert;
+import org.apache.lucene.index.IndexWriter;
-import org.apache.lucene.index.IndexWriter;
import org.hibernate.search.Environment;
import org.hibernate.search.FullTextSession;
import org.hibernate.search.Search;
@@ -43,9 +43,9 @@
import org.hibernate.search.backend.impl.lucene.DpSelectionVisitor;
import org.hibernate.search.backend.impl.lucene.works.LuceneWorkDelegate;
import org.hibernate.search.batchindexing.MassIndexerProgressMonitor;
+import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.exception.ErrorHandler;
import org.hibernate.search.exception.impl.LogErrorHandler;
-import org.hibernate.search.impl.SearchFactoryImpl;
import org.hibernate.search.test.Document;
import org.hibernate.search.test.SearchTestCase;
@@ -63,11 +63,11 @@
static final AtomicInteger workcounter = new AtomicInteger();
public void testErrorHandling() {
- SearchFactoryImpl searchFactoryImpl = getSearchFactoryImpl();
- ErrorHandler errorHandler = searchFactoryImpl.getErrorHandler();
+ SearchFactoryImplementor searchFactory = getSearchFactoryImpl();
+ ErrorHandler errorHandler = searchFactory.getErrorHandler();
Assert.assertTrue( errorHandler instanceof MockErrorHandler );
MockErrorHandler mockErrorHandler = (MockErrorHandler)errorHandler;
- BackendQueueProcessorFactory queueProcessorFactory = searchFactoryImpl.getBackendQueueProcessorFactory();
+ BackendQueueProcessorFactory queueProcessorFactory = searchFactory.getBackendQueueProcessorFactory();
List<LuceneWork> queue = new ArrayList<LuceneWork>();
queue.add( new HarmlessWork( "firstWork" ) );
queue.add( new HarmlessWork( "secondWork" ) );
@@ -114,11 +114,11 @@
cfg.setProperty( Environment.ERROR_HANDLER, MockErrorHandler.class.getName() );
}
- protected SearchFactoryImpl getSearchFactoryImpl() {
+ protected SearchFactoryImplementor getSearchFactoryImpl() {
FullTextSession s = Search.getFullTextSession( openSession() );
s.close();
SearchFactory searchFactory = s.getSearchFactory();
- return (SearchFactoryImpl) searchFactory;
+ return (SearchFactoryImplementor) searchFactory;
}
/**
Modified: search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/id/providedId/ProvidedIdTest.java
===================================================================
--- search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/id/providedId/ProvidedIdTest.java 2010-06-28 12:31:04 UTC (rev 19833)
+++ search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/id/providedId/ProvidedIdTest.java 2010-06-28 12:32:47 UTC (rev 19834)
@@ -28,10 +28,11 @@
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TopDocs;
+
import org.hibernate.search.backend.Work;
import org.hibernate.search.backend.WorkType;
import org.hibernate.search.engine.SearchFactoryImplementor;
-import org.hibernate.search.impl.SearchFactoryImpl;
+import org.hibernate.search.impl.SearchFactoryBuilder;
import org.hibernate.search.store.DirectoryProvider;
import org.hibernate.search.test.SearchTestCase;
@@ -41,7 +42,7 @@
public class ProvidedIdTest extends junit.framework.TestCase {
public void testProvidedId() throws Exception {
- SearchFactoryImplementor sf = new SearchFactoryImpl( new StandaloneConf() );
+ SearchFactoryImplementor sf = new SearchFactoryBuilder().configuration( new StandaloneConf() ).buildSearchFactory();
ProvidedIdPerson person1 = new ProvidedIdPerson();
person1.setName( "Big Goat" );
Modified: search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/jgroups/common/JGroupsCommonTest.java
===================================================================
--- search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/jgroups/common/JGroupsCommonTest.java 2010-06-28 12:31:04 UTC (rev 19833)
+++ search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/jgroups/common/JGroupsCommonTest.java 2010-06-28 12:32:47 UTC (rev 19834)
@@ -46,7 +46,8 @@
* </code>
* @author Lukasz Moren
*/
-public class JGroupsCommonTest extends MultipleSessionsSearchTestCase {
+public class
+ JGroupsCommonTest extends MultipleSessionsSearchTestCase {
private static final String DEFAULT_JGROUPS_CONFIGURATION_FILE = "flush-udp.xml";
Modified: search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/worker/duplication/WorkDuplicationTest.java
===================================================================
--- search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/worker/duplication/WorkDuplicationTest.java 2010-06-28 12:31:04 UTC (rev 19833)
+++ search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/worker/duplication/WorkDuplicationTest.java 2010-06-28 12:32:47 UTC (rev 19834)
@@ -24,23 +24,24 @@
*/
package org.hibernate.search.test.worker.duplication;
+import java.util.ArrayList;
import java.util.List;
-import java.util.ArrayList;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.QueryParser;
+import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
-import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.TopDocs;
+
import org.hibernate.Transaction;
import org.hibernate.search.FullTextQuery;
import org.hibernate.search.FullTextSession;
-import org.hibernate.search.backend.WorkType;
-import org.hibernate.search.backend.LuceneWork;
import org.hibernate.search.backend.AddLuceneWork;
import org.hibernate.search.backend.DeleteLuceneWork;
+import org.hibernate.search.backend.LuceneWork;
+import org.hibernate.search.backend.WorkType;
import org.hibernate.search.engine.DocumentBuilderIndexedEntity;
-import org.hibernate.search.impl.SearchFactoryImpl;
+import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.reader.ReaderProvider;
import org.hibernate.search.store.DirectoryProvider;
import org.hibernate.search.test.SearchTestCase;
@@ -123,7 +124,7 @@
@SuppressWarnings( "unchecked" )
public void testAddWorkGetReplacedByDeleteWork() throws Exception {
FullTextSession fullTextSession = org.hibernate.search.Search.getFullTextSession( openSession() );
- SearchFactoryImpl searchFactory = ( SearchFactoryImpl ) fullTextSession.getSearchFactory();
+ SearchFactoryImplementor searchFactory = ( SearchFactoryImplementor ) fullTextSession.getSearchFactory();
DocumentBuilderIndexedEntity builder = searchFactory.getDocumentBuilderIndexedEntity( SpecialPerson.class );
// create test entity
15 years, 3 months
Hibernate SVN: r19833 - in search/trunk/hibernate-search/src: main/java/org/hibernate/search/backend and 14 other directories.
by hibernate-commits@lists.jboss.org
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 ) );
15 years, 3 months
Hibernate SVN: r19832 - in search/trunk/hibernate-search/src: main/java/org/hibernate/search/query/dsl/v2/impl and 1 other directories.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2010-06-28 08:28:59 -0400 (Mon, 28 Jun 2010)
New Revision: 19832
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/FuzzyContext.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/PhraseContext.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/QueryCustomization.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/RangeMatchingContext.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/RangeTerminationExcludable.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/TermFuzzy.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/BooleanQueryBuilder.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedAllContext.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedFuzzyContext.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsRangeQueryBuilder.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedPhraseContext.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeContext.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeMatchingContext.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedTermContext.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedWildcardContext.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/QueryCustomizer.java
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/query/dsl/DSLTest.java
Log:
HSEARCH-414 Rename options to be more fluent
withSlop, withThreshold etc
filteredBy etc
exclude() is now excludeLimit()
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/FuzzyContext.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/FuzzyContext.java 2010-06-28 11:09:59 UTC (rev 19831)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/FuzzyContext.java 2010-06-28 12:28:59 UTC (rev 19832)
@@ -14,7 +14,7 @@
* Value between 0 and 1 (1 excluded)
* Defaults to .5
*/
- FuzzyContext threshold(float threshold);
+ FuzzyContext withThreshold(float threshold);
/**
* Size of the prefix ignored by the fuzzyness.
@@ -22,5 +22,5 @@
*
* Defaults to 0
*/
- FuzzyContext prefixLength(int prefixLength);
+ FuzzyContext withPrefixLength(int prefixLength);
}
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/PhraseContext.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/PhraseContext.java 2010-06-28 11:09:59 UTC (rev 19831)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/PhraseContext.java 2010-06-28 12:28:59 UTC (rev 19832)
@@ -11,7 +11,7 @@
*
* Defaults to 0
*/
- PhraseContext slop(int slop);
+ PhraseContext withSlop(int slop);
/**
* field / property the term query is executed on
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/QueryCustomization.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/QueryCustomization.java 2010-06-28 11:09:59 UTC (rev 19831)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/QueryCustomization.java 2010-06-28 12:28:59 UTC (rev 19832)
@@ -24,12 +24,12 @@
* All results matching the query have a constant score equals to the boost
* FIXME is that true?
*/
- T constantScore();
+ T withConstantScore();
/**
* Filter the query results with the Filter instance
*/
- T filter(Filter filter);
+ T filteredBy(Filter filter);
//TODO filter(String) + parameters
}
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/RangeMatchingContext.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/RangeMatchingContext.java 2010-06-28 11:09:59 UTC (rev 19831)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/RangeMatchingContext.java 2010-06-28 12:28:59 UTC (rev 19832)
@@ -16,18 +16,18 @@
public interface FromRangeContext<T> {
RangeTerminationExcludable to(T to);
- FromRangeContext<T> exclude();
+ FromRangeContext<T> excludeLimit();
}
/**
* The field value must be below <code>below</code>
- * You can exclude the value <code>below</code> by calling <code>.exclude()</code>
+ * You can exclude the value <code>below</code> by calling <code>.excludeLimit()</code>
*/
RangeTerminationExcludable below(Object below);
/**
* The field value must be above <code>above</code>
- * You can exclude the value <code>above</code> by calling <code>.exclude()</code>
+ * You can exclude the value <code>above</code> by calling <code>.excludeLimit()</code>
*/
RangeTerminationExcludable above(Object above);
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/RangeTerminationExcludable.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/RangeTerminationExcludable.java 2010-06-28 11:09:59 UTC (rev 19831)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/RangeTerminationExcludable.java 2010-06-28 12:28:59 UTC (rev 19832)
@@ -4,5 +4,5 @@
* @author Emmanuel Bernard
*/
public interface RangeTerminationExcludable extends Termination<RangeTerminationExcludable> {
- RangeTerminationExcludable exclude();
+ RangeTerminationExcludable excludeLimit();
}
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/TermFuzzy.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/TermFuzzy.java 2010-06-28 11:09:59 UTC (rev 19831)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/TermFuzzy.java 2010-06-28 12:28:59 UTC (rev 19832)
@@ -9,7 +9,7 @@
* Value between 0 and 1 (1 excluded)
* Defaults to .5
*/
- TermFuzzy threshold(float threshold);
+ TermFuzzy withThreshold(float threshold);
/**
* Size of the prefix ignored by the fuzzyness.
@@ -17,5 +17,5 @@
*
* Defaults to 0
*/
- TermFuzzy prefixLength(int prefixLength);
+ TermFuzzy withPrefixLength(int prefixLength);
}
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/BooleanQueryBuilder.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/BooleanQueryBuilder.java 2010-06-28 11:09:59 UTC (rev 19831)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/BooleanQueryBuilder.java 2010-06-28 12:28:59 UTC (rev 19832)
@@ -50,13 +50,13 @@
return this;
}
- public MustJunction constantScore() {
- queryCustomizer.constantScore();
+ public MustJunction withConstantScore() {
+ queryCustomizer.withConstantScore();
return this;
}
- public MustJunction filter(Filter filter) {
- queryCustomizer.filter(filter);
+ public MustJunction filteredBy(Filter filter) {
+ queryCustomizer.filteredBy(filter);
return this;
}
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedAllContext.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedAllContext.java 2010-06-28 11:09:59 UTC (rev 19831)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedAllContext.java 2010-06-28 12:28:59 UTC (rev 19832)
@@ -51,13 +51,13 @@
return this;
}
- public AllContext constantScore() {
- queryCustomizer.constantScore();
+ public AllContext withConstantScore() {
+ queryCustomizer.withConstantScore();
return this;
}
- public AllContext filter(Filter filter) {
- queryCustomizer.filter( filter );
+ public AllContext filteredBy(Filter filter) {
+ queryCustomizer.filteredBy( filter );
return this;
}
}
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedFuzzyContext.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedFuzzyContext.java 2010-06-28 11:09:59 UTC (rev 19831)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedFuzzyContext.java 2010-06-28 12:28:59 UTC (rev 19832)
@@ -23,12 +23,12 @@
return new ConnectedTermMatchingContext(termContext, field, queryCustomizer, queryContext);
}
- public ConnectedFuzzyContext threshold(float threshold) {
+ public ConnectedFuzzyContext withThreshold(float threshold) {
termContext.setThreshold( threshold );
return this;
}
- public ConnectedFuzzyContext prefixLength(int prefixLength) {
+ public ConnectedFuzzyContext withPrefixLength(int prefixLength) {
termContext.setPrefixLength( prefixLength );
return this;
}
@@ -38,13 +38,13 @@
return this;
}
- public FuzzyContext constantScore() {
- queryCustomizer.constantScore();
+ public FuzzyContext withConstantScore() {
+ queryCustomizer.withConstantScore();
return this;
}
- public FuzzyContext filter(Filter filter) {
- queryCustomizer.filter(filter);
+ public FuzzyContext filteredBy(Filter filter) {
+ queryCustomizer.filteredBy(filter);
return this;
}
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsRangeQueryBuilder.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsRangeQueryBuilder.java 2010-06-28 11:09:59 UTC (rev 19831)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedMultiFieldsRangeQueryBuilder.java 2010-06-28 12:28:59 UTC (rev 19832)
@@ -30,7 +30,7 @@
this.queryContext = queryContext;
}
- public RangeTerminationExcludable exclude() {
+ public RangeTerminationExcludable excludeLimit() {
if ( rangeContext.getFrom() != null && rangeContext.getTo() != null ) {
rangeContext.setExcludeTo( true );
}
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedPhraseContext.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedPhraseContext.java 2010-06-28 11:09:59 UTC (rev 19831)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedPhraseContext.java 2010-06-28 12:28:59 UTC (rev 19832)
@@ -1,9 +1,7 @@
package org.hibernate.search.query.dsl.v2.impl;
-import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.search.Filter;
-import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.query.dsl.v2.PhraseContext;
import org.hibernate.search.query.dsl.v2.PhraseMatchingContext;
@@ -22,7 +20,7 @@
this.queryContext = queryContext;
}
- public PhraseContext slop(int slop) {
+ public PhraseContext withSlop(int slop) {
phraseContext.setSlop( slop );
return this;
}
@@ -36,13 +34,13 @@
return this;
}
- public PhraseContext constantScore() {
- queryCustomizer.constantScore();
+ public PhraseContext withConstantScore() {
+ queryCustomizer.withConstantScore();
return this;
}
- public PhraseContext filter(Filter filter) {
- queryCustomizer.filter(filter);
+ public PhraseContext filteredBy(Filter filter) {
+ queryCustomizer.filteredBy(filter);
return this;
}
}
\ No newline at end of file
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeContext.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeContext.java 2010-06-28 11:09:59 UTC (rev 19831)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeContext.java 2010-06-28 12:28:59 UTC (rev 19832)
@@ -1,10 +1,7 @@
package org.hibernate.search.query.dsl.v2.impl;
-import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.search.Filter;
-import org.hibernate.search.SearchFactory;
-import org.hibernate.search.engine.SearchFactoryImplementor;
import org.hibernate.search.query.dsl.v2.RangeContext;
import org.hibernate.search.query.dsl.v2.RangeMatchingContext;
@@ -29,13 +26,13 @@
return this;
}
- public RangeContext constantScore() {
- queryCustomizer.constantScore();
+ public RangeContext withConstantScore() {
+ queryCustomizer.withConstantScore();
return this;
}
- public RangeContext filter(Filter filter) {
- queryCustomizer.filter(filter);
+ public RangeContext filteredBy(Filter filter) {
+ queryCustomizer.filteredBy(filter);
return this;
}
}
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeMatchingContext.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeMatchingContext.java 2010-06-28 11:09:59 UTC (rev 19831)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedRangeMatchingContext.java 2010-06-28 12:28:59 UTC (rev 19832)
@@ -55,7 +55,7 @@
mother.queryContext);
}
- public FromRangeContext<T> exclude() {
+ public FromRangeContext<T> excludeLimit() {
mother.rangeContext.setExcludeFrom( true );
return this;
}
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedTermContext.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedTermContext.java 2010-06-28 11:09:59 UTC (rev 19831)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedTermContext.java 2010-06-28 12:28:59 UTC (rev 19832)
@@ -42,13 +42,13 @@
return this;
}
- public ConnectedTermContext constantScore() {
- queryCustomizer.constantScore();
+ public ConnectedTermContext withConstantScore() {
+ queryCustomizer.withConstantScore();
return this;
}
- public ConnectedTermContext filter(Filter filter) {
- queryCustomizer.filter(filter);
+ public ConnectedTermContext filteredBy(Filter filter) {
+ queryCustomizer.filteredBy(filter);
return this;
}
}
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedWildcardContext.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedWildcardContext.java 2010-06-28 11:09:59 UTC (rev 19831)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/ConnectedWildcardContext.java 2010-06-28 12:28:59 UTC (rev 19832)
@@ -28,13 +28,13 @@
return this;
}
- public WildcardContext constantScore() {
- queryCustomizer.constantScore();
+ public WildcardContext withConstantScore() {
+ queryCustomizer.withConstantScore();
return this;
}
- public WildcardContext filter(Filter filter) {
- queryCustomizer.filter(filter);
+ public WildcardContext filteredBy(Filter filter) {
+ queryCustomizer.filteredBy(filter);
return this;
}
}
\ No newline at end of file
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/QueryCustomizer.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/QueryCustomizer.java 2010-06-28 11:09:59 UTC (rev 19831)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/query/dsl/v2/impl/QueryCustomizer.java 2010-06-28 12:28:59 UTC (rev 19832)
@@ -24,12 +24,12 @@
return this;
}
- public QueryCustomizer constantScore() {
+ public QueryCustomizer withConstantScore() {
constantScore = true;
return this;
}
- public QueryCustomizer filter(Filter filter) {
+ public QueryCustomizer filteredBy(Filter filter) {
this.filter = filter;
return this;
}
Modified: search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/query/dsl/DSLTest.java
===================================================================
--- search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/query/dsl/DSLTest.java 2010-06-28 11:09:59 UTC (rev 19831)
+++ search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/query/dsl/DSLTest.java 2010-06-28 12:28:59 UTC (rev 19832)
@@ -1,10 +1,8 @@
package org.hibernate.search.test.query.dsl;
-import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
-import java.util.Locale;
import java.util.TimeZone;
import org.apache.lucene.document.DateTools;
@@ -105,8 +103,8 @@
query = monthQb
.keyword()
.fuzzy()
- .threshold( .8f )
- .prefixLength( 1 )
+ .withThreshold( .8f )
+ .withPrefixLength( 1 )
.onField( "mythology" )
.matching( "calder" )
.createQuery();
@@ -289,7 +287,7 @@
.andField( "justfortest" )
.ignoreFieldBridge().ignoreAnalyzer()
.from( from )
- .to( to ).exclude()
+ .to( to ).excludeLimit()
.createQuery();
assertEquals( 1, fts.createFullTextQuery( query, Month.class ).getResultSize() );
@@ -301,7 +299,7 @@
.andField( "justfortest" )
.ignoreFieldBridge().ignoreAnalyzer()
.from( DateTools.dateToString( from, DateTools.Resolution.MINUTE ) )
- .to( DateTools.dateToString( to, DateTools.Resolution.MINUTE ) ).exclude()
+ .to( DateTools.dateToString( to, DateTools.Resolution.MINUTE ) ).excludeLimit()
.createQuery();
assertEquals( 1, fts.createFullTextQuery( query, Month.class ).getResultSize() );
@@ -385,7 +383,7 @@
query = monthQb.
phrase()
- .slop( 1 )
+ .withSlop( 1 )
.onField( "mythology" )
.sentence( "Month whitening" )
.createQuery();
15 years, 3 months
Hibernate SVN: r19831 - search/trunk.
by hibernate-commits@lists.jboss.org
Author: hardy.ferentschik
Date: 2010-06-28 07:09:59 -0400 (Mon, 28 Jun 2010)
New Revision: 19831
Modified:
search/trunk/pom.xml
Log:
HSEARCh-548
Modified: search/trunk/pom.xml
===================================================================
--- search/trunk/pom.xml 2010-06-28 09:52:43 UTC (rev 19830)
+++ search/trunk/pom.xml 2010-06-28 11:09:59 UTC (rev 19831)
@@ -397,6 +397,21 @@
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.5</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-archetype-plugin</artifactId>
+ <version>2.0-alpha-5</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-help-plugin</artifactId>
+ <version>2.1.1</version>
+ </plugin>
</plugins>
</pluginManagement>
</build>
15 years, 3 months
Hibernate SVN: r19830 - core/branches/Branch_3_5/documentation/manual/src/main/docbook/en-US/content.
by hibernate-commits@lists.jboss.org
Author: stliu
Date: 2010-06-28 05:52:43 -0400 (Mon, 28 Jun 2010)
New Revision: 19830
Modified:
core/branches/Branch_3_5/documentation/manual/src/main/docbook/en-US/content/basic_mapping.xml
core/branches/Branch_3_5/documentation/manual/src/main/docbook/en-US/content/configuration.xml
Log:
HHH-5340 Typo in tutorial at web site
Modified: core/branches/Branch_3_5/documentation/manual/src/main/docbook/en-US/content/basic_mapping.xml
===================================================================
--- core/branches/Branch_3_5/documentation/manual/src/main/docbook/en-US/content/basic_mapping.xml 2010-06-28 09:47:17 UTC (rev 19829)
+++ core/branches/Branch_3_5/documentation/manual/src/main/docbook/en-US/content/basic_mapping.xml 2010-06-28 09:52:43 UTC (rev 19830)
@@ -1113,7 +1113,7 @@
node="element-name|."
<key-property name="propertyName" type="typename" column="column_name"/>
- <key-many-to-one name="propertyName class="ClassName" column="column_name"/>
+ <key-many-to-one name="propertyName" class="ClassName" column="column_name"/>
......
</composite-id>]]></programlisting>
@@ -1856,7 +1856,7 @@
associated object. The meaningful values are divided into three categories. First, basic
operations, which include: <literal>persist, merge, delete, save-update, evict, replicate, lock and
refresh</literal>; second, special values: <literal>delete-orphan</literal>;
- and third,<literal>all</literal> comma-separated combinations of operation
+ and third, <literal>all</literal> comma-separated combinations of operation
names: <literal>cascade="persist,merge,evict"</literal> or
<literal>cascade="all,delete-orphan"</literal>. See <xref linkend="objectstate-transitive"/>
for a full explanation. Note that single valued, many-to-one and
Modified: core/branches/Branch_3_5/documentation/manual/src/main/docbook/en-US/content/configuration.xml
===================================================================
--- core/branches/Branch_3_5/documentation/manual/src/main/docbook/en-US/content/configuration.xml 2010-06-28 09:47:17 UTC (rev 19829)
+++ core/branches/Branch_3_5/documentation/manual/src/main/docbook/en-US/content/configuration.xml 2010-06-28 09:52:43 UTC (rev 19830)
@@ -604,7 +604,7 @@
</entry>
<entry>
Set this property to <literal>true</literal> if your JDBC driver returns
- correct row counts from <literal>executeBatch()</literal>. Iit is usually
+ correct row counts from <literal>executeBatch()</literal>. It is usually
safe to turn this option on. Hibernate will then use batched DML for
automatically versioned data. Defaults to <literal>false</literal>.
<para>
@@ -1674,7 +1674,7 @@
<literal>Session</literal> associated with the current JTA transaction, one will
be started and associated with that JTA transaction the first time you call
<literal>sessionFactory.getCurrentSession()</literal>. The <literal>Session</literal>s
- retrieved via <literal>getCurrentSession()</literal> in the<literal>"jta"</literal> context
+ retrieved via <literal>getCurrentSession()</literal> in the <literal>"jta"</literal> context
are set to automatically flush before the transaction completes, close
after the transaction completes, and aggressively release JDBC connections
after each statement. This allows the <literal>Session</literal>s to
15 years, 3 months