olá Pessoal,
Hoje vou apresentar como resolver o problema abaixo quando temos nossa aplicação em produção e onde apostaríamos tudo que estava ok, pois em teste vc nunca tinha visto à exceção a seguir. Mas, pq em produção ela aparece e o cliente liga dizendo que está dando erro?
Bem, eu sofri muito com essa exceção, pesquisei bastante e vi várias dicas porém nenhuma delas eu conseguia resolver, dai conversando com Edson Gonçalves o mesmo me passou dois links importantes o qual encontrei a solução um está em inglês e outro é da Caelum explicando o outro problema que é broken pipe que é bem comum aparecer.
Lets go..
Posts Relacionado:
Mas, Por que temos essa exceção em PRODUÇÃO?
A resposta é bem simples, se a conexão com seu banco ficar inativo por mais de 8 horas no caso do MySql, então o banco mata a conexão. E quando o cliente usando o pool de conexão tenta usar, já eh tarde demais.
Solucionando
Aqui estou usando o pool de conexão que é required em qualquer aplicação JEE, até por questão de manutenção, porém vou limitar o code apenas para meu arquivo context.xml.
Portanto abra seu arquivo META-INF/context.xml que faz o pool de conexão que você deve deixa-lo como o código a seguir:
Depois disso, manda o xml para produção, dar um restart no servidor e testa. Aqui resolveu. Até que fim.
o código anterior era assim:
Bem, espero que o post tenha ajudado, resolvi fazer esse post tendo como referencia o post em ingles, devido durante as minhas pesquisas não achei nada em português tão objetivo e direto para resolver o problema, só encontrava, discussões e opiniões de como poderia ser resolvido, mas nada de resolver. Agora já temos :). Mas, não se esqueça que isso tem efeitos apenas em produção.
abraços, see ya!!
Boa Camilo! Excelente post. Esse é um problema realmente recorrente em projetos com Hibernate
opa! Paulo, pow nem fale desse problema, tirou meu sossego por alguns dias na epoca. So lembro que enquanto nao resolvia tinha que dar o velho restart no servidor, para deixar o cliente feliz por algum tempo. hehe.
abracos,
Por que não explicou a solução ? kkkkk
Camilo,
Valeu por ter postado. Agora não precisarei mais explicar isso aos clientes. Vou passar direto para o seu post.
Parabéns!
opa! Edson,
hehe, pow nem fale, essa excecao eh um tremendo transtorno e tira o sossego de qualquer ser humano.
abracos, thanks.
sou traumatizado com esse tal de broken pipe , acostumado a trabalhar com JBoss , fui colocar uma aplicação na web no tom cat e passei muita dor de cabeça.Obrigado pelas dicas
Olá Camilo e Paulo, parabéns pelos posts, estou tendo este mesmo problema. Configurei tudo certinho como estava no post do Paulo, porém utilizei o JNDI do tomcat no lugar de configurar o acesso ao BD direto no Hibernate e o problema continuou (java.net.SocketException: Broken pipe). Estou testando da forma como está aqui em seu post, porém percebi que não está utilizando o C3PO e acabei entendendo que o JNDI e o C3PO fazem a mesma coisa, ou seja, ambos fazem o pool de conexões (pf, me corrija se eu estiver errado), então retirei o C3PO e vou subir pro servidor e testar (www.integrator.com.br é claro 🙂 ), ficando ok posto pra galera o resultado.
Olá Julio,
eu acredito que agora vai rodar 🙂
Olá Camilo, retirei as configurações do c3po, copiei e colei as configurações do JNDI da forma como está aqui, porém não funcionou (digo continuou ocorrendo o broken pipe), mais retirei o JNDI e deixei somente o Hibernate com o C3PO (como está no post do Paulo) e está já a dois dias em teste e não ocorreu o broken pipe. O meu maior erro acredito ter sido utilizar os dois junto (JNDI com C3PO). Estou agitando outras coisas da aplicação, depois volto a fazer novos testes e dou um retorno pra galerinha aqui do blog, mais uma vez parabéns pelo post.
Abç.
Júlio