0

openjpa 2.1.1 を永続化フレームワークとして使用する spring mvc アプリがあります。STS で Maven プロジェクトとして開発され、vFaric TC サーバー (Tomcat 7) でローカルに実行されます。

war を初めて Websphere 8.5 にデプロイしたとき、war ファイルにある次の 3 つの openjpa jar とクラスローダーの競合が発生しました。

geronimo-jpa_2.0_spec-1.1.jar geronimo-jta_1.1_spec-1.1.1.jar 検証-api-1.0.0.GA.jar

これらを war から削除し、Websphere にバンドルされている openjpa に延期するとうまくいきました。そのため、openjpa POM 依存関係のスコープを「コンパイル」から「提供」に変更しました (これらの jar が war ファイルにパッケージ化されないように)。

Tomcat 7 は Java EE に準拠していないため、Tomcat\lib に 3 つの jar を配置しました (Tomcat をラップする vfabric-tc-server lib も試しました) が、起動時に JPA クラスがアプリから見えませんでした (noclassdeffound 例外コンソール)。

また、STS内の「起動構成」からサーバークラスパスにjarを追加しようとしました-運もありません。

JPAがアプリの前にロードされるように、Tomcatのどこかに設定する必要があるクラスローダーの順序はありますか?

私が必要としているのは、Tomcat または Websphere にデプロイされたときに機能するビルドです。

どんな助けでも大歓迎です。

4

2 に答える 2

0

これが誰かに役立つ場合、NoClassDefFoundError は JPA クラスを参照していましたが、私が含めた 3 つの jar のクラスの 1 つではありませんでした。mvn tree を実行したところ、JPA 依存関係のチェーン全体が次のようになっていることがわかりました。

openjpa-2.1.1.jar commons-lang-2.4.jar commons-collections-3.2.1.jar geronimo-jta_1.1_spec-1.1.1.jar geronimo-jpa_2.0_spec-1.1.jar

私も追加する必要がありました:

serp-1.12.0.jar

websphere を機能させるには、戦争から削除する必要があったため、元々、validation-api-1.0.0.GA.jar を tomcat/lib にも含めていましたが、これを tomcat/lib に配置すると、「javax.validation.ValidationException」が発生しました。 : デフォルトのプロバイダーが見つかりません」というメッセージが表示されたので、それを取り出しました。つまり、上記の 6 つの jar だけを追加する必要がありました。

于 2013-09-04T08:38:13.673 に答える