I have two cores "favorite" and "user" running in the same Tomcat instance.
In each of these cores I have identical field types "text_en", "text_de",
"text_fr", and "text_ja". These fields use some custom token filters I've
written. Everything was going smoothly when I only had the "favorite" core.
When I added the "user" core, I started getting java.lang.LinkageErrors
being thrown when I start up Tomcat. The error always happens with one of
the classes I've written, but it's unpredictable which class the
classloader chokes on.

Here's the really strange part. I comment out the "text_*" fields in the
user core and the errors go away (makes sense). I add "text_en" back in, no
error (OK). I add "text_fr" back in, no error (OK). I add "text_de" back
in, and I get the error (ah ha!). I comment "text_de" out again, and I
still get the same error (wtf?).

I also put a break point at
org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:424),
and when I load everything one at a time, I don't get any errors.

I'm running Tomcat 5.5.28, Java version 1.6.0_39 and Solr 4.2.0. I'm
running this all within Eclipse 1.5.1 on a mac. I have not tested this on a
production-like system yet.

Here's an example stack trace. In this case it was one of my Japanese
filters, but other times it will choke on my synonym filter, or my compound
word filter. The specific class it fails on doesn't seem to be relevant.

SEVERE: null:java.lang.LinkageError: loader (instance of
 org/apache/catalina/loader/WebappClassLoader): attempted  duplicate class
definition for name: "com/shopstyle/solrx/KatakanaVuFilterFactory"
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:904)
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1353)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
at java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:627)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:249)
at
org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:424)
at
org.apache.solr.core.SolrResourceLoader.newInstance(SolrResourceLoader.java:462)
at
org.apache.solr.util.plugin.AbstractPluginLoader.create(AbstractPluginLoader.java:89)
at
org.apache.solr.util.plugin.AbstractPluginLoader.load(AbstractPluginLoader.java:151)
at
org.apache.solr.schema.FieldTypePluginLoader.readAnalyzer(FieldTypePluginLoader.java:392)
at
org.apache.solr.schema.FieldTypePluginLoader.create(FieldTypePluginLoader.java:86)
at
org.apache.solr.schema.FieldTypePluginLoader.create(FieldTypePluginLoader.java:43)
at
org.apache.solr.util.plugin.AbstractPluginLoader.load(AbstractPluginLoader.java:151)
at org.apache.solr.schema.IndexSchema.readSchema(IndexSchema.java:373)
at org.apache.solr.schema.IndexSchema.<init>(IndexSchema.java:121)
at
org.apache.solr.core.CoreContainer.createFromLocal(CoreContainer.java:1018)
at org.apache.solr.core.CoreContainer.create(CoreContainer.java:1051)
at org.apache.solr.core.CoreContainer$3.call(CoreContainer.java:634)
at org.apache.solr.core.CoreContainer$3.call(CoreContainer.java:629)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:680)

- Hayden

Reply via email to