1

だからここに私がやろうとしていることがあります:

私は、他のいくつかの Eclipse WebApp プロジェクトで使用される @Entity (EJB 3.1) クラスを持つ共有 Eclipse Java プロジェクトを持っています。このプロジェクト自体には persistence.xml がありません! このプロジェクトを使用する他の WebApp プロジェクトは、WebContent/META-INF で独自の persistence.xml を宣言し、jar-file タグを使用して persistence.xml でこのプロジェクトの JAR を参照します。もちろん、共有プロジェクトの JAR は、これらの WebApp プロジェクトの展開依存関係として追加され、WEB-INF/lib の下に配置されます。

現在、JUnit4 テストケースを作成して、これらの WebApp プロジェクトでステートレス セッション Bean をテストしています。私は Apache TomEE 1.5.0 Plus を使用しており、テストケースでは @Before メソッドを使用して、EJBContainer.createEJBContainer() メソッドを使用して組み込みモードで OpenEJB コンテナーを開始します。これが適切に機能するように、別の test.persistence.xml を作成しました (HSQL メモリ データベースとは異なるデータソースを使用し、フォワード マッピングを使用してテーブルを作成します)。これを src フォルダーの META-INF に置き、@Before メソッドで、「openejb.altdd.prefix」を「test」に設定して、別の test.persistence.xml が読み込まれるようにしました。このセットアップはすべて機能しています。

問題は、OpenJPA 2.2.0 が開始されるとすぐに、共有プロジェクトからの永続クラスがないと文句を言うことです! これは、test.persistence.xml の jar-file タグが存在しない jar を参照しているためです。Eclipse が他の WebApp プロジェクトをデプロイすると、WEB-INF/lib の下に JAR が作成され、実際の persistence.xml はそのパスの下の jar を参照します! ただし、JUnit テストケースを実行すると、そのような JAR は見つかりません。

では、この JAR または test.persistence.xml 内の共有プロジェクト内のクラスを参照するには、テストケース自体をデプロイメント構造や特定のハードコーディングされたパスに過度に依存させないようにするにはどうすればよいでしょうか! このテストケースは最終的にリポジトリにコミットされるため、チェックアウトするすべての開発者が簡単に実行できるようにする必要があります。

正しい方向へのポインタは大歓迎です!

4

1 に答える 1

3

IMO それを行う最も簡単で優れた方法は、Arquillian を使用することです。パッケージングやコンテナのライフサイクルなどを制御する方がはるかに簡単です。TomEE は、使用できる Arquillian との優れた統合 (アダプタ) も提供します。

ドキュメントページを確認してくださいhttp://tomee.apache.org/documentation.html arquillian セクションがあります。

arquillian を含む大量の小さなサンプルを見つけることができる TomEE の例のページも確認できます。

ジャン=ルイの助けになることを願っています

于 2012-12-06T09:32:24.587 に答える