【问题标题】:WildFly 8/JBoss: General way to debug Java EE classloader linkage errorsWildFly 8/JBoss:调试 Java EE 类加载器链接错误的一般方法
【发布时间】:2014-06-30 20:44:12
【问题描述】:

调试这些问题的正确方法是什么?

在我的情况下,我的 Java EE Web 项目中出现 LinkageError 问题:

问题

我将 JSF API (jboss-jsf-api_2.2_spec-2.2.5.jar) 包含到我的 Wildfly 模块目录中,即它将由 Wildfly 类加载器加载。 我有外部库,它们也依赖于 JSF 实现(例如 Primefaces 和 OmniFaces)。 此外,为了让构建过程顺利运行,我必须将该库添加为单独的 EAR 库。

奇怪的方式是添加一个实现带有faces事件参数的功能的bean时,例如

public void myValueChangeListener(ValueChangeEvent e) {
 // do sth. 
}

实现这些功能会导致...

10:22:18,571 WARN  [org.jboss.modules] (MSC service thread 1-1) Failed to define class javax.faces.event.ValueChangeEvent in Module "javax.faces.api:main" from local module loader @468a169f (finder: local module finder @13d344e7 (roots: /home/user/app-server/wildfly8/modules,/home/user/app-server/wildfly8/modules/system/layers/base)): java.lang.LinkageError: loader constraint violation: loader (instance of org/jboss/modules/ModuleClassLoader) previously initiated loading for a different type with name "javax/faces/event/ValueChangeEvent"

... 我的 SEVERE 的起点

10:22:18,578 SEVERE [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-1) Critical error during deployment: : java.lang.LinkageError: loader constraint violation: loader (instance of org/jboss/modules/ModuleClassLoader) previously initiated loading for a different type with name "javax/faces/event/ValueChangeEvent"

(去掉参数可以无错误地构建项目)

问题

如何应对这些问题?我需要有关加载类的顺序的概述。可能有一种方法可以显示整个类加载器树或任何可以执行相同操作的分析工具。

【问题讨论】:

    标签: jakarta-ee jboss wildfly wildfly-8 linkageerror


    【解决方案1】:

    您可以在 JBoss 模块上启用调试或跟踪日志记录,但这必然会提供太多信息。

    在您的情况下,为什么要添加一个包含在 WildFly 中的模块(即 jboss-jsf-api_2.2_spec-2.2.5.jar)(与 8.0.0.Final 中的版本完全相同)?这就是模块加载器抱怨重复类的原因。

    WildFly 部署有一个隐式模块依赖列表(其中包括用于 JSF 部署的 jsf-api)。如果您需要 WildFly 发行版中的其他依赖项,您应该简单地声明该依赖项而不是复制模块。

    更多详情请见Class Loading in WildFly

    【讨论】:

    • 好吧,你不手动将库添加到项目中是对的。另一个问题是业务逻辑和 Web 层之间缺少分离。现在我删除了特定的 jsf 实现,但是当我尝试在我的动作监听器实现中捕获我的事件时,由于类加载错误,我的 bean 在部署期间没有被实例化:从 [Module "deployment.myApp 中键入 javax.faces.event.ValueChangeEvent .ear.appCore.jar:main" from Service Module Loader] 未找到。
    猜你喜欢
    • 2021-06-24
    • 2020-08-13
    • 2017-11-29
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 2012-12-05
    • 2017-02-21
    相关资源
    最近更新 更多