Мне удалось настроить внедрение (в классы ресурсов) моих собственных классов обслуживания в Джерси, Гонконге и простом GrizzlyServer. (В основном следует этот пример.)
Теперь мне интересно, что лучше всего вводить 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
никогда не вызывается.
Мои вопросы:
- Это правильный подход к внедрению EntityManagers в Jersey+HK2?
- Если да, то как мне убедиться, что мои EntityManagers правильно закрыты?
(Я бы предпочел не зависеть от тяжелых контейнеров или дополнительной библиотеки внедрения зависимостей только для того, чтобы покрыть этот вариант использования.)