[Resolvido]Problema com timeout do MySQL

Boa noite,

Eu tenho enfrentado um problema conhecido na comunidade: O timeout de conexão com o MySQL após 8h de uso. Eu procurei diversas soluções na web e mesmo dentro do GUJ, mas nenhuma delas ofereceu a solução para meu problema. Implementei pool de conexões e alterei parâmetros na url de conexão com o banco, mas não foi o suficiente para acabar com a seguinte exceção:

om.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Connection.close() has already been called. Invalid operation in this state. sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) java.lang.reflect.Constructor.newInstance(Constructor.java:513) com.mysql.jdbc.Util.handleNewInstance(Util.java:406) com.mysql.jdbc.Util.getInstance(Util.java:381) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926) com.mysql.jdbc.ConnectionImpl.getMutex(ConnectionImpl.java:3032) com.mysql.jdbc.ConnectionImpl.rollback(ConnectionImpl.java:4606) org.hibernate.transaction.JDBCTransaction.rollbackAndResetAutoCommit(JDBCTransaction.java:217) org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:196) br.org.SEJA.dao.DaoFactory.rollback(DaoFactory.java:44) br.org.SEJA.interceptor.HibernateTransactionInterceptor.intercept(HibernateTransactionInterceptor.java:44) br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47) br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46) br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81) br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67) br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56) br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70) br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92) br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56) br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)

Aqui vai meu xml de configuração do hibernate:

[code]
com.mysql.jdbc.Driver
jdbc:mysql://seja.teo.br/retiros?autoReconnectForPools=true
usuario
*****

    <property name="hibernate.c3p0.min_size">1</property>
    <property name="hibernate.c3p0.max_size">10</property>
    <property name="hibernate.c3p0.timeout">300</property>
    <property name="hibernate.c3p0.max_statements">50</property>
    <property name="hibernate.c3p0.idle_test_periods">300</property>
    
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.hbm2ddl.auto">update</property>
    
    [/code]

Alguém tem uma idéia do que pode ser a causa do meu problema? (eu li algo controle de transações: Algumas não precisam de commit por serem apenas consulta, ou algo assim)

Agradeço a ajuda.

bom dia Djonatah,

Já tive problema de Timeout com o MySQL (diferente desse que vc reportou), consegui resolver alterando os valores padrões das variaveis.
Pra ver os valores, use (veja por interactive e wait).

Obrigado pela reposta joellazzari, já havia cogitado alterar a variavel de timeout do MySQL. Se não encontrar outra solução eu acredito que vá fazer isso mesmo.

Aguardo mais sugestões o/

Acabei descobrindo que o meu problema estava relacionado as minhas configurações do pool de conexões. Até onde eu li, parece que o hibernate faz o reconhecimento automático de quando estamos utilizando o C3pO para pool de conexões. Mas não foi o meu caso, então eu tive que explicitamente declarar qual era a classe que estava providenciando as conexões para a pool, e isso através da seguinte configuração:

Espero que venha ajudar mais pessoas em tempos futuros futuros :wink:

Abraços