Bom dia, eu tenho uma aplicação web que funciona mais ou menos assim: Quando inicio o servidor, por meio de listeners eu crio duas conexoes com o mysql (HibernateUtil) e estas duas conexões ficam encarregadas de manter todos os acessos ao banco. Cada clique que o usuario realiza, eu direciono para um filtro onde eu recupero uma conexão e crio uma sessao, após realizar o processo do clique esta sessao é commitada. Mas após umas 30 horas de operação do sistema, tenho alguns problemas no mysql e aparece uma mensagem escrita “broken pipe”. Pesquisei um pouco e vi que preciso usar algo para gerenciar minha conexão (c3po). A minha duvida é sobre persistencia, Quando crio uma conexão com o mysql quantas sessões posso usar nesta conexão? e se em uma sessao acontece uma exception e eu executo um rollback, afeta a conexão? O que poderia estar ocasionando o broken pipe?
Valeu!!!
Geralmente, eh feita uma conexao por sessao. A sessao coordena a ordem da execucao dos comandos no banco de dados, e coordena a “transacao”. Mas uma vez fechada a sessao, outra sessao pode consumir a mesma conexao JDBC. Portanto, uma mesma conexao JDBC pode servir diversas sessoes, desde que em momentos diferentes.
Veja mais aqui:
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html#configuration-hibernatejdbc
Nao.
Eu diria que eh um timeout no lado do servidor. Este eh um problema ate comum quando se usa MySQL (mas nao eh um problema do MySQL), e vc pode tentar usar a propriedade hibernate.connection.autoReconnect. O melhor eh usar um framework para “connection pooling”, como o C3P0 (que voce parece ja ter pesquisado). Mas como sua aplicacao eh web, se voce esta usando um “Application Server” (como JBoss AS), o melhor mesmo seria voce configurar o Hibernate para consumir um DataSource, que eh gerenciado pelo AS.