【发布时间】:2013-10-05 14:03:12
【问题描述】:
我已经设法在 Jersey、HK2 和一个普通的 GrizzlyServer 中设置了我自己的服务类的注入(到资源类中)。 (基本关注this example。)
我现在很好奇将 JPA EntityManagers 注入到我的资源类中最好的方法是什么? (我目前正在考虑将一个请求作为一个工作单元)。我目前正在探索的一种选择是通过以下方式使用Factory<EntityManager>:
class MyEntityManagerFactory implements Factory<EntityManager> {
EntityManagerFactory emf;
public MyEntityManagerFactory() {
emf = Persistence.createEntityManagerFactory("manager1");
}
@Override
public void dispose(EntityManager em) {
em.close();
}
@Override
public EntityManager provide() {
return emf.createEntityManager();
}
}
并按如下方式绑定:
bindFactory(new MyEntityManagerFactory())
.to(EntityManager.class)
.in(RequestScoped.class);
问题是dispose-方法从未被调用过。
我的问题:
- 这是在 Jersey+HK2 中注入 EntityManager 的正确方法吗?
- 如果是这样,我应该如何确保我的 EntityManagers 正确关闭?
(我宁愿不依赖重量级容器或额外的依赖注入库来覆盖这个用例。)
【问题讨论】:
-
stackoverflow.com/questions/17396165/… 提出了类似的问题。
-
是的。我已经对这个问题投了赞成票并发表了评论。
-
我使用的是 Jersey 2.10.1,我没有这个问题。 dispose() 按预期调用。
标签: jpa dependency-injection jersey grizzly hk2