В настоящее время я работаю над приложением, использующим Guice/JPA/Hibernate для получения информации из моей базы данных.
Я прочитал документацию Guice по работе с JPA и EntityManagars здесь: http://code.google.com/p/google-guice/wiki/JPA,
Но у меня проблемы с пониманием того, когда я должен сделать свои реализации DAO синглтонами.
Я читал этот вопрос на 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 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; 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....
}
Спасибо за помощь.