Tomcat Apache SOLR 4.1类加载器问题与lucene实现

Tomcat Apache SOLR 4.1类加载器问题与lucene实现,tomcat,solr,classloader,Tomcat,Solr,Classloader,我最近在将ApacheSolr4.1WAR文件部署到Tomcat6服务器时遇到了一个问题。在服务器库($CATALINA_HOME/lib)中,我们有一个旧的lucene实现库(2.9+),用于一些遗留搜索应用程序。SOLR在其.war文件WEB-INF/lib中有更新的4.1 lucene实现jar文件。通过检查Tomcat6文档,似乎应该首先加载SOLR库;然而,根据经验,情况并非如此:如果我将其部署到正在运行的服务器,管理仪表板将显示其加载2.9.0 lucene实现的情况 添加另一个转折

我最近在将ApacheSolr4.1WAR文件部署到Tomcat6服务器时遇到了一个问题。在服务器库($CATALINA_HOME/lib)中,我们有一个旧的lucene实现库(2.9+),用于一些遗留搜索应用程序。SOLR在其.war文件WEB-INF/lib中有更新的4.1 lucene实现jar文件。通过检查Tomcat6文档,似乎应该首先加载SOLR库;然而,根据经验,情况并非如此:如果我将其部署到正在运行的服务器,管理仪表板将显示其加载2.9.0 lucene实现的情况

添加另一个转折点:如果我停止并重新启动Tomcat服务器,它将切换到4.1!正如你可能想象的那样,这让我感到悲伤;因为我相信我的初始索引是通过2.9 lucene构建的,所以在某个时候重新启动了容器,使用当时加载的4.1进行了更新,并尝试复制到2.9 lucene实现从属,导致它们全部失败

欢迎在此提出任何建议。我尝试从SOLR war文件中删除4.1库,但它无法加载,因为某些依赖项似乎需要它们(尽管类加载器在部署后选择“公共库”lucene实现!)将这些服务器上的所有遗留软件更新到lucene 4是不可行的,因为需要进行大量的重写。知道类装入器为什么会以这种方式执行吗


编辑:更复杂的是,如果我在一个新启动的Tomcat上安装SOLR,显示4.1.0 lucene实现,然后重新加载内核或通过Tomcat管理器重新加载webapp,它会返回到2.9.0!这显然是不可接受的。

在给定的场景中,我会选择在另一个Web容器中运行Solr(可能是一个轻量级容器,如jetty)。但我不确定您的体系结构是否具有这种灵活性,或者您可能担心这些容器的可维护性。如果您不受这些问题的影响,您可以继续使用这种方法

另一个选项是要求Tomcat使用WEB-INF库(WEB-INF/lib)进行Solr,使用服务器库($CATALINA_HOME/lib)进行lucene遗留搜索

您可以通过参数在Web logic Server中实现这一点

<container-descriptor>
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>

真的
在Solr web app的“weblogic.xml”中

希望在Tomcat中也有这样的选择