Solucionando Communication link failure Hibernate com Pool + Mysql

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?

hibernateexcecaopool

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!!

9 comentários em “Solucionando Communication link failure Hibernate com Pool + Mysql”

    1. camilolopes

      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,

    1. camilolopes

      opa! Edson,
      hehe, pow nem fale, essa excecao eh um tremendo transtorno e tira o sossego de qualquer ser humano.
      abracos, thanks.

  1. Ricardo Johannsen

    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

  2. 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.

  3. 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

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *