Pq o maldito Hibernate não fecha a conexão?

7 respostas
andre_a_s

Dia! :stuck_out_tongue:
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???

Valeuuuu! :mrgreen:

7 Respostas

B

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…

if (session.isOpen()) {
    session.connection().close();
    session.close();
}

Assim você garante que a conexão com o bd será fechada.

andre_a_s

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.

Valeu “le-silva”, agora funcionou bonitao! :mrgreen:
Eu nem usei o seu metodo inteiro, eu só adicionei “session.connection().close();” e rolou!
Thanx! :stuck_out_tongue:

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

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.

]['s

Criado 11 de fevereiro de 2005
Ultima resposta 12 de fev. de 2005
Respostas 7
Participantes 6