В настоящее время я работаю над приложением, использующим Guice / JPA / Hibernate для получения информации из моей базы данных.
Я прочитал документы Guice по работе с JPA и EntityManagars здесь: http://code.google.com/p/google-guice/wiki/JPA,
Но у меня возникают проблемы с пониманием, когда я должен сделать свои реализации DAO Singletons.
Я прочитал этот вопрос о S / O относительно использования Spring DAO, где написано:
Создание DAO для каждого запроса было бы сумасшествием.
Это переносится для контейнеров DI, отличных от Spring?Если я внедряю провайдера DAO в свой сервлет и при необходимости вызываю его, должна ли реализация службы DAO быть единичной?
Вот базовая схема одного из моих DAO:
public DAOImpl implements DAOService { <-- SHOULD THIS BE ANNOTATED @Singleton?
@Inject
private EntityManager em;
// OR
// @Inject
// private Provider<EntityManager> emProvider - If it's a singleton.
@Inject
DAOImpl(OtherServices os) {
this.otherServices = os;
}
@Transactional
public MyPersistedObject getPersistedObject(long id) {
MyPersistedObject mpo = em.find(MyPersistedObject.class, id);
return mpo;
}
}
И как это называется:
@Singleton
public MyServlet(HttpRequest req, HttpRequest res)
extends ServletInterfaceOfTheDay {
private final daoService; // If Singleton
// OR
// private final Provider<DAOService>; If Instanced DAO
@Inject
MyServlet(DAOService dao) {
this.daoService = dao;
}
// Gather Information from request here...
MyPersistedObject mpo = daoService.getPersistedObject(requestIdInfo);
// OR daoService.get().getPersistedObject(requestIdInfo);
// Process Response Info here....
}
Спасибо за помощь.