Hello,
I ran into a problem when I tried to use jcc for Apache Tika 0.7.
I can construct org.apache.tika.parser.AutoDetectParser instance in
the main thread, but cannot in the child thread.
>From following code,
import threading, infopilejavalib
infopilejavalib.initVM()
def f():
infopilejavalib.getVMEnv().attachCurrentThread()
print infopilejavalib.AutoDetectParser() # fails
print infopilejavalib.AutoDetectParser() # succeeds
threading.Thread(target=f).start()
I got
org.apache.tika.parser.autodetectpar...@53fb57
Exception in thread Thread-1:
Traceback (most recent call last):
File "c:\python26\lib\threading.py", line 525, in __bootstrap_inner
self.run()
File "c:\python26\lib\threading.py", line 477, in run
self.__target(*self.__args, **self.__kwargs)
File "wk\a.py", line 47, in f
print infopilejavalib.AutoDetectParser() # fails
JavaError: sun.misc.ServiceConfigurationError:
org.apache.tika.parser.Parser: Provider
org.apache.tika.parser.asm.ClassParser not found
Java stacktrace:
sun.misc.ServiceConfigurationError: org.apache.tika.parser.Parser:
Provider org.apache.tika.parser.asm.ClassParser not found
at sun.misc.Service.fail(Unknown Source)
at sun.misc.Service.access$000(Unknown Source)
at sun.misc.Service$LazyIterator.next(Unknown Source)
at org.apache.tika.config.TikaConfig.<init>(TikaConfig.java:147)
at
org.apache.tika.config.TikaConfig.getDefaultConfig(TikaConfig.java:207)
at
org.apache.tika.parser.AutoDetectParser.<init>(AutoDetectParser.java:46)
Investigating further, I found threads created by JNI don't have class loader.
def f():
infopilejavalib.getVMEnv().attachCurrentThread()
thread = infopilejavalib.Thread.currentThread()
clsloader = thread.getContextClassLoader()
print clsloader # prints None
threading.Thread(target=f).start()
This script print None as the context class loader.
I can call thread.setContextClassLoader() manually, but it might be
useful if jcc's attachCurrentThread() does it.
Thoughts?
--
Atsuo Ishimoto
Mail: [email protected]
Blog: http://d.hatena.ne.jp/atsuoishimoto/
Twitter: atsuoishimoto