首先,我是JPA和Jax-rs的新手,我正在努力开发一项休息服务.所以我创建了一个资源类并对其进行了注释.
@Path("/companies")
public class CompanyResource {
private EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("test");
@GET
@Produces({MediaType.APPLICATION_JSON})
public List<Company> getCompanies() {
EntityManager entityManager = entityManagerFactory.createEntityManager();
return new ArrayList<>();
}
@GET
@Path("{companyId}")
@Produces({MediaType.APPLICATION_JSON})
public Company getCompany(@PathParam("companyId") int id) {
return new Company();
}
}
Run Code Online (Sandbox Code Playgroud)
从我对每个客户端请求实例的jax-rs的理解CompanyResource,这意味着每次EntityManagerFactory创建新的,我想这不是一个好主意,因为我只需要它来创建实体管理器,这可能是仅使用它的一个实例完成.那么实现这个目标的正确方法是什么?或者可以为每个请求创建此工厂的新实例吗?
PS我已经看到一些例子,他们使用@Stateless注释并注入实体管理器,但我猜他们EJB在那里使用(我可能是错的),我现在不想深入EJB.
我认为你应该注入entitymanager本身(而不是工厂),并让容器负责实例化和范围.我们通常做的是像
@Stateless
@Path("services")
public class MyServices {
@PersistenceContext
private EntityManager em;
// ...
Run Code Online (Sandbox Code Playgroud)
除了@Stateless(你应该使用哪种方法,没有必要深入了解EJB),它实际上非常简单.
| 归档时间: |
|
| 查看次数: |
852 次 |
| 最近记录: |