Foi exatamente essa pergunta que eu fiz a quem deu ideia.
[quote=lucaonoforum]Foi exatamente essa pergunta que eu fiz a quem deu ideia.[/quote]E o que ele respondeu?
[quote=lucaonoforum]Existem uma ideia na minha equipe de controlar o EntityManager e as transações através de um Filter.
Eu particularmente não gostei da ideia de a cada requisição criar um EntityManager e iniciar uma transação mesmo que ela não seja usada.
Alguém comunga da minha opinião?[/quote]
Eu não usaria.
Eu só ouvi o som do grilo ao longe.
Pessoal eu acabei fazendo assim, Se alguem tive algo há contribuir.
public interface GeneratorId {
public String getValorId();
}
public class Controlador implements Serializable {
private static final long serialVersionUID = 1L;
public static GeneratorId gerador;
/** */
private static final EntityManagerFactory emf;
private static HashMap<String, EntityManager> map = new HashMap<String, EntityManager>();
static {
emf = Persistence.createEntityManagerFactory("DAOPU");
}
public EntityManager getEntityManager() {
String idAtual = null;
if (gerador != null){
idAtual = gerador.getValorId();
}
EntityManager em = map.get( idAtual );
if (em == null) {
em = emf.createEntityManager();
map.put(idAtual, em);
}
return em;
}
}
public class GeneratorIdControler implements GeneratorId {
@Override
public String getValorId() {
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
return request.getSession().getId();
}
}
e para usar no JSF, coloquei no Bean Inicial.
static{
Controlador.gerador = new GeneratorIdControler();
}
Agora me veio a seguinte questão na mente, quando a sessão for finalizada por inatividade o EntityManager vai ficar no hash.
Tem alguma forma algum evento, listener ou alguma anotação que eu saiba que a sessão vai morrer para poder retirar o EntityManager do hash.
Alguem tem alguma ideia?
Alguem tem alguma ideia? Hebert?