0

いくつかの ejb および war モジュールを含む Maven マルチモジュール プロジェクトがあります。モジュールの 1 つは、プラットフォーム全体の統合テスターとして機能します。組み込みの EjbContainer を使用して、セキュリティ、依存性注入、およびトランザクションを含む ejb のテストに成功しました。

ここで、CDI をミックスに追加したいと考えていますが、ここで問題が発生します。

問題

ドキュメントによると、CDI を有効にするには、有効にする ejb モジュールのMETA-INFフォルダーに空のbeans.xmlを追加するだけです。簡単なことですが、実行した直後に組み込みサーバーを起動できないため、統合テストを実行できません。

スローされる例外は次のとおりです。

java.lang.RuntimeException: javax.ejb.EJBException: Failed to deploy EJB modules - see log for details
...
Caused by: javax.ejb.EJBException: Failed to deploy EJB modules - see log for details

stackTrace の残りの部分は、サーバーを起動しようとする行を指しているだけで、有用な情報は提供しません。

2 つの注意事項:

  • @Injected Bean がなくても起動に失敗します。
  • 埋め込まれていないグラスフィッシュで実行する場合、CDI は正常に動作するため、問題はテストのみです。

私たちのシステム

Maven プロジェクトの構造

myproject
myproject-ear
myproject-domain
myproject-ejb1
myproject-ejb2
myproject-war
myproject-test

環境
- Glassfish 3.1、3.2
- TestNG

File[] modules = {
new File("/target/classes"), 
new File("../myproject-ejb1/target/classes"),
new File("../myproject-ejb2/target/classes")
...};
properties.put(EJBContainer.APP_NAME, "myproject");  
properties.put(EJBContainer.MODULES, modules); 
properties.put("org.glassfish.ejb.embedded.glassfish.instance.root","./src/main/resources");    
EJBContainer container = EJBContainer.createEJBContainer(properties);

これまでに発見したこと

GlassFish でより細かいログ記録を有効にしましたが、何が失敗しているのかまだわかりません。

私たちは Arquillian について知っており、可能性として考えていますが、標準 API で最後にもう一度試してみたいと思います。

何が間違っている可能性がありますか?

4

1 に答える 1

0

前回、組み込みのグラスフィッシュを手動で使用したときはorg.glassfish.ejb.embedded.glassfish.installation.root、 ではなくプロパティを設定していましinstanceた。これを試して。

補足として、Arquillian を試すことを強くお勧めします。これは、テストが移植可能であるため、ターゲット コンテナーを選択する際に柔軟性が得られるためです。そして、このぎこちないブートストラップ コードをいじる必要はもうありません。また、組み込みコンテナはクラスローダーで頭痛の種になることが多いため、あまり好きではありません。

于 2013-06-24T11:45:59.337 に答える