【问题标题】:Apache SOLR 4.1 class loader issue with lucene implementationApache SOLR 4.1 类加载器问题与 lucene 实现
【发布时间】:2013-02-25 17:05:31
【问题描述】:

我最近在将 Apache SOLR 4.1 战争文件部署到我们的 tomcat 6 服务器时遇到了问题。在服务器库($CATALINA_HOME/lib)中,我们有一个旧的 lucene 实现库(2.9+),用于一些遗留搜索应用程序。 SOLR 在其 .war 文件 WEB-INF/lib 中有较新的 4.1 lucene 实现 jar 文件。通过检查 Tomcat 6 文档,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!这显然是不可接受的。

【问题讨论】:

    标签: tomcat solr classloader


    【解决方案1】:

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

    另一个选项是要求您的 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 中也有一个选项!

    【讨论】:

      猜你喜欢
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 2020-07-22
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      相关资源
      最近更新 更多