2013-02-25 57 views
1

我最近遇到了将Apache SOLR 4.1 war文件部署到我们的tomcat 6服务器的问题。在服务器库($ CATALINA_HOME/lib)中,我们有一个旧的lucene实现库(2.9+)用于一些传统的搜索应用程序。 SOLR在其.war文件的WEB-INF/lib中有较新的4.1 lucene实现jar文件。通过检查Tomcat 6文档,看起来SOLR库应该加载FIRST;然而,根据经验,情况并非如此:如果我将其部署到正在运行的服务器上,则管理控制台将显示其加载2.9.0 lucene实现。使用lucene实现的Apache SOLR 4.1类加载器问题

要添加另一个扭曲:如果我停止并重新启动Tomcat服务器,则会切换到4.1!正如你大概可以想象的那样,这让我的奴隶复制悲伤;因为我相信我的初始索引是通过2.9 lucene构建的,在某个时候重新启动了容器,使用随后加载的4.1进行更新,并试图复制到2.9 lucene实现从属,导致它们全部失败。

这里的任何建议都会受到欢迎。我尝试从SOLR war文件中删除4.1库,但是它无法加载,因为有些依赖似乎需要它们(尽管类加载器在部署之后选择“通用库”lucene实现!)更新所有遗留代码是不可行的将这些服务器上的软件转换为lucene 4,尽可能多地重写。任何想法为什么类加载器会以这种方式执行?

编辑:更复杂的事情,如果我有一个刚开始的Tomcat显示4.1.0 lucene实现,然后RELOAD核心或通过Tomcat管理器做一个webapp重新加载,它会返回到2.9.0 !这显然是不可接受的。

回答

0

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

另一个选择是让您的Tomcat使用您的WEB-INF库(WEB-INF/lib)用于Solr和服务器库($ CATALINA_HOME/lib),以便使用lucene进行传统搜索。

您可以通过参数在网络逻辑服务器实现这一目标,

<container-descriptor> 
    <prefer-web-inf-classes>true</prefer-web-inf-classes> 
</container-descriptor> 
在 “weblogic.xml中” 为Solr的web应用程序

希望有一个选项可以在Tomcat中做到这一点!