【问题标题】:ClassNotFoundExceptoin is being thrown due to Classloader loading the wrong library由于 Classloader 加载了错误的库,导致 ClassNotFoundExceptoin 被抛出
【发布时间】:2012-09-12 14:00:10
【问题描述】:

我在以下课程中遇到 ClassNotFoundException:

org.apache.commons.pool.impl.CursorableLinkedList$Cursor.

我查看了打包到 EAR 中的 Web 应用程序,并注意到上面的类存在 2 个库 (CursorableLinkedList)。

JAR 文件是:

1.) com.ibm.ws.jpa.jar
2.) commons-pool-1.4.jar

项目特定的 JAR 文件(即 commons-pool-1.4.jar)打包在 lib 目录下的 WAR 文件中。

环境

EAR 正在部署到 Websphere Applicatoin Server 8。我使用的 IDE 是 Rational Application Developer 8。

我已将应用程序部署设置如下:

应用程序

myApp.EAR

  • 类加载器模式:Parent_First
  • WAR 类加载器策略:模块
  • 起始重量:10
  • 自动启动:是

myApp.WAR

  • 类加载器模式:PARENT_FIRST
  • 起始重量:10000

使用上述设置,我有时会收到 ClassNotFoundException,有时不会。 我不想再出现这个错误,因为我相信由于不正确的类加载,以后可能会出现其他错误。 谁能帮助我设置正确的部署设置,以便首先加载特定于项目的库?

【问题讨论】:

    标签: deployment migration classloader classnotfoundexception websphere-8


    【解决方案1】:

    这里发生的情况是,由于您使用的是 PARENT_FIRST,当 WebSphere 正在寻找包含 com.ibm.ws.jpa.jar 和 commons-pool-1.4.jar 的类时,它将加载它来自 com.ibm.ws.jpa.jar,我猜有版本不匹配之类的东西。

    我的猜测是某些类是从 com.ibm.ws.jpa.jar 加载的,而一些(不在 om.ibm.ws.jpa.jar 中的)是从 commons-pool-1.4.jar 加载的,然后你开始有问题了。

    如果您希望首先加载您的 jar,您需要指定您的 WAR 模块以使用 PARENT_LAST,这样您可以确保类将从您的 jar 而不是 WebSphere 的 jar 加载

    【讨论】:

      猜你喜欢
      • 2013-01-29
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多