[hibernate-commits] Hibernate SVN: r15362 - search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Tue Oct 21 12:20:59 EDT 2008
Author: sannegrinovero
Date: 2008-10-21 12:20:59 -0400 (Tue, 21 Oct 2008)
New Revision: 15362
Added:
search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works/DeleteExtWorkDelegate.java
Modified:
search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works/LuceneWorkVisitor.java
Log:
HSEARCH-225 resolved
Added: search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works/DeleteExtWorkDelegate.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works/DeleteExtWorkDelegate.java (rev 0)
+++ search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works/DeleteExtWorkDelegate.java 2008-10-21 16:20:59 UTC (rev 15362)
@@ -0,0 +1,84 @@
+package org.hibernate.search.backend.impl.lucene.works;
+
+import java.io.Serializable;
+
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.index.Term;
+import org.hibernate.annotations.common.AssertionFailure;
+import org.hibernate.search.SearchException;
+import org.hibernate.search.backend.LuceneWork;
+import org.hibernate.search.backend.Workspace;
+import org.hibernate.search.backend.impl.lucene.IndexInteractionType;
+import org.hibernate.search.engine.DocumentBuilder;
+import org.hibernate.search.util.LoggerFactory;
+import org.slf4j.Logger;
+
+/**
+ * Stateless extension of <code>DeleteLuceneWork</code>,
+ * performing the same LuceneWork in an optimal way in case
+ * the index is NOT shared across different entities
+ * (which is the default).
+ *
+ * @author Sanne Grinovero
+ * @see DeleteWorkDelegate
+ */
+public class DeleteExtWorkDelegate extends DeleteWorkDelegate {
+
+ private final Class managedType;
+ private final DocumentBuilder builder;
+ private final Logger log = LoggerFactory.make();
+
+ DeleteExtWorkDelegate(Workspace workspace) {
+ super( workspace );
+ if ( workspace.getEntitiesInDirectory().size() != 1 ) {
+ throw new AssertionFailure( "Can't use this delegate on shared indexes" );
+ }
+ managedType = workspace.getEntitiesInDirectory().iterator().next();
+ builder = workspace.getDocumentBuilder( managedType );
+ }
+
+ @Override
+ public IndexInteractionType getIndexInteractionType() {
+ // no particular reason to prefer Reader, just it's possibly more tested
+ // as using the writer is an option of latest Lucene version only (2.4).
+ return IndexInteractionType.PREFER_INDEXREADER;
+ }
+
+ @Override
+ public void performWork(LuceneWork work, IndexWriter writer) {
+ checkType( work );
+ Serializable id = work.getId();
+ log.trace( "Removing {}#{} by id using an IndexWriter.", managedType, id );
+ Term idTerm = builder.getTerm( id );
+ try {
+ writer.deleteDocuments( idTerm );
+ }
+ catch ( Exception e ) {
+ String message = "Unable to remove " + managedType + "#" + id + " from index.";
+ throw new SearchException( message, e );
+ }
+ }
+
+ @Override
+ public void performWork(LuceneWork work, IndexReader reader) {
+ checkType( work );
+ Serializable id = work.getId();
+ log.trace( "Removing {}#{} by id using an IndexReader.", managedType, id );
+ Term idTerm = builder.getTerm( id );
+ try {
+ reader.deleteDocuments( idTerm );
+ }
+ catch ( Exception e ) {
+ String message = "Unable to remove " + managedType + "#" + id + " from index.";
+ throw new SearchException( message, e );
+ }
+ }
+
+ private void checkType(final LuceneWork work) {
+ if ( work.getEntityClass() != managedType ) {
+ throw new AssertionFailure( "Unexpected type" );
+ }
+ }
+
+}
Property changes on: search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works/DeleteExtWorkDelegate.java
___________________________________________________________________
Name: svn:executable
+ *
Modified: search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works/LuceneWorkVisitor.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works/LuceneWorkVisitor.java 2008-10-21 16:18:08 UTC (rev 15361)
+++ search/trunk/src/java/org/hibernate/search/backend/impl/lucene/works/LuceneWorkVisitor.java 2008-10-21 16:20:59 UTC (rev 15362)
@@ -25,10 +25,15 @@
private final Workspace linkedWorkspace;
public LuceneWorkVisitor(Workspace workspace) {
+ if ( workspace.getEntitiesInDirectory().size() == 1 ) {
+ this.deleteDelegate = new DeleteExtWorkDelegate( workspace );
+ }
+ else {
+ this.deleteDelegate = new DeleteWorkDelegate( workspace );
+ }
+ this.purgeAllDelegate = new PurgeAllWorkDelegate();
this.addDelegate = new AddWorkDelegate( workspace );
- this.deleteDelegate = new DeleteWorkDelegate( workspace );
this.optimizeDelegate = new OptimizeWorkDelegate( workspace );
- this.purgeAllDelegate = new PurgeAllWorkDelegate();
this.linkedWorkspace = workspace;
}
More information about the hibernate-commits
mailing list