0

我正在尝试在 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();
    }
    ....
}

当我运行测试时,它不起作用。我收到以下消息: Invalid resource : 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;

    ...
}

任何帮助,将不胜感激!

4

1 回答 1

1

好的,我找到了解决我的问题的方法。我现在可以使用 JUnit 来测试我的会话 bean 和持久性上下文。我不是专家,所以我的解释可能不完整。在 netbeans 7.2 中,有一个用于测试的嵌入式 glassfish 服务器。有必要在 domain.xml 文件中配置 jdbc 参数,然后对我来说它可以工作。在我的电脑上,这个文件在

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

我只是添加了一个 jdbc 连接池和一个 jdvc jndi。

本文包含更多详细信息。

于 2012-08-13T15:41:13.863 回答