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 です。

Application Deployment を次のように設定しました:

Application :

myApp.EAR

  • クラスローダーモード: Parent_First
  • WAR クラスローダ ポリシー : MODULE
  • 開始重量: 10
  • 自動開始: はい

myApp.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 を最初にロードする場合は、PARENT_LAST を使用するように WAR モジュールを指定する必要があります。これにより、WebSphere の jar からではなく、jar からクラスが確実にロードされるようにすることができます。

于 2012-10-04T08:30:08.603 に答える