从嵌入式EJBContainer获取EntityManager

时间:2015-10-21 06:37:33

标签: java-ee junit ejb

如何从实例化的EJBContainer(OpenEJB)获取EntityManager?

我尝试使用@PersistenceContext注释,但它不起作用。

2 个答案:

答案 0 :(得分:1)

是的,因为您没有在EJB容器中运行单元测试。所以要么你必须嘲笑EntityManager(例如用Mockito)或者我建议你使用Arquillian,这将允许在reall容器中运行你的测试(它可以在某个服务器上运行,或者你可以在测试中自己开始。)

有关测试JPA的指南页面上有一个很好的教程,请查看它:) Testing Java Persistence

答案 1 :(得分:0)

我不确定您的问题是否与单元测试相关,但这对我有用:

(测试)包中的“帮助bean”:

@Stateless
public class EntityManagerProvider {

    @PersistenceContext(unitName = "pu-name")
    private EntityManager entityManager;

    public EntityManager getEntityManager() {
        return entityManager;
    }
}

然后使用EJBContainer查找该bean并获取EntityManager

private EntityManager getEntityManager() throws NamingException {
    final EntityManagerProvider provider = (EntityManagerProvider)ejbContainer.getContext()
            .lookup("java:global/testproject/EntityManagerProvider");

    return provider.getEntityManager();
}