Ok, first off -- let's clear up some confusion...

1) except for needing to put hte logging jars in your servlet container's 
to level classpath, you should not be putting any jars that come from solr 
or lucene, or any jars for custom plugins you have written in "tomcat/lib"

2) you should never manually add/remove any jars or any kind from solr's 
"WEB-INF/lib/" directory.

3) if you have custom plugins you want to load, you should create a *new* 
lib directory, and put your custom plugin jars 9and their dependencies) in 
that directory, and configure it (either with sharedLib in solr.xml, or 
with a <lib> directive in your solrconfig.xml file)


As for the situation situation you find yourself in...

here are the big, gigantic (the size of football fields even) red flags 
that jump out at me as being the sort of thing that could cause all sorts 
of classloader nightmares with your setup...

: *         Following are the jars placed in "tomcat/lib" dir:
        ...
: lucene-core.jar 
: solr-core-1.3.0.jar 
: solr-dataimporthandler-4.4.0.jar 
: solr-dataimporthandler-extras-4.4.0.jar
: solr-solrj-4.4.0.jar
: lucene-analyzers-common-4.2.0.jar
        ...
: Jars in "tomcat/ webapps/ROOT/WEB-INF/lib/"
        ...
: lucene-core-4.4.0.jar 
: nps-solr-plugin-1.0-SNAPSHOT.jar
: solr-core-4.4.0.jar
: solr-dataimporthandler-4.4.0.jar
: lucene-analyzers-common-4.4.0.jar 
: solr-solrj-4.4.0.jar
        ...

You clearly have two radically diff versions of solr-core and lucene-core 
in your classpath, which could easily explain the problems of 
ClassCastExceptions related to hte TokenizerFactory class -- because there 
are going ot be two radically differnet versions of that class in the 
classpath, and who knows which one java is trying to cast your custom impl 
to.

seperate from that: even if the multiple solr-dataimporthandler, 
lucene-analyzers-common, solr-solrj jars in each of those directories are 
the exact same binary files, when loaded into the hierarchical 
classloaders of a servlet container, they produce differnt copies of the 
same java classes -- so you can again have classloader problems of 
some execution paths using a "leaf" classloader to access ClassX while 
another thread might use a "parent" classloader to access ClassX -- these 
differnet class instances will have different static fields, and instances 
of these classes will (probably) not be .equals(), etc....


-Hoss

Reply via email to