Hibernate SVN: r14332 - in search/trunk/src: java/org/hibernate/search/reader and 1 other directories.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2008-02-12 23:27:52 -0500 (Tue, 12 Feb 2008)
New Revision: 14332
Added:
search/trunk/src/java/org/hibernate/search/reader/CacheableMultiReader.java
search/trunk/src/test/org/hibernate/search/test/filter/ExcludeAllFilter.java
search/trunk/src/test/org/hibernate/search/test/filter/ExcludeAllFilterFactory.java
Removed:
search/trunk/src/java/org/hibernate/search/lucene/
Modified:
search/trunk/src/java/org/hibernate/search/reader/ReaderProviderHelper.java
search/trunk/src/java/org/hibernate/search/reader/SharedReaderProvider.java
search/trunk/src/test/org/hibernate/search/test/filter/Driver.java
search/trunk/src/test/org/hibernate/search/test/filter/FilterTest.java
Log:
HSEARCH-136 use an IndexReader that plays well with CachingWrapperFilter
Added: search/trunk/src/java/org/hibernate/search/reader/CacheableMultiReader.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/reader/CacheableMultiReader.java (rev 0)
+++ search/trunk/src/java/org/hibernate/search/reader/CacheableMultiReader.java 2008-02-13 04:27:52 UTC (rev 14332)
@@ -0,0 +1,44 @@
+//$
+package org.hibernate.search.reader;
+
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.MultiReader;
+
+/**
+ * MultiReader ensuring equals returns true if the underlying readers are the same (and in the same order)
+ * Especially useful when using {@link org.apache.lucene.search.CachingWrapperFilter}
+ *
+ * @author Emmanuel Bernard
+ */
+public class CacheableMultiReader extends MultiReader {
+
+ public CacheableMultiReader(IndexReader[] subReaders) {
+ super( subReaders );
+ }
+
+ public CacheableMultiReader(IndexReader[] subReaders, boolean closeSubReaders) {
+ super( subReaders, closeSubReaders );
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if ( this == obj ) return true;
+ if ( ! ( obj instanceof CacheableMultiReader ) ) return false;
+ CacheableMultiReader that = ( CacheableMultiReader ) obj;
+ int length = this.subReaders.length;
+ if ( length != that.subReaders.length ) return false;
+ for (int index = 0 ; index < length ; index++) {
+ if ( ! this.subReaders[index].equals( that.subReaders[index] ) ) return false;
+ }
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = 0;
+ for (Object reader : this.subReaders) {
+ result = 31*result + reader.hashCode();
+ }
+ return result;
+ }
+}
Modified: search/trunk/src/java/org/hibernate/search/reader/ReaderProviderHelper.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/reader/ReaderProviderHelper.java 2008-02-12 17:02:10 UTC (rev 14331)
+++ search/trunk/src/java/org/hibernate/search/reader/ReaderProviderHelper.java 2008-02-13 04:27:52 UTC (rev 14332)
@@ -19,7 +19,7 @@
//everything should be the same so wrap in an MultiReader
//return readers[0];
try {
- return new MultiReader( readers );
+ return new CacheableMultiReader( readers );
}
catch (Exception e) {
//Lucene 2.2 used to through IOExceptions here
@@ -29,7 +29,7 @@
}
else {
try {
- return new MultiReader( readers );
+ return new CacheableMultiReader( readers );
}
catch (Exception e) {
//Lucene 2.2 used to through IOExceptions here
Modified: search/trunk/src/java/org/hibernate/search/reader/SharedReaderProvider.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/reader/SharedReaderProvider.java 2008-02-12 17:02:10 UTC (rev 14331)
+++ search/trunk/src/java/org/hibernate/search/reader/SharedReaderProvider.java 2008-02-13 04:27:52 UTC (rev 14332)
@@ -206,6 +206,7 @@
boolean trace = log.isTraceEnabled();
if ( reader == null ) return;
IndexReader[] readers;
+ //TODO should it be CacheableMultiReader? Probably no
if ( reader instanceof MultiReader ) {
try {
readers = (IndexReader[]) subReadersField.get( reader );
Modified: search/trunk/src/test/org/hibernate/search/test/filter/Driver.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/filter/Driver.java 2008-02-12 17:02:10 UTC (rev 14331)
+++ search/trunk/src/test/org/hibernate/search/test/filter/Driver.java 2008-02-13 04:27:52 UTC (rev 14332)
@@ -21,7 +21,8 @@
@Indexed
@FullTextFilterDefs( {
@FullTextFilterDef(name = "bestDriver", impl = BestDriversFilter.class), //actual Filter implementation
- @FullTextFilterDef(name = "security", impl = SecurityFilterFactory.class) //Filter factory with parameters
+ @FullTextFilterDef(name = "security", impl = SecurityFilterFactory.class), //Filter factory with parameters
+ @FullTextFilterDef(name = "cachetest", impl = ExcludeAllFilterFactory.class, cache = true) //Filter factory with parameters
})
public class Driver {
@Id
Added: search/trunk/src/test/org/hibernate/search/test/filter/ExcludeAllFilter.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/filter/ExcludeAllFilter.java (rev 0)
+++ search/trunk/src/test/org/hibernate/search/test/filter/ExcludeAllFilter.java 2008-02-13 04:27:52 UTC (rev 14332)
@@ -0,0 +1,22 @@
+//$
+package org.hibernate.search.test.filter;
+
+import java.util.BitSet;
+import java.io.IOException;
+
+import org.apache.lucene.search.Filter;
+import org.apache.lucene.index.IndexReader;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ExcludeAllFilter extends Filter {
+ private static boolean done = false;
+
+ public BitSet bits(IndexReader reader) throws IOException {
+ if (done) throw new IllegalStateException("Called twice");
+ BitSet bitSet = new BitSet( reader.maxDoc() );
+ done = true;
+ return bitSet;
+ }
+}
Added: search/trunk/src/test/org/hibernate/search/test/filter/ExcludeAllFilterFactory.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/filter/ExcludeAllFilterFactory.java (rev 0)
+++ search/trunk/src/test/org/hibernate/search/test/filter/ExcludeAllFilterFactory.java 2008-02-13 04:27:52 UTC (rev 14332)
@@ -0,0 +1,16 @@
+//$
+package org.hibernate.search.test.filter;
+
+import org.apache.lucene.search.CachingWrapperFilter;
+import org.apache.lucene.search.Filter;
+import org.hibernate.search.annotations.Factory;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class ExcludeAllFilterFactory {
+ @Factory
+ public Filter getFilter() {
+ return new CachingWrapperFilter( new ExcludeAllFilter() );
+ }
+}
Modified: search/trunk/src/test/org/hibernate/search/test/filter/FilterTest.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/filter/FilterTest.java 2008-02-12 17:02:10 UTC (rev 14331)
+++ search/trunk/src/test/org/hibernate/search/test/filter/FilterTest.java 2008-02-13 04:27:52 UTC (rev 14332)
@@ -55,6 +55,35 @@
deleteData();
}
+ public void testCache() {
+ createData();
+ FullTextSession s = Search.createFullTextSession( openSession( ) );
+ s.getTransaction().begin();
+ BooleanQuery query = new BooleanQuery();
+ query.add( new TermQuery( new Term("teacher", "andre") ), BooleanClause.Occur.SHOULD );
+ query.add( new TermQuery( new Term("teacher", "max") ), BooleanClause.Occur.SHOULD );
+ query.add( new TermQuery( new Term("teacher", "aaron") ), BooleanClause.Occur.SHOULD );
+ FullTextQuery ftQuery = s.createFullTextQuery( query, Driver.class );
+ assertEquals("No filter should happen", 3, ftQuery.getResultSize() );
+
+ ftQuery = s.createFullTextQuery( query, Driver.class );
+ ftQuery.enableFullTextFilter( "cachetest");
+ assertEquals("Should filter out all", 0, ftQuery.getResultSize() );
+
+ ftQuery = s.createFullTextQuery( query, Driver.class );
+ ftQuery.enableFullTextFilter( "cachetest");
+ try {
+ ftQuery.getResultSize();
+ }
+ catch (IllegalStateException e) {
+ fail("Cache does not work");
+ }
+
+ s.getTransaction().commit();
+ s.close();
+ deleteData();
+ }
+
public void testStraightFilters() {
createData();
FullTextSession s = Search.createFullTextSession( openSession( ) );
16 years, 11 months
Hibernate SVN: r14331 - in search/trunk/src: java/org/hibernate/search/engine and 1 other directories.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2008-02-12 12:02:10 -0500 (Tue, 12 Feb 2008)
New Revision: 14331
Modified:
search/trunk/src/java/org/hibernate/search/ProjectionConstants.java
search/trunk/src/java/org/hibernate/search/engine/DocumentExtractor.java
search/trunk/src/test/org/hibernate/search/test/query/ProjectionQueryTest.java
Log:
HSEARCH-147 project Lucene document id
Modified: search/trunk/src/java/org/hibernate/search/ProjectionConstants.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/ProjectionConstants.java 2008-02-12 16:06:21 UTC (rev 14330)
+++ search/trunk/src/java/org/hibernate/search/ProjectionConstants.java 2008-02-12 17:02:10 UTC (rev 14331)
@@ -28,6 +28,11 @@
*/
public String ID = "__HSearch_id";
/**
+ * Lucene Document id
+ * Expert: Lucene document id can change overtime between 2 different IndexReader opening.
+ */
+ public String DOCUMENT_ID = "__HSearch_DocumentId";
+ /**
* Object class
*/
//TODO OBJECT CLASS
Modified: search/trunk/src/java/org/hibernate/search/engine/DocumentExtractor.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/engine/DocumentExtractor.java 2008-02-12 16:06:21 UTC (rev 14330)
+++ search/trunk/src/java/org/hibernate/search/engine/DocumentExtractor.java 2008-02-12 17:02:10 UTC (rev 14331)
@@ -51,6 +51,9 @@
else if ( ProjectionConstants.DOCUMENT.equals( projection[x] ) ) {
eip[x] = doc;
}
+ else if ( ProjectionConstants.DOCUMENT_ID.equals( projection[x] ) ) {
+ eip[x] = hits.id( index );
+ }
else if ( ProjectionConstants.BOOST.equals( projection[x] ) ) {
eip[x] = doc.getBoost();
}
Modified: search/trunk/src/test/org/hibernate/search/test/query/ProjectionQueryTest.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/query/ProjectionQueryTest.java 2008-02-12 16:06:21 UTC (rev 14330)
+++ search/trunk/src/test/org/hibernate/search/test/query/ProjectionQueryTest.java 2008-02-12 17:02:10 UTC (rev 14331)
@@ -185,7 +185,8 @@
Query query = parser.parse( "dept:ITech" );
org.hibernate.search.FullTextQuery hibQuery = s.createFullTextQuery( query, Employee.class );
- hibQuery.setProjection( "id", "lastname", "dept", FullTextQuery.THIS, FullTextQuery.SCORE, FullTextQuery.BOOST, FullTextQuery.DOCUMENT, FullTextQuery.ID );
+ hibQuery.setProjection( "id", "lastname", "dept", FullTextQuery.THIS, FullTextQuery.SCORE, FullTextQuery.BOOST,
+ FullTextQuery.DOCUMENT, FullTextQuery.ID );
int counter = 0;
@@ -219,7 +220,8 @@
Query query = parser.parse( "dept:Accounting" );
org.hibernate.search.FullTextQuery hibQuery = s.createFullTextQuery( query, Employee.class );
- hibQuery.setProjection( "id", "lastname", "dept", FullTextQuery.THIS, FullTextQuery.SCORE, FullTextQuery.BOOST, FullTextQuery.DOCUMENT, FullTextQuery.ID );
+ hibQuery.setProjection( "id", "lastname", "dept", FullTextQuery.THIS, FullTextQuery.SCORE, FullTextQuery.BOOST,
+ FullTextQuery.DOCUMENT, FullTextQuery.ID, FullTextQuery.DOCUMENT_ID );
List result = hibQuery.list();
assertNotNull( result );
@@ -236,9 +238,11 @@
assertTrue( "DOCUMENT incorrect", projection[6] instanceof Document );
assertEquals( "DOCUMENT size incorrect", 4, ( (Document) projection[6] ).getFields().size() );
assertEquals( "ID incorrect", 1001, projection[7] );
+ assertNotNull( "Lucene internal doc id", projection[8] );
// Change the projection order and null one
- hibQuery.setProjection( FullTextQuery.DOCUMENT, FullTextQuery.THIS, FullTextQuery.SCORE, null, FullTextQuery.ID, "id", "lastname", "dept" );
+ hibQuery.setProjection( FullTextQuery.DOCUMENT, FullTextQuery.THIS, FullTextQuery.SCORE, null, FullTextQuery.ID,
+ "id", "lastname", "dept", FullTextQuery.DOCUMENT_ID );
result = hibQuery.list();
assertNotNull( result );
@@ -255,6 +259,7 @@
assertEquals( "id incorrect", 1001, projection[5] );
assertEquals( "last name incorrect", "Jackson", projection[6] );
assertEquals( "dept incorrect", "Accounting", projection[7] );
+ assertNotNull( "Lucene internal doc id", projection[8] );
//cleanup
for (Object element : s.createQuery( "from " + Employee.class.getName() ).list()) s.delete( element );
16 years, 11 months
Hibernate SVN: r14330 - in search/trunk/src: java/org/hibernate/search/engine and 1 other directories.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2008-02-12 11:06:21 -0500 (Tue, 12 Feb 2008)
New Revision: 14330
Added:
search/trunk/src/test/org/hibernate/search/test/embedded/Person.java
Modified:
search/trunk/src/java/org/hibernate/search/annotations/IndexedEmbedded.java
search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java
search/trunk/src/test/org/hibernate/search/test/embedded/Address.java
search/trunk/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java
search/trunk/src/test/org/hibernate/search/test/embedded/Owner.java
Log:
HSEARCH-125 support for targetElement
Modified: search/trunk/src/java/org/hibernate/search/annotations/IndexedEmbedded.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/annotations/IndexedEmbedded.java 2008-02-11 05:18:30 UTC (rev 14329)
+++ search/trunk/src/java/org/hibernate/search/annotations/IndexedEmbedded.java 2008-02-12 16:06:21 UTC (rev 14330)
@@ -28,4 +28,9 @@
* Default: infinite (an exception will be raised in case of class circular reference when infinite is chosen)
*/
int depth() default Integer.MAX_VALUE;
+
+ /**
+ * Overrides the type of an association. If a collection, overrides the type of the collection generics
+ */
+ Class targetElement() default void.class;
}
Modified: search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java 2008-02-11 05:18:30 UTC (rev 14329)
+++ search/trunk/src/java/org/hibernate/search/engine/DocumentBuilder.java 2008-02-12 16:06:21 UTC (rev 14330)
@@ -240,7 +240,13 @@
maxLevel = potentialLevel > maxLevel ? maxLevel : potentialLevel;
level++;
- XClass elementClass = member.getElementClass();
+ XClass elementClass;
+ if ( void.class == embeddedAnn.targetElement() ) {
+ elementClass = member.getElementClass();
+ }
+ else {
+ elementClass = reflectionManager.toXClass( embeddedAnn.targetElement() );
+ }
if ( maxLevel == Integer.MAX_VALUE //infinite
&& processedClasses.contains( elementClass ) ) {
throw new SearchException(
Modified: search/trunk/src/test/org/hibernate/search/test/embedded/Address.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/embedded/Address.java 2008-02-11 05:18:30 UTC (rev 14329)
+++ search/trunk/src/test/org/hibernate/search/test/embedded/Address.java 2008-02-12 16:06:21 UTC (rev 14330)
@@ -16,6 +16,7 @@
import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.IndexedEmbedded;
+import org.hibernate.annotations.Target;
/**
* @author Emmanuel Bernard
@@ -32,8 +33,9 @@
@Field(index= Index.TOKENIZED)
private String street;
- @IndexedEmbedded(depth = 1, prefix = "ownedBy_")
- private Owner ownedBy;
+ @IndexedEmbedded(depth = 1, prefix = "ownedBy_", targetElement = Owner.class)
+ @Target(Owner.class)
+ private Person ownedBy;
@OneToMany(mappedBy = "address")
@ContainedIn
@@ -68,11 +70,11 @@
this.street = street;
}
- public Owner getOwnedBy() {
+ public Person getOwnedBy() {
return ownedBy;
}
- public void setOwnedBy(Owner ownedBy) {
+ public void setOwnedBy(Person ownedBy) {
this.ownedBy = ownedBy;
}
Modified: search/trunk/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java 2008-02-11 05:18:30 UTC (rev 14329)
+++ search/trunk/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java 2008-02-12 16:06:21 UTC (rev 14330)
@@ -31,7 +31,7 @@
a.setStreet( "Tower place" );
a.getTowers().add( tower );
tower.setAddress( a );
- Owner o = new Owner();
+ Person o = new Owner();
o.setName( "Atlanta Renting corp" );
a.setOwnedBy( o );
o.setAddress( a );
@@ -99,7 +99,7 @@
a.setStreet( "Tower place" );
a.getTowers().add( tower );
tower.setAddress( a );
- Owner o = new Owner();
+ Person o = new Owner();
o.setName( "Atlanta Renting corp" );
a.setOwnedBy( o );
o.setAddress( a );
Modified: search/trunk/src/test/org/hibernate/search/test/embedded/Owner.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/embedded/Owner.java 2008-02-11 05:18:30 UTC (rev 14329)
+++ search/trunk/src/test/org/hibernate/search/test/embedded/Owner.java 2008-02-12 16:06:21 UTC (rev 14330)
@@ -12,7 +12,7 @@
* @author Emmanuel Bernard
*/
@Embeddable
-public class Owner {
+public class Owner implements Person {
@Field(index = Index.TOKENIZED)
private String name;
Added: search/trunk/src/test/org/hibernate/search/test/embedded/Person.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/embedded/Person.java (rev 0)
+++ search/trunk/src/test/org/hibernate/search/test/embedded/Person.java 2008-02-12 16:06:21 UTC (rev 14330)
@@ -0,0 +1,15 @@
+//$
+package org.hibernate.search.test.embedded;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface Person {
+ public String getName();
+
+ public void setName(String name);
+
+ public Address getAddress();
+
+ public void setAddress(Address address);
+}
16 years, 11 months
Hibernate SVN: r14329 - in search/trunk: src/java/org/hibernate/search and 1 other directories.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2008-02-11 00:18:30 -0500 (Mon, 11 Feb 2008)
New Revision: 14329
Modified:
search/trunk/build.xml
search/trunk/ivy.xml
search/trunk/src/java/org/hibernate/search/Version.java
search/trunk/src/java/org/hibernate/search/store/FSDirectoryProvider.java
search/trunk/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java
search/trunk/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java
Log:
HSEARCH-130 better log info on Directory creation
Modified: search/trunk/build.xml
===================================================================
--- search/trunk/build.xml 2008-02-11 04:55:53 UTC (rev 14328)
+++ search/trunk/build.xml 2008-02-11 05:18:30 UTC (rev 14329)
@@ -17,7 +17,7 @@
<!-- Name of project and version, used to create filenames -->
<property name="Name" value="Hibernate Search"/>
<property name="name" value="hibernate-search"/>
- <property name="version" value="3.0.0.GA"/>
+ <property name="version" value="3.0.1.SNAPSHOT-20080202"/>
<property name="javadoc.packagenames" value="org.hibernate.search.*"/>
<property name="copy.test" value="true"/>
<property name="javac.source" value="1.5"/>
Modified: search/trunk/ivy.xml
===================================================================
--- search/trunk/ivy.xml 2008-02-11 04:55:53 UTC (rev 14328)
+++ search/trunk/ivy.xml 2008-02-11 05:18:30 UTC (rev 14329)
@@ -15,5 +15,6 @@
<dependency name="jpa-api" rev="1.0.0.GA" conf="core->default"/>
<dependency name="commons-annotations" rev="3.0.0.GA" conf="core->core"/>
<dependency name="entitymanager" rev="3.3.1.GA" conf="test->core"/>
+ <dependency name="annotations" rev="latest" conf="test->core"/>
</dependencies>
</ivy-module>
\ No newline at end of file
Modified: search/trunk/src/java/org/hibernate/search/Version.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/Version.java 2008-02-11 04:55:53 UTC (rev 14328)
+++ search/trunk/src/java/org/hibernate/search/Version.java 2008-02-11 05:18:30 UTC (rev 14329)
@@ -10,7 +10,7 @@
* @author Emmanuel Bernard
*/
public class Version {
- public static final String VERSION = "3.0.0.GA"; // + new Date();
+ public static final String VERSION = "3.0.1.SNAPSHOT-20080202"; // + new Date();
private static Log log = LogFactory.getLog( Version.class );
static {
Modified: search/trunk/src/java/org/hibernate/search/store/FSDirectoryProvider.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/store/FSDirectoryProvider.java 2008-02-11 04:55:53 UTC (rev 14328)
+++ search/trunk/src/java/org/hibernate/search/store/FSDirectoryProvider.java 2008-02-11 05:18:30 UTC (rev 14329)
@@ -8,6 +8,8 @@
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.FSDirectory;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.logging.Log;
import org.hibernate.HibernateException;
import org.hibernate.search.util.DirectoryProviderHelper;
import org.hibernate.search.engine.SearchFactoryImplementor;
@@ -21,6 +23,7 @@
* @author Sylvain Vieujot
*/
public class FSDirectoryProvider implements DirectoryProvider<FSDirectory> {
+ private static Log log = LogFactory.getLog( FSDirectoryProvider.class );
private FSDirectory directory;
private String indexName;
@@ -28,10 +31,15 @@
File indexDir = DirectoryProviderHelper.determineIndexDir( directoryProviderName, properties );
try {
boolean create = !indexDir.exists();
+ if (create) {
+ log.debug( "index directory not found, creating: '" + indexDir.getAbsolutePath() + "'" );
+ indexDir.mkdirs();
+ }
indexName = indexDir.getCanonicalPath();
directory = FSDirectory.getDirectory( indexName );
//this is cheap so it's not done in start()
if ( create ) {
+ log.debug( "Initialize index: '" + indexName + "'" );
IndexWriter iw = new IndexWriter( directory, new StandardAnalyzer(), create );
iw.close();
}
Modified: search/trunk/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java 2008-02-11 04:55:53 UTC (rev 14328)
+++ search/trunk/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java 2008-02-11 05:18:30 UTC (rev 14329)
@@ -59,12 +59,13 @@
try {
boolean create = !indexDir.exists();
if (create) {
- log.debug( "Index directory '" + indexName + "' will be initialized");
+ log.debug( "index directory not found, creating: '" + indexDir.getAbsolutePath() + "'" );
indexDir.mkdirs();
}
indexName = indexDir.getCanonicalPath();
directory = FSDirectory.getDirectory( indexName);
if ( create ) {
+ log.debug( "Initialize index: '" + indexName + "'" );
IndexWriter iw = new IndexWriter( directory, new StandardAnalyzer(), create );
iw.close();
}
Modified: search/trunk/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java 2008-02-11 04:55:53 UTC (rev 14328)
+++ search/trunk/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java 2008-02-11 05:18:30 UTC (rev 14329)
@@ -60,11 +60,11 @@
log.debug( "Index directory: " + indexDir.getPath() );
try {
boolean create = !indexDir.exists();
- indexName = indexDir.getCanonicalPath();
if (create) {
+ log.debug( "index directory not found, creating: '" + indexDir.getAbsolutePath() + "'" );
indexDir.mkdirs();
- log.debug("Initializing index directory " + indexName);
}
+ indexName = indexDir.getCanonicalPath();
}
catch (IOException e) {
throw new HibernateException( "Unable to initialize index: " + directoryProviderName, e );
@@ -84,6 +84,7 @@
create = ! subDir.exists();
directory1 = FSDirectory.getDirectory( subDir.getCanonicalPath());
if ( create ) {
+ log.debug( "Initialize index: '" + subDir.getAbsolutePath() + "'" );
IndexWriter iw = new IndexWriter( directory1, new StandardAnalyzer(), create );
iw.close();
}
@@ -92,6 +93,7 @@
create = ! subDir.exists();
directory2 = FSDirectory.getDirectory( subDir.getCanonicalPath());
if ( create ) {
+ log.debug( "Initialize index: '" + subDir.getAbsolutePath() + "'" );
IndexWriter iw = new IndexWriter( directory2, new StandardAnalyzer(), create );
iw.close();
}
16 years, 12 months
Hibernate SVN: r14328 - search/trunk/src/java/org/hibernate/search/util.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2008-02-10 23:55:53 -0500 (Sun, 10 Feb 2008)
New Revision: 14328
Modified:
search/trunk/src/java/org/hibernate/search/util/DirectoryProviderHelper.java
Log:
HSEARCH-126 better error report when directory cannot be written
Modified: search/trunk/src/java/org/hibernate/search/util/DirectoryProviderHelper.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/util/DirectoryProviderHelper.java 2008-02-11 04:47:29 UTC (rev 14327)
+++ search/trunk/src/java/org/hibernate/search/util/DirectoryProviderHelper.java 2008-02-11 04:55:53 UTC (rev 14328)
@@ -75,7 +75,7 @@
String indexName = properties.getProperty( "indexName", directoryProviderName );
File indexDir = new File( indexBase );
if ( ! indexDir.exists() ) {
- //if the base directory does not exists, create it
+ //if the base directory does not exist, create it
//we do not fear concurrent creation since mkdir does not raise exceptions
indexDir.mkdirs();
}
@@ -83,7 +83,8 @@
throw new SearchException( MessageFormat.format( "Index directory is not a directory: {0}", indexBase ) );
}
if ( !indexDir.canWrite() ) {
- throw new SearchException( "Cannot write into index directory: " + indexBase );
+ throw new SearchException( "Cannot write into index directory: "
+ + ( indexDir.isAbsolute() ? indexBase : indexDir.getAbsolutePath() ) );
}
indexDir = new File( indexDir, indexName );
16 years, 12 months
Hibernate SVN: r14327 - in search/trunk: src/java/org/hibernate/search/reader and 1 other directory.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2008-02-10 23:47:29 -0500 (Sun, 10 Feb 2008)
New Revision: 14327
Added:
search/trunk/lib/lucene-core-2.3.0.jar
Removed:
search/trunk/lib/lucene-core-2.2.0.jar
Modified:
search/trunk/lib/README.txt
search/trunk/src/java/org/hibernate/search/reader/ReaderProviderHelper.java
Log:
HSEARCH-150 Upgrade to Lucene 2.3
Modified: search/trunk/lib/README.txt
===================================================================
--- search/trunk/lib/README.txt 2008-02-10 19:58:01 UTC (rev 14326)
+++ search/trunk/lib/README.txt 2008-02-11 04:47:29 UTC (rev 14327)
@@ -6,7 +6,7 @@
hibernate-commons-annotations.jar: required
hibernate3.jar: required
hibernate core dependencies: required (see Hibernate Core for more information)
-lucene-core-*.jar: required (used version 2.2.0)
+lucene-core-*.jar: required (used version 2.3.0)
jms.jar: optional (needed for JMS based clustering strategy, usually available with your application server)
Test
Deleted: search/trunk/lib/lucene-core-2.2.0.jar
===================================================================
(Binary files differ)
Added: search/trunk/lib/lucene-core-2.3.0.jar
===================================================================
(Binary files differ)
Property changes on: search/trunk/lib/lucene-core-2.3.0.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: search/trunk/src/java/org/hibernate/search/reader/ReaderProviderHelper.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/reader/ReaderProviderHelper.java 2008-02-10 19:58:01 UTC (rev 14326)
+++ search/trunk/src/java/org/hibernate/search/reader/ReaderProviderHelper.java 2008-02-11 04:47:29 UTC (rev 14327)
@@ -21,18 +21,20 @@
try {
return new MultiReader( readers );
}
- catch (IOException e) {
+ catch (Exception e) {
+ //Lucene 2.2 used to through IOExceptions here
clean( new SearchException( "Unable to open a MultiReader", e ), readers );
- return null; //never happen, but please the compiler
+ return null; //never happens, but please the compiler
}
}
else {
try {
return new MultiReader( readers );
}
- catch (IOException e) {
+ catch (Exception e) {
+ //Lucene 2.2 used to through IOExceptions here
clean( new SearchException( "Unable to open a MultiReader", e ), readers );
- return null; //never happen, but please the compiler
+ return null; //never happens, but please the compiler
}
}
}
16 years, 12 months
Hibernate SVN: r14326 - in search/trunk/src: test/org/hibernate/search/test/embedded and 1 other directory.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2008-02-10 14:58:01 -0500 (Sun, 10 Feb 2008)
New Revision: 14326
Modified:
search/trunk/src/java/org/hibernate/search/event/FullTextIndexCollectionEventListener.java
search/trunk/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java
Log:
HSEARCH-56
Modified: search/trunk/src/java/org/hibernate/search/event/FullTextIndexCollectionEventListener.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/event/FullTextIndexCollectionEventListener.java 2008-02-10 19:56:04 UTC (rev 14325)
+++ search/trunk/src/java/org/hibernate/search/event/FullTextIndexCollectionEventListener.java 2008-02-10 19:58:01 UTC (rev 14326)
@@ -10,7 +10,11 @@
import org.hibernate.event.PostCollectionRemoveEvent;
import org.hibernate.event.PostCollectionUpdateEvent;
import org.hibernate.event.AbstractEvent;
+import org.hibernate.event.AbstractCollectionEvent;
import org.hibernate.search.backend.WorkType;
+import org.hibernate.engine.EntityEntry;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
/**
* Support collection event listening (starts from hibernate core 3.2.6)
@@ -22,28 +26,45 @@
implements PostCollectionRecreateEventListener,
PostCollectionRemoveEventListener,
PostCollectionUpdateEventListener {
+ private static Log log = LogFactory.getLog( FullTextIndexCollectionEventListener.class );
+
public void onPostRecreateCollection(PostCollectionRecreateEvent event) {
- Object entity = event.getAffectedOwner();
+ processCollectionEvent( event );
+ }
+
+ private void processCollectionEvent(AbstractCollectionEvent event) {
+ Object entity = event.getAffectedOwnerOrNull();
+ if ( entity == null ) {
+ //Hibernate cannot determine every single time the owner especially incase detached objects are involved
+ // or property-ref is used
+ //Should log really but we don't know if we're interested in this collection for indexing
+ return;
+ }
if ( used && searchFactoryImplementor.getDocumentBuilders().containsKey( entity.getClass() ) ) {
- processWork( entity, getId( entity, event ), WorkType.COLLECTION, event );
+ Serializable id = getId( entity, event );
+ if (id == null) {
+ log.warn( "Unable to reindex entity on collection change, id cannot be extracted: " + event.getAffectedOwnerEntityName() );
+ return;
+ }
+ processWork( entity, id, WorkType.COLLECTION, event );
}
}
- private Serializable getId(Object entity, AbstractEvent event) {
- return event.getSession().getPersistenceContext().getEntry( entity ).getId();
+ private Serializable getId(Object entity, AbstractCollectionEvent event) {
+ Serializable id = event.getAffectedOwnerIdOrNull();
+ if ( id == null ) {
+ //most likely this recovery is unnecessary since Hibernate Core probably try that
+ EntityEntry entityEntry = event.getSession().getPersistenceContext().getEntry( entity );
+ id = entityEntry == null ? null : entityEntry.getId();
+ }
+ return id;
}
public void onPostRemoveCollection(PostCollectionRemoveEvent event) {
- Object entity = event.getAffectedOwner();
- if ( used && searchFactoryImplementor.getDocumentBuilders().containsKey( entity.getClass() ) ) {
- processWork( entity, getId( entity, event ), WorkType.COLLECTION, event );
- }
+ processCollectionEvent( event );
}
public void onPostUpdateCollection(PostCollectionUpdateEvent event) {
- Object entity = event.getAffectedOwner();
- if ( used && searchFactoryImplementor.getDocumentBuilders().containsKey( entity.getClass() ) ) {
- processWork( entity, getId( entity, event ), WorkType.COLLECTION, event );
- }
+ processCollectionEvent( event );
}
}
Modified: search/trunk/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java 2008-02-10 19:56:04 UTC (rev 14325)
+++ search/trunk/src/test/org/hibernate/search/test/embedded/EmbeddedTest.java 2008-02-10 19:58:01 UTC (rev 14326)
@@ -152,7 +152,7 @@
}
- public void testIndexedEmbeddedAndCollectionsFailureExpected() throws Exception {
+ public void testIndexedEmbeddedAndCollections() throws Exception {
Author a = new Author();
a.setName( "Voltaire" );
Author a2 = new Author();
@@ -238,9 +238,9 @@
protected void configure(org.hibernate.cfg.Configuration cfg) {
super.configure( cfg );
FullTextIndexCollectionEventListener del = new FullTextIndexCollectionEventListener();
- cfg.getEventListeners().setPostCollectionRecreateEventListeners( new PostCollectionRecreateEventListener[]{del} );
- cfg.getEventListeners().setPostCollectionUpdateEventListeners( new PostCollectionUpdateEventListener[]{del} );
- cfg.getEventListeners().setPostCollectionRemoveEventListeners( new PostCollectionRemoveEventListener[]{del} );
+ //cfg.getEventListeners().setPostCollectionRecreateEventListeners( new PostCollectionRecreateEventListener[]{del} );
+ //cfg.getEventListeners().setPostCollectionUpdateEventListeners( new PostCollectionUpdateEventListener[]{del} );
+ //cfg.getEventListeners().setPostCollectionRemoveEventListeners( new PostCollectionRemoveEventListener[]{del} );
}
protected Class[] getMappings() {
16 years, 12 months
Hibernate SVN: r14325 - in annotations/trunk/src/java/org/hibernate/cfg: search and 1 other directory.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2008-02-10 14:56:04 -0500 (Sun, 10 Feb 2008)
New Revision: 14325
Added:
annotations/trunk/src/java/org/hibernate/cfg/search/
annotations/trunk/src/java/org/hibernate/cfg/search/CollectionSearchConfiguration.java
annotations/trunk/src/java/org/hibernate/cfg/search/SearchConfiguration.java
Modified:
annotations/trunk/src/java/org/hibernate/cfg/AnnotationConfiguration.java
Log:
ANN-695 add HSearch collection event listeners
Modified: annotations/trunk/src/java/org/hibernate/cfg/AnnotationConfiguration.java
===================================================================
--- annotations/trunk/src/java/org/hibernate/cfg/AnnotationConfiguration.java 2008-02-07 03:51:18 UTC (rev 14324)
+++ annotations/trunk/src/java/org/hibernate/cfg/AnnotationConfiguration.java 2008-02-10 19:56:04 UTC (rev 14325)
@@ -40,11 +40,13 @@
import org.hibernate.annotations.common.reflection.XClass;
import org.hibernate.cfg.annotations.Version;
import org.hibernate.cfg.annotations.reflection.EJB3ReflectionManager;
+import org.hibernate.cfg.search.SearchConfiguration;
import org.hibernate.event.PostDeleteEventListener;
import org.hibernate.event.PostInsertEventListener;
import org.hibernate.event.PostUpdateEventListener;
import org.hibernate.event.PreInsertEventListener;
import org.hibernate.event.PreUpdateEventListener;
+import org.hibernate.event.EventListeners;
import org.hibernate.mapping.Column;
import org.hibernate.mapping.Join;
import org.hibernate.mapping.PersistentClass;
@@ -821,104 +823,13 @@
}
}
}
+ SearchConfiguration.enableHibernateSearch( getEventListeners(), getProperties() );
- //add search events if the jar is available
- boolean enableSearchListeners = !"false".equalsIgnoreCase( getProperty( "hibernate.search.autoregister_listeners" ) );
- Class searchEventListenerClass = null;
- try {
- searchEventListenerClass = ReflectHelper.classForName(
- "org.hibernate.search.event.FullTextIndexEventListener",
- AnnotationConfiguration.class );
- }
- catch (ClassNotFoundException e) {
- //search is not present
- log.debug( "Search not present in classpath, ignoring event listener registration" );
- }
- if ( enableSearchListeners && searchEventListenerClass != null ) {
- //TODO so much duplication
- Object searchEventListener;
- try {
- searchEventListener = searchEventListenerClass.newInstance();
- }
- catch (Exception e) {
- throw new AnnotationException( "Unable to load Search event listener", e );
- }
- {
- boolean present = false;
- PostInsertEventListener[] listeners = getEventListeners().getPostInsertEventListeners();
- if ( listeners != null ) {
- for (Object eventListener : listeners) {
- //not isAssignableFrom since the user could subclass
- present = present || searchEventListenerClass == eventListener.getClass();
- }
- if ( !present ) {
- int length = listeners.length + 1;
- PostInsertEventListener[] newListeners = new PostInsertEventListener[length];
- for (int i = 0; i < length - 1; i++) {
- newListeners[i] = listeners[i];
- }
- newListeners[length - 1] = (PostInsertEventListener) searchEventListener;
- getEventListeners().setPostInsertEventListeners( newListeners );
- }
- }
- else {
- getEventListeners().setPostInsertEventListeners(
- new PostInsertEventListener[] { (PostInsertEventListener) searchEventListener }
- );
- }
- }
- {
- boolean present = false;
- PostUpdateEventListener[] listeners = getEventListeners().getPostUpdateEventListeners();
- if ( listeners != null ) {
- for (Object eventListener : listeners) {
- //not isAssignableFrom since the user could subclass
- present = present || searchEventListenerClass == eventListener.getClass();
- }
- if ( !present ) {
- int length = listeners.length + 1;
- PostUpdateEventListener[] newListeners = new PostUpdateEventListener[length];
- for (int i = 0; i < length - 1; i++) {
- newListeners[i] = listeners[i];
- }
- newListeners[length - 1] = (PostUpdateEventListener) searchEventListener;
- getEventListeners().setPostUpdateEventListeners( newListeners );
- }
- }
- else {
- getEventListeners().setPostUpdateEventListeners(
- new PostUpdateEventListener[] { (PostUpdateEventListener) searchEventListener }
- );
- }
- }
- {
- boolean present = false;
- PostDeleteEventListener[] listeners = getEventListeners().getPostDeleteEventListeners();
- if ( listeners != null ) {
- for (Object eventListener : listeners) {
- //not isAssignableFrom since the user could subclass
- present = present || searchEventListenerClass == eventListener.getClass();
- }
- if ( !present ) {
- int length = listeners.length + 1;
- PostDeleteEventListener[] newListeners = new PostDeleteEventListener[length];
- for (int i = 0; i < length - 1; i++) {
- newListeners[i] = listeners[i];
- }
- newListeners[length - 1] = (PostDeleteEventListener) searchEventListener;
- getEventListeners().setPostDeleteEventListeners( newListeners );
- }
- }
- else {
- getEventListeners().setPostDeleteEventListeners(
- new PostDeleteEventListener[] { (PostDeleteEventListener) searchEventListener }
- );
- }
- }
- }
+
return super.buildSessionFactory();
}
+
//not a public API
public ReflectionManager getReflectionManager() {
return reflectionManager;
Added: annotations/trunk/src/java/org/hibernate/cfg/search/CollectionSearchConfiguration.java
===================================================================
--- annotations/trunk/src/java/org/hibernate/cfg/search/CollectionSearchConfiguration.java (rev 0)
+++ annotations/trunk/src/java/org/hibernate/cfg/search/CollectionSearchConfiguration.java 2008-02-10 19:56:04 UTC (rev 14325)
@@ -0,0 +1,83 @@
+//$
+package org.hibernate.cfg.search;
+
+import org.hibernate.event.EventListeners;
+import org.hibernate.event.PostCollectionRecreateEventListener;
+import org.hibernate.event.PostCollectionRemoveEventListener;
+import org.hibernate.event.PostCollectionUpdateEventListener;
+
+/**
+ * Enable collection event listeners for Hibernate Search
+ *
+ * @author Emmanuel Bernard
+ */
+public class CollectionSearchConfiguration {
+ public static void enableHibernateSearch(EventListeners eventListeners, Object searchEventListener, Class searchEventListenerClass) {
+ {
+ boolean present = false;
+ PostCollectionRecreateEventListener[] listeners = eventListeners.getPostCollectionRecreateEventListeners();
+ if ( listeners != null ) {
+ for (Object eventListener : listeners) {
+ //not isAssignableFrom since the user could subclass
+ present = present || searchEventListenerClass == eventListener.getClass();
+ }
+ if ( !present ) {
+ int length = listeners.length + 1;
+ PostCollectionRecreateEventListener[] newListeners = new PostCollectionRecreateEventListener[length];
+ System.arraycopy( listeners, 0, newListeners, 0, length - 1 );
+ newListeners[length - 1] = (PostCollectionRecreateEventListener) searchEventListener;
+ eventListeners.setPostCollectionRecreateEventListeners( newListeners );
+ }
+ }
+ else {
+ eventListeners.setPostCollectionRecreateEventListeners(
+ new PostCollectionRecreateEventListener[] { (PostCollectionRecreateEventListener) searchEventListener }
+ );
+ }
+ }
+ {
+ boolean present = false;
+ PostCollectionRemoveEventListener[] listeners = eventListeners.getPostCollectionRemoveEventListeners();
+ if ( listeners != null ) {
+ for (Object eventListener : listeners) {
+ //not isAssignableFrom since the user could subclass
+ present = present || searchEventListenerClass == eventListener.getClass();
+ }
+ if ( !present ) {
+ int length = listeners.length + 1;
+ PostCollectionRemoveEventListener[] newListeners = new PostCollectionRemoveEventListener[length];
+ System.arraycopy( listeners, 0, newListeners, 0, length - 1 );
+ newListeners[length - 1] = (PostCollectionRemoveEventListener) searchEventListener;
+ eventListeners.setPostCollectionRemoveEventListeners( newListeners );
+ }
+ }
+ else {
+ eventListeners.setPostCollectionRemoveEventListeners(
+ new PostCollectionRemoveEventListener[] { (PostCollectionRemoveEventListener) searchEventListener }
+ );
+ }
+ }
+ {
+ boolean present = false;
+ PostCollectionUpdateEventListener[] listeners = eventListeners.getPostCollectionUpdateEventListeners();
+ if ( listeners != null ) {
+ for (Object eventListener : listeners) {
+ //not isAssignableFrom since the user could subclass
+ present = present || searchEventListenerClass == eventListener.getClass();
+ }
+ if ( !present ) {
+ int length = listeners.length + 1;
+ PostCollectionUpdateEventListener[] newListeners = new PostCollectionUpdateEventListener[length];
+ System.arraycopy( listeners, 0, newListeners, 0, length - 1 );
+ newListeners[length - 1] = (PostCollectionUpdateEventListener) searchEventListener;
+ eventListeners.setPostCollectionUpdateEventListeners( newListeners );
+ }
+ }
+ else {
+ eventListeners.setPostCollectionUpdateEventListeners(
+ new PostCollectionUpdateEventListener[] { (PostCollectionUpdateEventListener) searchEventListener }
+ );
+ }
+ }
+ }
+}
Added: annotations/trunk/src/java/org/hibernate/cfg/search/SearchConfiguration.java
===================================================================
--- annotations/trunk/src/java/org/hibernate/cfg/search/SearchConfiguration.java (rev 0)
+++ annotations/trunk/src/java/org/hibernate/cfg/search/SearchConfiguration.java 2008-02-10 19:56:04 UTC (rev 14325)
@@ -0,0 +1,154 @@
+//$
+package org.hibernate.cfg.search;
+
+import java.util.Properties;
+import java.lang.reflect.Method;
+
+import org.hibernate.util.ReflectHelper;
+import org.hibernate.AnnotationException;
+import org.hibernate.event.PostInsertEventListener;
+import org.hibernate.event.PostUpdateEventListener;
+import org.hibernate.event.PostDeleteEventListener;
+import org.hibernate.event.EventListeners;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Helper methods initializing Hibernate Search event listeners
+ *
+ * @author Emmanuel Bernard
+ */
+public class SearchConfiguration {
+ private static Log log = LogFactory.getLog( SearchConfiguration.class );
+
+ public static void enableHibernateSearch(EventListeners eventListeners, Properties properties) {
+ //add search events if the jar is available
+ boolean enableSearchListeners = !"false".equalsIgnoreCase( properties.getProperty( "hibernate.search.autoregister_listeners" ) );
+ boolean enableCollectionSearchListeners = false;
+ Class searchEventListenerClass = null;
+ Class nonCollectionSearchEventListener = null;
+ try {
+ searchEventListenerClass = ReflectHelper.classForName(
+ "org.hibernate.search.event.FullTextIndexEventListener",
+ SearchConfiguration.class );
+ nonCollectionSearchEventListener = searchEventListenerClass;
+ //after Hibernate Core 3.2.6 and Hibernate Search 3.0.1
+ try {
+ ReflectHelper.classForName(
+ "org.hibernate.event.AbstractCollectionEvent",
+ SearchConfiguration.class );
+ // Core 3.2.6 is here
+ searchEventListenerClass = ReflectHelper.classForName(
+ "org.hibernate.search.event.FullTextIndexCollectionEventListener",
+ SearchConfiguration.class );
+ // Search 3.0.1 is here
+ enableCollectionSearchListeners = true;
+
+ }
+ catch (ClassNotFoundException e) {
+ //collection listeners not present
+ log.debug( "Hibernate Search collection listeners not present " +
+ "(upgrate to Hibernate Core 3.2.6 and above and Hibernate Search 3.0.1 and above)" );
+ }
+ }
+ catch (ClassNotFoundException e) {
+ //search is not present
+ log.debug( "Search not present in classpath, ignoring event listener registration" );
+ }
+ if ( enableSearchListeners && searchEventListenerClass != null ) {
+ //TODO so much duplication
+ Object searchEventListener;
+ try {
+ searchEventListener = searchEventListenerClass.newInstance();
+ }
+ catch (Exception e) {
+ throw new AnnotationException( "Unable to load Search event listener", e );
+ }
+ {
+ boolean present = false;
+ PostInsertEventListener[] listeners = eventListeners.getPostInsertEventListeners();
+ if ( listeners != null ) {
+ for (Object eventListener : listeners) {
+ //not isAssignableFrom since the user could subclass
+ present = present ||
+ searchEventListenerClass == eventListener.getClass() ||
+ ( enableCollectionSearchListeners && nonCollectionSearchEventListener == eventListener.getClass() );
+ }
+ if ( !present ) {
+ int length = listeners.length + 1;
+ PostInsertEventListener[] newListeners = new PostInsertEventListener[length];
+ System.arraycopy( listeners, 0, newListeners, 0, length - 1 );
+ newListeners[length - 1] = (PostInsertEventListener) searchEventListener;
+ eventListeners.setPostInsertEventListeners( newListeners );
+ }
+ }
+ else {
+ eventListeners.setPostInsertEventListeners(
+ new PostInsertEventListener[] { (PostInsertEventListener) searchEventListener }
+ );
+ }
+ }
+ {
+ boolean present = false;
+ PostUpdateEventListener[] listeners = eventListeners.getPostUpdateEventListeners();
+ if ( listeners != null ) {
+ for (Object eventListener : listeners) {
+ //not isAssignableFrom since the user could subclass
+ present = present ||
+ searchEventListenerClass == eventListener.getClass() ||
+ ( enableCollectionSearchListeners && nonCollectionSearchEventListener == eventListener.getClass() );
+ }
+ if ( !present ) {
+ int length = listeners.length + 1;
+ PostUpdateEventListener[] newListeners = new PostUpdateEventListener[length];
+ System.arraycopy( listeners, 0, newListeners, 0, length - 1 );
+ newListeners[length - 1] = (PostUpdateEventListener) searchEventListener;
+ eventListeners.setPostUpdateEventListeners( newListeners );
+ }
+ }
+ else {
+ eventListeners.setPostUpdateEventListeners(
+ new PostUpdateEventListener[] { (PostUpdateEventListener) searchEventListener }
+ );
+ }
+ }
+ {
+ boolean present = false;
+ PostDeleteEventListener[] listeners = eventListeners.getPostDeleteEventListeners();
+ if ( listeners != null ) {
+ for (Object eventListener : listeners) {
+ //not isAssignableFrom since the user could subclass
+ present = present ||
+ searchEventListenerClass == eventListener.getClass() ||
+ ( enableCollectionSearchListeners && nonCollectionSearchEventListener == eventListener.getClass() );
+ }
+ if ( !present ) {
+ int length = listeners.length + 1;
+ PostDeleteEventListener[] newListeners = new PostDeleteEventListener[length];
+ System.arraycopy( listeners, 0, newListeners, 0, length - 1 );
+ newListeners[length - 1] = (PostDeleteEventListener) searchEventListener;
+ eventListeners.setPostDeleteEventListeners( newListeners );
+ }
+ }
+ else {
+ eventListeners.setPostDeleteEventListeners(
+ new PostDeleteEventListener[] { (PostDeleteEventListener) searchEventListener }
+ );
+ }
+ }
+ if (enableCollectionSearchListeners) {
+ try {
+ Class collectionSearchConfigurationClass = ReflectHelper.classForName(
+ "org.hibernate.cfg.search.CollectionSearchConfiguration",
+ SearchConfiguration.class );
+ Method method = collectionSearchConfigurationClass.getDeclaredMethod( "enableHibernateSearch",
+ EventListeners.class, Object.class, Class.class );
+ method.invoke( null, eventListeners, searchEventListener, searchEventListenerClass );
+ }
+ catch (Exception e) {
+ throw new AnnotationException( "Unable to load Search event listener", e );
+ }
+ }
+ }
+ }
+}
16 years, 12 months
Hibernate SVN: r14324 - core/tags.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2008-02-06 22:51:18 -0500 (Wed, 06 Feb 2008)
New Revision: 14324
Added:
core/tags/v326/
Log:
(re)tagging 3.2.6 release
Copied: core/tags/v326 (from rev 14323, core/branches/Branch_3_2)
17 years
Hibernate SVN: r14323 - core/tags/v325.
by hibernate-commits@lists.jboss.org
Author: steve.ebersole(a)jboss.com
Date: 2008-02-06 22:50:19 -0500 (Wed, 06 Feb 2008)
New Revision: 14323
Removed:
core/tags/v325/Branch_3_2/
Log:
aye aye aye
17 years