JPA2样例中嵌入Java EE容器?

3
我希望能够为 JPA2 创建一些示例代码,并在 Java EE 容器内运行。
通常情况下,运行这些示例需要一个 Java EE 服务器,但我想简化操作,使用嵌入式容器 + maven 运行它们。
哪种方式更适合这种“项目”?
Glassfish 嵌入式、JBoss 微容器还是 OPENEJB?
还有其他选择吗?
谢谢!
1个回答

3

在容器外测试EJB的问题是注入不会被执行。我找到了这个解决方案。在无状态会话bean中,您有一个@PersistenceContext注释,在独立的Java-SE环境中,您需要自己注入entitymanager,这可以在unittest中完成。这是嵌入式服务器的快速替代方法。

@Stateless
public class TestBean implements TestBusiness {

    @PersistenceContext(unitName = "puTest")
    EntityManager entityManager = null;

    public List method() {
        Query query = entityManager.createQuery("select t FROM Table t");
        return query.getResultList();
    }
}

单元测试会实例化EntityManager并将其“注入”到Bean中。

public class TestBeanJUnit {

    static EntityManager em = null;
    static EntityTransaction tx = null;

    static TestBean tb = null;
    static EntityManagerFactory emf = null;

    @BeforeClass
    public static void init() throws Exception {
        emf = Persistence.createEntityManagerFactory("puTest");
    }

    @Before
    public void setup() {
        try {
            em = emf.createEntityManager();
            tx = em.getTransaction();
            tx.begin();
            tb =  new TestBean();
            Field field = TestBean.class.getDeclaredField("entityManager");
            field.setAccessible(true);
            field.set(tb, em);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    @After
    public void tearDown() throws Exception {
        if (em != null) {
            tx.commit();
            em.close();
        }
    }

}

谢谢你的回答,很有帮助。这更多是为了测试一些代码。我想要做的是实际运行一些应用程序,以演示JPA2的使用。 - Cris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接