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)
Show replies by date