Dia!
Eu tenho uma aplicação rodando com Hibernate, mas de alguma maneira, ele está estourando o limite de conexões que o MySQL aceita.
O meu método é o seguinte:
public List getList(String hql) throws Exception{
Session session = factory.openSession();
List messages = session.find(hql);
session.flush();
session.close();
return messages;
}
Se eu dou um session.close(); pq a conexão continua aberta???
Eu fico analisando pelo Console do MySQL, cada vez q eu executo o método ele aumenta uma conexao… até q ele dá o erro: “Too many connection” :?
Existe alguma maneira melhor de se fazer isso???
Como posso resolver esse problema???
Eu dei uma lida na documentação ele fala que o Session.close() apenas retorna a conexão para o Pool… tudo bem… mas como eu mato ela no maldito pool??? :evil:
[quote=le-silva]Já tive esse mesmo problema quando trabalhava com o Hibernate sob várias transações… então no meu controle de transações, ao finalizar eu usei…
if (session.isOpen()) {
session.connection().close();
session.close();
}
Assim você garante que a conexão com o bd será fechada.[/quote]
Valeu “le-silva”, agora funcionou bonitao! :mrgreen:
Eu nem usei o seu metodo inteiro, eu só adicionei “session.connection().close();” e rolou!
Thanx!
Outro detalhe, qual o status as conexoes estao ficando depois de dar um session.close() ?
Bancos como o Postgre e Oracle nao fecham as conexoes de cara, elas ficam inativas e de tempos em tempos o banco elimina elas.
Outra coisa, eu particularmente nao gosto de deixar o controle da session para o DAO. Isso pode te trazer problemas se precisar usar Lazy no Hibernate.