【问题标题】:Linkage Error in Tomcat when 2 webapp instances load lucene classes当 2 个 webapp 实例加载 lucene 类时,Tomcat 中的链接错误
【发布时间】:2015-06-08 07:50:10
【问题描述】:

我正在运行一个带有 2 个不同的 webapp、1 个产品和 1 个沙盒的 tomcat 8 容器。所有的类/库和编译都是相同的,只是配置参数有一些细微的差别。我正在使用 lucene core 4.10.4(通过休眠搜索)。两个应用程序启动都很好,现在启动后,如果我在一个应用程序上使用搜索(比如说 prod),一切正常。当我尝试在第二个应用程序上搜索时出现此错误

... 引起:java.lang.LinkageError:加载程序约束违规:解析方法“java.lang.invoke.MethodHandle.invokeExact()Lorg/apache/lucene/util/AttributeImpl;”时当前类 org/apache/lucene/util/AttributeFactory$1 的类加载器(org/apache/catalina/loader/WebappClassLoader 的实例)和已解析类 java/lang/invoke/ 的类加载器(的实例) MethodHandle,对于类型andle.invokeExact()Lorg/apache/lucene/util/AttributeImpl有不同的Class对象;在签名中使用 在 org.apache.lucene.util.AttributeFactory$1.createInstance(AttributeFactory.java:140) 在 org.apache.lucene.util.AttributeFactory$StaticImplementationAttributeFactory.createAttributeInstance(AttributeFactory.java:103) 在 org.apache.lucene.util.AttributeSource.addAttribute(AttributeSource.java:222) 在 org.apache.lucene.analysis.standard.StandardTokenizer.(StandardTokenizer.java:182) 在 org.apache.lucene.analysis.standard.StandardAnalyzer.createComponents(StandardAnalyzer.java:124) 在 org.apache.lucene.analysis.AnalyzerWrapper.createComponents(AnalyzerWrapper.java:113) 在 org.apache.lucene.analysis.AnalyzerWrapper.createComponents(AnalyzerWrapper.java:113) 在 org.apache.lucene.analysis.Analyzer.tokenStream(Analyzer.java:144) 在 org.hibernate.search.query.dsl.impl.Helper.getAllTermsFromText(Helper.java:74) 在 org.hibernate.search.query.dsl.impl.ConnectedMultiFieldsTermQueryBuilder.getAllTermsFromText(ConnectedMultiFieldsTermQueryBuilder.java:172) 在 org.hibernate.search.query.dsl.impl.ConnectedMultiFieldsTermQueryBuilder.createQuery(ConnectedMultiFieldsTermQueryBuilder.java:89) 在 org.hibernate.search.query.dsl.impl.ConnectedMultiFieldsTermQueryBuilder.createQuery(ConnectedMultiFieldsTermQueryBuilder.java:64) ...

在第二个应用程序出错后,我仍然可以在第一个应用程序上正常搜索。似乎问题是当tomcat为我第二次访问搜索的应用程序加载所需的类时引起的。

我在 stackoverflow 和在线上找到的所有内容都谈到链接错误是由于 web 应用程序从不同的库加载相同的类或使用不同的 java 版本编译所需的类。但在这种情况下,这是 2 个不同的应用程序,这很奇怪,它们都可以正常工作,直到您在干净的 tomcat 启动后在第一个应用程序上使用它之后在第二个应用程序上使用搜索。我能找到的最接近的相关问题是this for a project named clarity

我整晚都在用头撞墙,不知道它可能是什么,也不知道该往哪里看。

【问题讨论】:

    标签: java tomcat lucene jvm linkageerror


    【解决方案1】:

    在白天进行了更多调试后,我决定更新 jdk,以确保 100% 确保 openjdk 1.7u79(来自 1.7_05)。这似乎已经解决了这个问题。 Lucene 说至少要使用更新 55,因为下面有一些 JVM 错误(直到最近我还在使用早期版本的 lucene)。由于需要第二个应用程序来触发错误的奇怪情况,我没有自动跳到尝试这个。

    【讨论】:

    • 非常感谢!要是我能给你更多的赞成票就好了。我有一个关键的可交付成果并被困在这个问题上...!!
    • 没问题,很高兴这避免了某人的头部疼痛
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    相关资源
    最近更新 更多