2017-03-23 16 views
0

私はPARENT_LASTに設定java.lang.NoClassDefFoundErrorが:javax.persistence.AttributeConverter

  1. クラスローダと
  2. が休止状態-JPA-2.1-API-1.0.0.Final.jarでEARファイルを持っていますEAR自体にパッケージ化されています。

Websphere BPM 8.5.5への展開中に、NoClassDefFoundErrorが取得されています。スタックトレースは次のようになります

java.lang.NoClassDefFoundError: javax.persistence.AttributeConverter 
    at java.lang.J9VMInternals.verifyImpl(Native Method) 
    at java.lang.J9VMInternals.verify(J9VMInternals.java:94) 
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:171) 
    at com.xxx.xxx.xxx.xxx.xxx.hibernate.impl.SessionManagerImpl$1.run(SessionManagerImpl.java:114) 

この問題に直面した人は誰ですか?

+1

コンテナには、JPA API v2.1ではなく、CLASSPATHに別のJPA API jarがあり、見つかっています。エラーメッセージにすべてが表示されます –

答えて

1

ネストされたClassNotFoundExceptionのスタックは、もっと確実に(失敗したクラスのロードに使用されている実際のローダーを含める必要があります)、わかりやすく教えてくれますが、Billyのコメントはほぼ確実に正しいトラックにあります。 JPA APIに依存するいくつかのカスタムクラスをサーバーのJVMクラスパスに追加しました(または、Java/jre/lib/extなどのブートクラスパスまたはjava.ext.dirs内のディレクトリに追加することもできます。しかし、その効果は同じであろう)。

JVMクラスパスに何かを置くと、Javaアプリケーションローダーによってロードされます。このローダーは、環境の他のすべてのクラスローダーの親であり、ほとんどのWebSphereランタイムをピックアップするOSGiローダーを含みます。そのため、Java EE APIのようなコアなものを含め、WebSphereクラスを「見る」ことはできません。

カスタム・クラスは、基本的にWebSphereサーバー上のJVMクラス・パスに属しません。共有ライブラリは通常の推奨です(アプリケーションにそのまま残すことができない理由があると仮定します)。WAS_HOME/lib/extのようないくつかのディレクトリによって設定された拡張クラス・ローダーがサーバー上にあります。アプリケーションスコープ外でサーバーに表示される必要があるカスタムセキュリティモジュールなどがある場合に使用します。

関連する問題