Yeah,I have this right now.
Hibernate Search 4.0 allows you to write a custom layer between
Hibernate and Lucene, so it should be able to allow an integration
between Zoie and Hibernate but I haven't had time to really look at
this yet. Documentation on this topic is also very scarce.
What I use now is:
private Map<Class<?>, BoboIndexReader> boboReaders = new
HashMap<Class<?>, BoboIndexReader>();
private static final ReentrantReadWriteLock rwl = new
ReentrantReadWriteLock();
protected static ReentrantReadWriteLock.ReadLock readLock =
rwl.readLock();
protected static ReentrantReadWriteLock.WriteLock writeLock =
rwl.writeLock();
public void refreshBoboIndexReader(Class<?> clazz) {
try {
setBoboIndexReader(clazz, getBoboReader(clazz));
} catch (IOException io) {
log.error("Error creating indexReader", io);
}
}
protected BoboIndexReader getBoboReader(final Class<?> clazz)
throws IOException {
TransactionTemplate transTemplate = new TransactionTemplate(
transactionManager);
DirectoryProvider<FSDirectory>[] dp = transTemplate
.execute(new
TransactionCallback<DirectoryProvider<FSDirectory>[]>() {
@Override
public DirectoryProvider<FSDirectory>[] doInTransaction(
TransactionStatus status) {
FullTextSession fts = Search
.getFullTextSession(getHibernateTemplate()
.getSessionFactory()
.getCurrentSession());
DirectoryProvider<FSDirectory>[] d = fts
.getSearchFactory()
.getDirectoryProviders(clazz);
return d;
}
});
return BoboIndexReader.getInstance(
IndexReader.open(dp[0].getDirectory(), true),
sfFactory.getUnfilteredList(), null);
}
protected void setBoboIndexReader(Class<?> clazz, BoboIndexReader
breader)
throws IOException {
SearchFacetDaoHibernate.writeLock.lock();
try {
if (boboReaders.containsKey(clazz))
boboReaders.get(clazz).close();
boboReaders.put(clazz, breader);
} finally {
SearchFacetDaoHibernate.writeLock.unlock();
}
}
On Sep 14, 8:54 am, Elmer van Chastelet <
evanchaste...@gmail.com>
wrote: