2

EclipseLink (2.0.2)を使用すると、 Weblogic (10.3.3)で奇妙な動作が見られます。

これが私がすることです。Maven を使用して、 JPA (1.0.2)を使用するプロジェクトをコンパイルします。このプロジェクトでは、モジュール "A"はモジュール "B"に依存しています。「B」には多数のエンティティ ( javax.persistence.Entity ) が含まれています。しかし、「persistence.xml」は「B」のすべてのエンティティが登録されている「A」にあります。「B」はオプション パッケージとして展開され、 「A」はマニフェスト経由で参照されます。

デプロイは成功しましたが、アプリケーションを実行してエンティティを永続化しようとすると、上記のエラーが "A" に表示されます。

次のいずれかのアクションで解決します。

  • Weblogic サーバーを再起動します。
  • モジュール A の POM ファイルを更新し、明示的にモジュール B に依存関係を追加します。モジュール A のクラスは「オブジェクト」を受け入れ、それを EntityManager に渡すため (明示的にエンティティ クラス タイプではありません)、元々この依存関係は存在しません。この依存関係を追加しても、JAR ファイルのマニフェストは変更されません。JAR ファイルの META-INF フォルダー内の「maven」ディレクトリーのみを更新します。weblogic がこのフォルダを気にすることさえないと思います。

EclipseLinks のソースをダウンロードし、アプリケーションをデバッグしました。この問題は、「 org.eclipse.persistence.internal.sessions.AbstractSession 」クラスの「 descriptors」コレクション フィールドにエンティティの記述子がなく、エンティティとして認識されないために発生するようです。

キャッシュするサーバーの更新を再起動すると思います。しかし、2 番目の解決策はどうでしょうか。なぜそれが機能するのですか?JARファイルのMETA-INFディレクトリの「maven」ディレクトリはweblogicに認識されていますか?

4

1 に答える 1

0

deploy が B モジュールを正しくデプロイしているとは思えません。

コンテナ管理の持続性ユニットまたはアプリケーション管理を使用していますか? アプリケーション管理の持続性ユニットを使用している場合は、再デプロイする前に EntityManagerFactory を閉じる必要があります。そうしないと、古いクラスを持つ古いファクトリが残ります。

于 2012-07-12T14:49:28.837 に答える