0

我在以下课程中收到 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。

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

应用程序

我的应用程序.EAR

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

我的应用程序.WAR

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

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

4

1 回答 1

0

这里发生的情况是,由于您使用的是 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 加载

于 2012-10-04T08:30:08.603 回答