使用JUnit测试EJB 3.1会导致错误资源无效

时间:2012-08-07 06:10:59

标签: junit persistence java-ee-6 entitymanager

我正在尝试在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;

    ...
}

任何帮助将不胜感激!

1 个答案:

答案 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。

This article contains more details.