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