writer = PyLucene.IndexWriter( "c:/index", PyLucene.StandardAnalyzer(), True) JavaError: java.lang.NullPointerException
The same API works fine if called from python console.
>>> PyLucene.IndexWriter( "c:/index", PyLucene.StandardAnalyzer(), True) <IndexWriter: org.apache.lucene.index.IndexWriter@17f3fa0>
The reason for conflict lies in the threading mechanism used by CherryPy.
CherryPy page handlers never run in the main thread, a new thread is created for handling new request. These new threads are local threads created from threading.Thread.
Basically, for a python only main thread can call into PyLucene without any problems. For other threads to work with PyLucene, the boehm-gc component of the java runtime ( i.e. the garbage collector) should be informed about their creation. If these threads are created as an instance of PyLucene.PythonThread, it will make sure that the thread is created via libgcj and libgcj garbage collector is aware of it.
The idea is to use PyLucene.PythonThread instead of normal threading.Thread in CherryPy source code.
The cherrypy code should be available in following directory inside python installation directory. python_installation_dir\Lib\site-packages\cherrypy
Files which have threading.Thread are:
You need to add statement import PyLucene and replace threading.Thread with PyLucene.PythonThread in above two files.
Also disable CherryPy's autoreload (by adding autoreload.on=False to configuration file) because autoreload uses low level threads.
These changes worked fine in my case.
For more details, see http://lists.osafoundation.org/pipermail/pylucene-dev/2006-June/001107.html
For porting this solution to Fedora Core 5 Linux, visit http://lists.osafoundation.org/pipermail/pylucene-dev/2006-July/001213.html
Above information may not be correct, as its just taken from my experience, Let me know if there is any mistake.
Pravin Shinde [getpravin at gmail.com]
- CherrypyPylucene.txt (1.4 kB) - added by email@example.com on 12/17/07 12:36:45.