实体管理器只能注入到事务内部运行的类中。换句话说,它只能注入到EJB中。其他类必须使用EntityManagerFactory来创建和销毁EntityManager。
由于你的TestService不是EJB,因此将忽略@PersistenceContext注释。不仅如此,在JavaEE 5中,不可能在JAX-RS服务中注入EntityManager或EntityManagerFactory。你必须使用JavaEE 6服务器(JBoss 6,Glassfish 3等)。
这是注入EntityManagerFactory的示例:
package com.test.service;import java.util.*;import javax.persistence.*;import javax.ws.rs.*;@Path("/service")public class TestService { @PersistenceUnit(unitName = "test") private EntityManagerFactory entityManagerFactory; @GET @Path("/get") @Produces("application/json") public List get() { EntityManager entityManager = entityManagerFactory.createEntityManager(); try { return entityManager.createQuery("from TestEntity").getResultList(); } finally { entityManager.close(); } }}
最简单的方法是,假设你使用的是JavaEE 6服务器,则将服务声明为EJB 3.1。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)