[hibernate-commits] Hibernate SVN: r13959 - in search/trunk/src: java/org/hibernate/search/event and 2 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Wed Aug 29 14:47:43 EDT 2007


Author: epbernard
Date: 2007-08-29 14:47:43 -0400 (Wed, 29 Aug 2007)
New Revision: 13959

Added:
   search/trunk/src/test/org/hibernate/search/test/indexingStrategy/
   search/trunk/src/test/org/hibernate/search/test/indexingStrategy/ManualIndexingStrategyTest.java
Modified:
   search/trunk/src/java/org/hibernate/search/Environment.java
   search/trunk/src/java/org/hibernate/search/event/FullTextIndexEventListener.java
Log:
HSEARCH-111 ability to disable event based index updates

Modified: search/trunk/src/java/org/hibernate/search/Environment.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/Environment.java	2007-08-29 16:26:07 UTC (rev 13958)
+++ search/trunk/src/java/org/hibernate/search/Environment.java	2007-08-29 18:47:43 UTC (rev 13959)
@@ -12,6 +12,12 @@
 	public static final String AUTOREGISTER_LISTENERS = "hibernate.search.autoregister_listeners";
 
 	/**
+	 * Defines the indexing strategy, default <code>event</code>
+	 * Other options <code>manual</code>
+	 */
+	public static final String INDEXING_STRATEGY = "hibernate.search.indexing_strategy";
+
+	/**
 	 * Lucene analyser
 	 */
 	public static final String ANALYZER_CLASS = "hibernate.search.analyzer";

Modified: search/trunk/src/java/org/hibernate/search/event/FullTextIndexEventListener.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/event/FullTextIndexEventListener.java	2007-08-29 16:26:07 UTC (rev 13958)
+++ search/trunk/src/java/org/hibernate/search/event/FullTextIndexEventListener.java	2007-08-29 18:47:43 UTC (rev 13959)
@@ -19,6 +19,8 @@
 import org.hibernate.search.engine.DocumentBuilder;
 import org.hibernate.search.engine.SearchFactoryImplementor;
 import org.hibernate.search.impl.SearchFactoryImpl;
+import org.hibernate.search.Environment;
+import org.hibernate.search.SearchException;
 
 /**
  * This listener supports setting a parent directory for all generated index files.
@@ -40,7 +42,16 @@
 
 	public void initialize(Configuration cfg) {
 		searchFactoryImplementor = SearchFactoryImpl.getSearchFactory( cfg );
-		used = searchFactoryImplementor.getDocumentBuilders().size() != 0;
+		String indexingStrategy = cfg.getProperties().getProperty( Environment.INDEXING_STRATEGY, "event" );
+		if ( "event".equals( indexingStrategy ) ) {
+			used = searchFactoryImplementor.getDocumentBuilders().size() != 0;
+		}
+		else if ( "manual".equals( indexingStrategy ) ) {
+			used = false;
+		}
+		else {
+			throw new SearchException(Environment.INDEXING_STRATEGY + " unknown: " + indexingStrategy);
+		}
 	}
 
 	public SearchFactoryImplementor getSearchFactoryImplementor() {

Added: search/trunk/src/test/org/hibernate/search/test/indexingStrategy/ManualIndexingStrategyTest.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/indexingStrategy/ManualIndexingStrategyTest.java	                        (rev 0)
+++ search/trunk/src/test/org/hibernate/search/test/indexingStrategy/ManualIndexingStrategyTest.java	2007-08-29 18:47:43 UTC (rev 13959)
@@ -0,0 +1,64 @@
+//$Id$
+package org.hibernate.search.test.indexingStrategy;
+
+import org.apache.lucene.index.IndexReader;
+import org.hibernate.Session;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.search.test.AlternateDocument;
+import org.hibernate.search.test.Document;
+import org.hibernate.search.test.SearchTestCase;
+import org.hibernate.search.Environment;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ManualIndexingStrategyTest extends SearchTestCase {
+
+	public void testMultipleEntitiesPerIndex() throws Exception {
+
+
+		Session s = getSessions().openSession();
+		s.getTransaction().begin();
+		Document document =
+				new Document( "Hibernate in Action", "Object/relational mapping with Hibernate", "blah blah blah" );
+		s.persist( document );
+		s.flush();
+		s.persist(
+				new AlternateDocument( document.getId(), "Hibernate in Action", "Object/relational mapping with Hibernate", "blah blah blah" )
+		);
+		s.getTransaction().commit();
+		s.close();
+
+		assertEquals( 0, getDocumentNbr() );
+
+		s = getSessions().openSession();
+		s.getTransaction().begin();
+		s.delete( s.get( AlternateDocument.class, document.getId() ) );
+		s.delete( s.createCriteria( Document.class ).uniqueResult() );
+		s.getTransaction().commit();
+		s.close();
+	}
+
+	private int getDocumentNbr() throws Exception {
+		IndexReader reader = IndexReader.open( getDirectory( Document.class ) );
+		try {
+			return reader.numDocs();
+		}
+		finally {
+			reader.close();
+		}
+	}
+
+	protected Class[] getMappings() {
+		return new Class[] {
+				Document.class,
+				AlternateDocument.class
+		};
+	}
+
+
+	protected void configure(Configuration cfg) {
+		super.configure( cfg );
+		cfg.setProperty( Environment.INDEXING_STRATEGY, "manual" );
+	}
+}




More information about the hibernate-commits mailing list