Jersey、HK2、およびプレーンな GrizzlyServer で、独自のサービス クラスの (リソース クラスへの) インジェクションを設定することができました。(基本的にはこの例に従います。)
リソース クラスに JPA EntityManagers を挿入するのに最適なものは何ですか? (現在、1回のリクエストを1単位として考えています)。私が現在検討している 1 つのオプションは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 が適切に閉じられていることを確認するにはどうすればよいですか?
(このユースケースをカバーするためだけに、重いコンテナや追加の依存性注入ライブラリに依存したくありません。)