【问题标题】:tracking loaded classes out of .EAR/.WAR跟踪从 .EAR/.WAR 中加载的类
【发布时间】:2014-09-15 06:10:12
【问题描述】:

在 WAS-8.0/8.5 中,如何确认所有 .jars/classes 都由服务器加载?

问题是这样的,我在 WAS-8.5 中遇到 NoClassDefFoundError,因为该类已经部署但无法在运行时加载。

【问题讨论】:

  • 如果您想查看已加载的类,可以使用 WAS 管理控制台查看:疑难解答->类加载器查看器->选择您的应用程序->选择 WAR/EJB jar。注意:您必须启用类加载器查看器服务。另外,请显示堆栈跟踪和 EAR 结构以及此类位于何处的信息(在实用程序 JAR/WAR/EJB JAR 中)。
  • 在 WAS-8.5 中,Troubleshooting->Class loader viewer 选项不可用。它具有-诊断跟踪服务/记录和跟踪/更改日志详细级别/NCSA 访问和 HTTP 错误记录。我已启用“其他属性 -> 类加载器查看器服务。
  • 以下是 .EAR 结构 - DummyPortal.EAR/lib、DummyPortal.EAR/lib/Counter.jar、DummyPortal/DummyWar.WAR、DummyPortal/DummyWar/MyJsp.jsp。在“MyJsp.jsp”中,我正在从“Counter.jar”访问一个类,并且出现“NoClassDefFoundError”异常。不确定,为什么它不指“Counter.jar”。这会是 WAS-8.5 中的错误吗?
  • 我猜你的 WAR 没有看到 JAR 中的类,因为它在部署程序集中缺少一个条目。 WAS 从 WAR MANIFEST.MF 文件中读取它(它位于 META-INF 目录中)。您是否将 EAR lib 目录配置为 lib(右键单击 EAR->Properties->Deployment Assembly)?如果是,则必须将 Counter.jar 添加到 WAR 部署程序集中(右键单击 DummyWar WAR 项目->属性->部署程序集->选项卡清单条目->添加)。
  • 好的,魔术棒我会试试这个并很快更新,干杯

标签: jakarta-ee build websphere war ear


【解决方案1】:

您可以:

  • 把 counter.jar 文件放到你的 warWEB-INF/lib 文件夹中,如果它是特定于模块的,
  • 把counter.jar放到earlib文件夹下,如果被多个模块共享的话
  • 将其添加到MANIFEST.MF 文件中,或者按照Magic Wand 描述的方式,或者如果您没有Eclipse,只需将以下内容添加到文件中:

类路径:counter.jar

【讨论】:

  • 感谢 Gas 的回复。所以,我遵循了“Magic Wand”的建议,现在 .JSP 可以从“Counter.jar”中引用“AlphabetCounter.class”。但是现在,“AlphabetCounter”找不到类:“CounterConstants”,它也出现在“Counter.jar”中。似乎“AlphabetCounter”没有在“Counter.jar”中寻找“CounterConstants”。我是否需要在“Counter.jar”的清单文件中添加以下条目?清单条目:类路径:“。” ?
  • 另外,我的 DummyPortal.EAR 的“lib”文件夹有“Counter.jar”。因为假设它被多个 .WAR 模块访问。
  • 以下是简短的堆栈跟踪:错误消息:javax.servlet.ServletException:SRVE0320E:找到[MyFilter] 过滤器,但发生资源注入失败。错误代码:500 目标 Servlet:DispatcherServlet 错误堆栈:com.ibm.wsspi.injectionengine.InjectionException:无法获取 @Inject java.lang.reflect.Field.cm 的实例:javax.enterprise.inject.CreationException:java.lang .NoClassDefFoundError: com.mycompany.constants.CounterConstants(初始化失败)
  • @G.S.Tomar 如果您的 CounterConstants 在 jar 中,并且您正在尝试注入它,则该 jar 中的 META-INF 文件夹中应该有 beans.xml。
  • beans.xml 已经存在于“Counter.jar”的 META-INF 中。 CDI 工作正常。 “AlphabetCounter”是@Inject 项目,由 CDI 完美引用。当“AlphabetCounter”的默认构造函数尝试通过“CounterConstants.java”使用静态常量时,问题就开始了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 2020-05-14
  • 2011-05-26
相关资源
最近更新 更多