2012-03-27 7 views
1

テストソースのProducerからEntityManagerをメインソースのサービスに注入する際に問題があります。プロジェクトがProducerを定義する別のプロジェクトにこのライブラリを埋め込むことが目的です。PersistenceContext unitNameを使用します。主な情報源にプロデューサーがいないと、Caused by: java.lang.IllegalStateException: Unable to retrieve EntityManagerFactory for unitName MY_PUというエラーが出ます。例えばメイプルと埋め込みガーリックを使用したCDIクラスパスの問題

/** src/main/java/org/sample/service */ 
@Stateless 
public class MyBean { 
    @Inject 
    @MyCustomQualifier 
    private EntityManager em; 
} 


/** src/test/java/org/sample/service */ 
public class EntityManagerProducer { 
    @Produces 
    @MyCustomQualifier 
    @PersistenceContext(unitName = "MY_PU") 
    private EntityManager em; 
} 

私はサービスをテストするために、私はtarget/classesディレクトリに*の.classファイルを移動し、パッケージフェーズの前にそれを削除するにはMavenの蟻プラグインを使用する必要があります。これは動作しますが、それはクルージングです。私は、確信しているプラ​​グインの<useSystemClassLoader><useManifestOnlyJar>のパラメータを成功させずに変更しようとしました。

別の方法がありますか?

私の環境

  • のMaven 2.2.1
  • シュア:2.4.2
  • のglassfish-埋め込ま-すべて:3.1.1

EDIT

beans.xmlは(test/main)/ resources/META-INF

にあります。

私は次のようにGFコンテナを開始します。

Map<String, Object> properties = new HashMap<String, Object>(); 
properties.put(EJBContainer.MODULES, new File[]{new File("target/classes"), new File("target/test-classes")}); 
EJBContainer ejbContainer = EJBContainer.createEJBContainer(properties); 
Context ctx = ejbContainer.getContext(); 
MyBean service = ctx.lookup("java:global/ejb-app/classes/MyBean"); 
+0

プロジェクトのライブラリやクラスのようなサウンドは、glassfishがロードしているものと競合しています。私は、mavenがクラスパスをきれいに保つことができないので、埋め込みコンテナとmavenで幸運を祈ることはありませんでした。あなたが新しいVMでグラスフィッシュを回転させるとどうなりますか? – LightGuard

+0

@ LightGuard:デフォルトでは、確実なforkModeは 'once'です。したがって、組み込みコンテナは、Mavenとは別のJVMになければなりません。 [参照](http://stackoverflow.com/questions/6813373/how-to-tell-maven2-to-execute-junit-tests-one-by-one-each-in-new-jvm-instance) – Hoon

答えて

0

まあ、私はすべて^^

で問題が表示されていないあなたは のsrc /テスト/リソース/ META-INF/beans.xmlのを持っていますか?

あなたのテストはどのように見えますか? Arquillian、またはあなたは手動でコンテナを始めるのですか? クラスパスにMY_PU PersistenceUnitを持つpersistence.xmlがありますか?私がサンプルプロジェクトを見ることができるどんなgithubかそうなのですか?

私たちは同様の問題があったと3.0.5をMavenのために格下げ

+0

I Arquillianを使っていない。簡単な 'EJBContainer.createEJBContainer()'(上記の編集に注意してください)。はい、persistence.xmlはクラスパスに存在します。申し訳ありませんが、github。 – Hoon

+0

トロイ、試してみてください。 Persistence.createEntityManagerFactory( "MY_PU")。createEntityManager()? これが機能する場合は、さらに手順を試すことができます。 EMが無効になっているか、まったく無効になっている場合は、JPAインストールまたはpersistence.xmlに問題があります。 – struberg

0

...あなたを助けるためにあなたの環境について、もう少し情報が必要。

this Glassfish JIRAで問題が発生しているようです。私は議論で言及されたMaven JIRAを見つけることができなかった。私はまだGlassfishを埋め込んだ最新のMavenを使用する方法を探していますが、運があまりありません。

関連する問題