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???
Será que vc não está se esquecendo de dar um closeSession em outro lugar?
:roll:
marcioa1
Será que não ocorre uma excessão antes de fechar a sessão ?
andre_a_s
Não! :x
Acompanhei o console e nada de exceptions.
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:
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…
Assim você garante que a conexão com o bd será fechada.
Valeu “le-silva”, agora funcionou bonitao! :mrgreen:
Eu nem usei o seu metodo inteiro, eu só adicionei “session.connection().close();” e rolou!
Thanx!
louds
Não use um connection pool se você não quer que a conexão possa continuar aberta depois de terminarem de usá-la.
F
fabio.patricio
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.