2012-08-07 45 views
0

我想用netbeans中的JUnit測試一個無狀態bean。這個bean使用一個EntityManager。使用JUnit測試EJB 3.1獲取錯誤無效的資源

@Stateless 
public class myEjb{ 
    @PersistenceContext 
    private EntityManager em; 

    public MyResult getResult(){ 
     return em.find(...); 
    } 
} 

然後我寫了一個測試類。

public class myTest{ 
    private static EJBContainer ec; 
    private static Context ctx; 

    @BeforeClass 
    public static void setUpClass(){ 
     ec = EJBContainer.createEJBContainer(); 
     ctx = ec.getContext(); 
    } 
    .... 
} 

當我運行測試,這是行不通的。我得到了以下信息: 無效的資源:執行此線時mydb__pm 出現的錯誤:通過刪除實體管理器

ec = EJBContainer.createEJBContainer(); 

如果改變我的豆,它的工作原理。所以,我似乎對實體經理有問題。 我的persistence.xml文件很簡單:

<persistence version="2.0" ...> 
    <persistence-unit name="MetisDemoPU" transaction-type="JTA"> 
    <jta-data-source>MyDb</jta-data-source> 
    <exclude-unlisted-classes>false</exclude-unlisted-classes> 
    <properties/> 
    </persistence-unit> 
</persistence> 

最後,我創建了一個JSF託管Bean,它被稱爲我的EJB(使用實體管理器)和它的作品。

@ManagedBean 
@RequestScoped 
public class myManagedBean{ 
    @EJB 
    private OfferEjb offerEjb; 

    ... 
} 

任何幫助,將不勝感激!

回答

1

好吧,我找到了解決我的問題。我現在可以使用JUnit使用持久性上下文來測試我的會話bean。 我不是專家,所以我的解釋可能不完整。 在netbeans 7.2中,有一個用於測試的嵌入式glassfish服務器。有必要在domain.xml文件中配置jdbc參數,然後爲我工作。 在我的電腦,這個文件是根據

C:\Program Files\glassfish-3.1.2.2\glassfish\domains\domain\ 

我只需添加一個JDBC連接池和JNDI jdvc。

This article contains more details.