Never mind. Found the problem. There was a name collision due to
overlap between using Tika's standalone JAR (which packages all of the
dependencies into a single JAR) and some Solr deps, such that the
wrong classloader was being invoked.
Although, it still does seem weird that two SolrResourceLoader classes
get created.
-Grant
On Nov 14, 2008, at 5:24 PM, Grant Ingersoll wrote:
I'm working on SOLR-282. I'm building it out as a contrib. The
contrib has some source code implementing an ExtractingReqHandler
(ERH) and the Tika library. For testing, I copied the JAR file I
create for the contrib and the Tika library into solr/lib and fire
up the example, which leads to a NoClassDefFound exception (see [1])
caused by the classloader that is loading the ERH failing to find
the Tika dependencies, even though the Tika library is in the lib
directory.
So, in debugging this, I noticed that we construct two different
SolrResourceLoaders, one right after the other in the CoreContainer
at lines 117 and 118. Well, we create a SRL at 117, then the
SolrConfig creates one in it's constructor, which gets called at 118.
I'm not sure if this is the problem, but it leads to [2] in my log
files, which seems really weird.
Anyone with some classloader magic knowledge have any insight?
I also tried merging my contrib jar and the tika jar together, but
that didn't resolve anything.
Thanks,
Grant
[1]
Nov 14, 2008 5:10:29 PM org.apache.solr.common.SolrException log
SEVERE: java.lang.NoClassDefFoundError: org/apache/tika/exception/
TikaException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at
org
.apache
.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:260)
at
org
.apache
.solr.core.SolrResourceLoader.newInstance(SolrResourceLoader.java:281)
at
org
.apache
.solr
.util.plugin.AbstractPluginLoader.create(AbstractPluginLoader.java:84)
at org.apache.solr.core.RequestHandlers
$1.create(RequestHandlers.java:153)
at org.apache.solr.core.RequestHandlers
$1.create(RequestHandlers.java:138)
at
org
.apache
.solr
.util.plugin.AbstractPluginLoader.load(AbstractPluginLoader.java:141)
at
org
.apache
.solr
.core.RequestHandlers.initHandlersFromConfig(RequestHandlers.java:170)
at org.apache.solr.core.SolrCore.<init>(SolrCore.java:527)
at org.apache.solr.core.CoreContainer
$Initializer.initialize(CoreContainer.java:120)
at
org
.apache.solr.servlet.SolrDispatchFilter.init(SolrDispatchFilter.java:
69)
at
org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:99)
....
Caused by: java.lang.ClassNotFoundException:
org.apache.tika.exception.TikaException
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:316)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at
org
.mortbay
.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:375)
at
org
.mortbay
.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:337)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:
374)
[2] Note, in this case I merged the Tika and the Solr contrib jars
together:
INFO: Solr home set to 'solr/'
Nov 14, 2008 5:07:29 PM org.apache.solr.core.SolrResourceLoader
createClassLoader
INFO: Adding 'file:.../solr-clean/example/solr/lib/apache-solr-
extraction-1.4-dev.jar' to Solr classloader
Nov 14, 2008 5:08:07 PM org.apache.solr.core.SolrResourceLoader
locateInstanceDir
INFO: JNDI not configured for solr (NoInitialContextEx)
Nov 14, 2008 5:08:07 PM org.apache.solr.core.SolrResourceLoader
locateInstanceDir
INFO: solr home defaulted to 'solr/' (could not find system property
or JNDI)
Nov 14, 2008 5:08:07 PM org.apache.solr.core.SolrResourceLoader <init>
INFO: Solr home set to 'solr/'
Nov 14, 2008 5:08:07 PM org.apache.solr.core.SolrResourceLoader
createClassLoader
INFO: Adding 'file:.../solr-clean/example/solr/lib/apache-solr-
extraction-1.4-dev.jar' to Solr classloader
Nov 14, 2008 5:10:15 PM org.apache.solr.core.SolrConfig <init>
INFO: Loaded SolrConfig: solrconfig.xml