我在Websphere Server v.6上安装了两个应用程序。 1. SGOApplication 2. ReportingWeb
SGOApplication有一个映射在应用程序级别的共享库,即 的 SGOAPPSHLIB
这个库有一个日志框架jar(logsrv.jar)。 logsrv.jar中有一个名为 SLEEventLogger 的类,它将消息记录到文件中,并使用一些其他第三方类,这些类都捆绑在logsrv.jar中
我想将logsrv.jar用于 ReportingWeb应用程序。 我在ReportingWeb的另一个类中调用了SLEEventLogger类。 我能够构建耳朵并将其部署为logsrv.jar在构建路径中。
之后,我尝试了一些事情,但都没有奏效。
我在尝试运行webapplication时遇到 ClassDefNotFoundException:com.statestreet.framework.logging.SLEEventLogger ,并且控件到达了我使用SLEEventLogger的特定类。
我尝试从websphere Console中的故障排除> Classloader中搜索SLEEventLogger类。 我能够发现模块类加载器正在加载SLEEventLogger类。
如何解决此问题?我在服务器配置上尝试了很多排列和组合,但没有运气。我完全搞砸了。
答案 0 :(得分:1)
要完成这项工作,你应该:
WEB-INF/lib
删除它)我认为您可能在第三次尝试中完成了第(1)部分,即在服务器级别映射REPSHLIB时。这就是为什么它适用于 ReportingWeb 。我想它在 SGOApplication 中出现的原因是因为 SGOApplication 可能已经有了logsrv.jar的副本 - 额外的副本可能与WebSphere类加载器加载的副本冲突。关键是要确保只有一个JAR副本在任何类加载器中。
请参阅http://www.ibm.com/developerworks/websphere/library/techarticles/0112_deboer/deboer.html#N100F8以获取WebSphere的类加载器层次结构的精美图表。
答案 1 :(得分:0)
我建议启用DEBUG日志记录,以便更清楚地了解应用程序中发生的情况。
当然,您提到您的logsrv.jar文件位于构建路径中。值得注意的是,构建路径和您的应用程序的类路径实际上可能不是同一个。
根据NoClassDefFoundError异常的文档,当编译当前正在执行的类时存在类“时抛出它,但无法再找到定义。”
换句话说,SLEEventLogger类在您的构建路径中,允许您的应用程序进行编译,但异常表明包含此类的JAR文件很可能不在您的类路径中。
当您尝试运行应用程序时,使用SLEEventLogger存在的知识编译的类无法再找到它;结果,抛出了NoClassDefFoundError异常。
http://download.oracle.com/javase/1.4.2/docs/api/java/lang/NoClassDefFoundError.html
答案 2 :(得分:0)
此异常意味着无法找到com.statestreet.framework.logging.SLEEventLogger所依赖的某些类。含义:找到类com.statestreet.framework.logging.SLEEventLogger。但这取决于无法找到的东西,因此无法加载。如果您有源代码,则可以轻松找到com.statestreet.framework.logging.SLEEventLogger使用的所有类(只看导入)。 否则,您可以尝试反编译。