我已经设法在 Jersey、HK2 和一个普通的 GrizzlyServer 中设置了我自己的服务类的注入(到资源类中)。(基本上按照这个例子。)
我现在很好奇将 JPA EntityManagers 注入到我的资源类中最好的方法是什么?(我目前正在考虑将一个请求作为一个工作单元)。我目前正在探索的一个选项是以Factory<EntityManager>
下列方式使用 a :
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 中注入 EntityManagers 的正确方法吗?
- 如果是这样,我应该如何确保我的 EntityManagers 正确关闭?
(我宁愿不依赖重量级容器或额外的依赖注入库来覆盖这个用例。)