Monday, January 3, 2011

Check Lucene directory failed for 0

If this type of error comes in development; actually I got this exception in liferay development and by googling found this occur for lucene storage error. So first what I have done: changed the lucene.store.type=file to lucene.store.type=jdbc in portal.properties. You may override it in portal-ext.properties of ext without modifying directly in liferay code.

After that exception may throw like bellows:

Check Lucene directory failed for 0
java.lang.NullPointerException
at org.apache.lucene.store.jdbc.support.JdbcTable.setName(JdbcTable.java:183)
at org.apache.lucene.store.jdbc.support.JdbcTable.<init>(JdbcTable.java:75)
at org.apache.lucene.store.jdbc.support.JdbcTable.<init>(JdbcTable.java:69)
at org.apache.lucene.store.jdbc.JdbcDirectory.<init>(JdbcDirectory.java:121)
at com.liferay.portal.search.lucene.IndexAccessorImpl._getLuceneDirJdbc(IndexAccessorImpl.java:318)
at com.liferay.portal.search.lucene.IndexAccessorImpl.getLuceneDir(IndexAccessorImpl.java:161)
at com.liferay.portal.search.lucene.IndexAccessorImpl._checkLuceneDir(IndexAccessorImpl.java:188)
at com.liferay.portal.search.lucene.IndexAccessorImpl.<init>(IndexAccessorImpl.java:77)
at com.liferay.portal.search.lucene.LuceneHelperImpl._getIndexAccessor(LuceneHelperImpl.java:287)
at com.liferay.portal.search.lucene.LuceneHelperImpl.deleteDocuments(LuceneHelperImpl.java:168)
at com.liferay.portal.search.lucene.LuceneHelperUtil.deleteDocuments(LuceneHelperUtil.java:165)
at com.liferay.portal.search.lucene.LuceneIndexWriterImpl.deletePortletDocuments(LuceneIndexWriterImpl.java:85)
at com.liferay.portal.kernel.search.messaging.SearchWriterMessageListener.doReceive(SearchWriterMessageListener.java:75)
at com.liferay.portal.kernel.search.messaging.SearchWriterMessageListener.receive(SearchWriterMessageListener.java:41)
at com.liferay.portal.kernel.messaging.InvokerMessageListener.receive(InvokerMessageListener.java:73)
at com.liferay.portal.kernel.messaging.ParallelDestination$1.run(ParallelDestination.java:68)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:595)

Here you need to change little in database connection URL:

jdbc.default.url=jdbc:mysql://localhost/DBName?emulateLocators=true&useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false

Added emulateLocators=true in database URL; Also don't forget to clean database. now running ok for me :)

If error comes like bellow:

org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out:
at org.apache.lucene.store.Lock.obtain(Lock.java:70)
at org.apache.lucene.index.IndexWriter.init(IndexWriter.java:598)
at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:410)
at com.liferay.portal.lucene.IndexWriterFactory.getWriter(IndexWriterFactory.java:182)
at com.liferay.portal.lucene.LuceneUtil.getWriter(LuceneUtil.java:285)
at com.liferay.portal.lucene.LuceneUtil.getWriter(LuceneUtil.java:279)
at com.liferay.portal.plugin.PluginPackageIndexer.addPluginPackage(PluginPackageIndexer.java:78)
at com.liferay.portal.plugin.PluginPackageIndexer.updatePluginPackage(PluginPackageIndexer.java:227)
at com.liferay.portal.plugin.PluginPackageUtil._indexPluginPackage(PluginPackageUtil.java:835)
at com.liferay.portal.plugin.PluginPackageUtil._parseRepositoryXml(PluginPackageUtil.java:987)
at com.liferay.portal.plugin.PluginPackageUtil._loadRepository(PluginPackageUtil.java:886)
at com.liferay.portal.plugin.PluginPackageUtil.reloadRepositories(PluginPackageUtil.java:612)
at com.liferay.portlet.admin.job.CheckRemoteRepositoriesJob.execute(CheckRemoteRepositoriesJob.java:47)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:529)



To solve this error delete your lucene directory, deploy all and restart server . Check your portal.properties or portal-ext.properties to figure out where this is, by default it is configured as:

lucene.dir=${liferay.home}/data/lucene/
liferay.home=${resource.repositories.root}
resource.repositories.root=${default.liferay.home}

No comments:

Post a Comment