加载slf4j LoggerFactory时,websphere类加载器会给出java.lang.LinkageError

时间:2014-09-25 15:25:39

标签: java websphere classloader slf4j

[我最初是在websphere论坛上发布的,但是他没有看到及时的回复。我在这里重新发布了更多内容]

问题

我在我们的企业应用程序(即" .ear")中添加了一个jar(称之为#34; Foo.jar"),创建了清单条目等,并找到了我的意外是,当我的EJB实例化FooClient时,websphere在org.slf4j.LoggerFactory上抛出了一个java.lang.LinkageError

我已经在跟踪中添加了类加载器调试,并且找不到太多内容。我希望看到" WAS实际上找到了slf4j类"。以下是条目:

[9/24/14 16:23:01:417 CDT] 00000067 CompoundClass >  loadClass org.slf4j.LoggerFactory this=com.ibm.ws.classloader.CompoundClassLoader@5c2687e4[app:yourappServer] Entry

[9/24/14 16:23:01:418 CDT] 00000067 CompoundClass <  loadClass org.slf4j.LoggerFactory java.lang.LinkageError: org.slf4j.LoggerFactory Exit

我已经检查了我的was8目录,发现了slf4j jar的各种副本/版本。

/plugins
        /osgiappbundles/com.ibm.ws.osgi.applications/aries/slf4j-api-1.5.6.jar
        /slf4j-api-1.5.6.jar

/profiles/AppSrv01
        /installedConnectors/activemq-rar-5.9.1.rar/slf4j-api-1.7.5.jar
        /wstemp
                /appdepl14769b0c2de/slf4j-api-1.7.5.jar3472682177251273594.tmp
                /appdepl14769b0c2de/slf4j-api-1.7.5.jar7922145899030561292.tmp

另一位开发人员告诉我&#34;你无法使用Foo.jar&#34;因为我们需要把#34; Parent_last&#34;而且目前这个项目不是一个选项。

附加背景

  • Websphere 8.0.0.7
  • RAD 9

问题

  • java.lang.LinkageError:这是一个&#39;类加载器问题&#39;或者&#39;错误版本的课程&#39;问题?我对&#34;错误的课程版本的体验&#34;我经常看到的问题&#34; NoSuchMethod&#34;错误,而不是实例化异常。

  • 还有其他方法吗?

更新

我读了一些关于共享库和#34;隔离类加载器&#34;这似乎是解决方案。但是出于某种原因,我的RAD / Eclipse用户界面似乎已被打破,因为它没有“保存”。当我将共享库与应用程序或模块关联时。它随后消失了。

提前致谢

2 个答案:

答案 0 :(得分:1)

如果你想使用websphere中已经存在的更新的库,那么parent_last就是你要走的路

如果没有,请从应用程序中删除slf4j jar,并使用供应商提供的版本

答案 1 :(得分:0)

检查Foo.jar预期的SL4J版本和你正在使用的版本:它们肯定是不同的。确保正确的版本在您的类路径中具有优先权:您可以将它放在WEB-INF / lib中,但也检查您在WEB-INF / lib中只有一个版本。

要发现您正在使用的SL4J jar,可以运行

java -verbose:class ....

并且JVM将转储它加载的内容以及从哪里开始。

你说&#34;我经常看到NoSuchMethod错误&#34;而不是LinkageError;在这种情况下,该方法存在但具有一些其他不兼容性。