Мне удалось настроить инъекции (в классы ресурсов) моих собственных классов обслуживания в Джерси, HK2 и простой GrizzlyServer. (В основном следовали this example.)Jersey + HK2 + Grizzly: Правильный способ введения EntityManager?
Мне теперь интересно, что лучше всего ввести 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 в Джерси + HK2?
- Если да, то как я должен убедиться, что мои EntityManagers закрыты правильно?
(я предпочел бы не зависеть от контейнеров и тяжелых или дополнительной библиотеки зависимостей инъекции, чтобы покрыть этот случай использования.)
Аналогичный вопрос задают на http://stackoverflow.com/questions/17396165/using-jersey-2-0-how-do-you-register-a-bindable-instance-per-request. – ScootyPuff
Да. Я поддержал и прокомментировал этот вопрос. – aioobe
Я использую Jersey 2.10.1, и у меня нет этой проблемы. Расположить() вызывается как ожидалось. –