[hibernate-commits] Hibernate SVN: r19844 - in search/trunk/hibernate-search/src: test/java/org/hibernate/search/test/configuration and 1 other directory.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Mon Jun 28 14:47:57 EDT 2010


Author: epbernard
Date: 2010-06-28 14:47:57 -0400 (Mon, 28 Jun 2010)
New Revision: 19844

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/TransactionalWorker.java
   search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/configuration/ProgrammaticSearchMappingFactory.java
Log:
HSEARCH-552 Raise an exception when the object passed to the worker is not of an unindexed or contained type

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 18:46:57 UTC (rev 19843)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/BatchedQueueingProcessor.java	2010-06-28 18:47:57 UTC (rev 19844)
@@ -37,6 +37,7 @@
 
 import org.hibernate.annotations.common.AssertionFailure;
 import org.hibernate.search.Environment;
+import org.hibernate.search.SearchException;
 import org.hibernate.search.spi.WorkerBuildContext;
 import org.hibernate.search.backend.AddLuceneWork;
 import org.hibernate.search.backend.BackendQueueProcessorFactory;
@@ -268,7 +269,10 @@
 			containedInBuilder.addWorkToQueue(
 					entityClass, work.getEntity(), work.getId(), work.getType(), luceneQueue, searchFactoryImplementor
 			);
+			return;
 		}
+		//should never happen but better be safe than sorry
+		throw new SearchException( "Unable to perform work. Entity Class is not @Indexed nor hosts @ContainedIn: " + entityClass);
 	}
 
 	public void performWorks(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 18:46:57 UTC (rev 19843)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/backend/impl/TransactionalWorker.java	2010-06-28 18:47:57 UTC (rev 19844)
@@ -29,12 +29,15 @@
 
 import org.slf4j.Logger;
 
+import org.hibernate.search.SearchException;
+import org.hibernate.search.engine.SearchFactoryImplementor;
 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.util.HibernateHelper;
 import org.hibernate.search.util.LoggerFactory;
 import org.hibernate.search.util.WeakIdentityHashMap;
 
@@ -57,8 +60,14 @@
 	//synchronized map since for a given transaction, we have not concurrent access
 	protected final WeakIdentityHashMap<Object, Synchronization> synchronizationPerTransaction = new WeakIdentityHashMap<Object, Synchronization>();
 	private QueueingProcessor queueingProcessor;
+	private SearchFactoryImplementor factory;
 
-	public void performWork(Work work, TransactionContext transactionContext) {
+	public void performWork(Work<?> work, TransactionContext transactionContext) {
+		final Class<?> entityType = HibernateHelper.getClassFromWork( work );
+		if ( factory.getDocumentBuilderIndexedEntity( entityType ) == null
+					&& factory.getDocumentBuilderContainedEntity( entityType ) == null ) {
+			throw new SearchException( "Unable to perform work. Entity Class is not @Indexed nor hosts @ContainedIn: " + entityType);
+		}
 		if ( transactionContext.isTransactionInProgress() ) {
 			Object transactionIdentifier = transactionContext.getTransactionIdentifier();
 			PostTransactionWorkQueueSynchronization txSync = ( PostTransactionWorkQueueSynchronization )
@@ -86,6 +95,7 @@
 
 	public void initialize(Properties props, WorkerBuildContext context) {
 		this.queueingProcessor = new BatchedQueueingProcessor( context, props );
+		this.factory = context.getUninitializedSearchFactory();
 	}
 
 	public void close() {

Modified: search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/configuration/ProgrammaticSearchMappingFactory.java
===================================================================
--- search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/configuration/ProgrammaticSearchMappingFactory.java	2010-06-28 18:46:57 UTC (rev 19843)
+++ search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/configuration/ProgrammaticSearchMappingFactory.java	2010-06-28 18:47:57 UTC (rev 19844)
@@ -99,6 +99,7 @@
 					.property("items", ElementType.FIELD)
 						.indexEmbedded()
 				.entity(Item.class)
+					.indexed()
 					.property("description", ElementType.FIELD)
 						.field().name("description").analyzer("en").index(Index.TOKENIZED).store(Store.YES)
 					.property("productCatalog", ElementType.FIELD)



More information about the hibernate-commits mailing list