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" );
+ }
+}
Show replies by date