我正在尝试在netbeans中使用JUnit测试无状态bean。这个bean使用EntityManager。
@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();
如果通过删除实体管理器来更改我的bean,它就可以工作。所以,似乎我的实体经理有问题。 我的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>
最后,我创建了一个名为EJB(使用实体管理器)的JSF托管bean,它可以工作。
@ManagedBean
@RequestScoped
public class myManagedBean{
@EJB
private OfferEjb offerEjb;
...
}
任何帮助将不胜感激!
答案 0 :(得分:1)
好的,我找到了解决问题的方法。我现在能够使用JUnit来测试具有持久化上下文的会话bean。 我不是专家,所以我的解释可能不完整。 使用netbeans 7.2,有一个用于测试的嵌入式glassfish服务器。有必要在domain.xml文件中配置jdbc参数,然后对我来说它可以工作。 在我的计算机上,此文件位于
下C:\Program Files\glassfish-3.1.2.2\glassfish\domains\domain\
我只需添加一个jdbc连接池和一个jdvc jndi。