Org.hibernate.exception.GenericJDBCException: could not execute query

Senhores,

tenho um sistema no seguinte cenário: JSF 2, JPA 2, Firebird 2.5, Hibernate 3.6.10 e c3po. Com acesso a dados session in view. No micro de desenvolvimento funciona perfeitamente. Funcionava perfeitamente também em produção (kinghost), no entanto, de uns dias para cá, quando está em produção eventualmente e de forma aleatória em qualquer módulo que acessa o banco de dados apresenta o erro abaixo. Se atualiza a página com F5 o sistema continua a funcionar normalmente. Desde já agradeço a todos que puderem ajudar.

An Error Occurred:

javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute query
- Stack Trace

javax.faces.el.EvaluationException: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute query
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at br.net.webjuris.util.CharSetFilter.doFilter(CharSetFilter.java:18)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at br.net.webjuris.util.JPAFilter.doFilter(JPAFilter.java:33)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at br.net.webjuris.util.ControleAcessoFilter.doFilter(ControleAcessoFilter.java:29)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
	at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:200)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:619)
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute query
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1389)
	at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1317)
	at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:307)
	at br.net.webjuris.sistemas.ModulosDAO.buscarPorNomeArquivo(ModulosDAO.java:63)
	at br.net.webjuris.basico.DirPerUsuSisRN.pesquisarDireito(DirPerUsuSisRN.java:27)
	at br.net.webjuris.compras.ModeloComprasBean.Compras(ModeloComprasBean.java:37)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
	... 33 more
Caused by: org.hibernate.exception.GenericJDBCException: could not execute query
	at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.loader.Loader.doList(Loader.java:2545)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
	at org.hibernate.loader.Loader.list(Loader.java:2271)
	at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:459)
	at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:365)
	at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1268)
	at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
	at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:274)
	... 44 more
Caused by: org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544726. Error reading data from the connection.
null
	at org.firebirdsql.jdbc.InternalTransactionCoordinator$LocalTransactionCoordinator.ensureTransaction(InternalTransactionCoordinator.java:312)
	at org.firebirdsql.jdbc.InternalTransactionCoordinator$LocalTransactionCoordinator.executionStarted(InternalTransactionCoordinator.java:341)
	at org.firebirdsql.jdbc.InternalTransactionCoordinator.executionStarted(InternalTransactionCoordinator.java:39)
	at org.firebirdsql.jdbc.AbstractStatement.notifyStatementStarted(AbstractStatement.java:239)
	at org.firebirdsql.jdbc.AbstractStatement.notifyStatementStarted(AbstractStatement.java:230)
	at org.firebirdsql.jdbc.AbstractPreparedStatement.<init>(AbstractPreparedStatement.java:132)
	at org.firebirdsql.jdbc.FBPreparedStatement.<init>(FBPreparedStatement.java:45)
	at sun.reflect.GeneratedConstructorAccessor222.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at org.firebirdsql.jdbc.FBStatementFactory.createPreparedStatement(FBStatementFactory.java:89)
	at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:1187)
	at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:942)
	at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:896)
	at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:324)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.mchange.v2.c3p0.stmt.GooGooStatementCache$1StmtAcquireTask.run(GooGooStatementCache.java:534)
	at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:635)
Caused by: org.firebirdsql.gds.GDSException: Error reading data from the connection.
null
	at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.receiveResponse(AbstractJavaGDSImpl.java:2185)
	at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.iscStartTransaction(AbstractJavaGDSImpl.java:788)
	at org.firebirdsql.gds.impl.GDSHelper.startTransaction(GDSHelper.java:585)
	at org.firebirdsql.jca.FBManagedConnection.findIscTrHandle(FBManagedConnection.java:1222)
	at org.firebirdsql.jca.FBManagedConnection.internalStart(FBManagedConnection.java:1143)
	at org.firebirdsql.jca.FBLocalTransaction.internalBegin(FBLocalTransaction.java:140)
	at org.firebirdsql.jca.FBLocalTransaction.begin(FBLocalTransaction.java:112)
	at org.firebirdsql.jdbc.InternalTransactionCoordinator$LocalTransactionCoordinator.ensureTransaction(InternalTransactionCoordinator.java:310)
	... 20 more

Estou com o mesmo problema!

Você conseguiu resolver?

Isso ta com cara de ser problema de timeout, tem alguma configuração para aumentar isto? Em produção com a rede maior pode haver perda de comunicação com o banco de dados.

Não sei se irá ajudar, mas encontrei um problema similar no link abaixo

http://forum.locaweb.com.br/showthread.php?t=5900

Veja o post de
eduardoboss

Talvez estas configurações ajudem a resolver este problema de conexão

[quote=estrazulas]Não sei se irá ajudar, mas encontrei um problema similar no link abaixo

http://forum.locaweb.com.br/showthread.php?t=5900

Veja o post de
eduardoboss

Talvez estas configurações ajudem a resolver este problema de conexão[/quote]
pode copiar ai a solução?

Pessoal,

Estou com o mesmo problema.
Gostaria de saber se teve solução para este problema?

Difícil saber só com as informações presentes aqui, mas tenta certificar se isso não é conexões “mortas” que estão ficando no pool de conexões de banco. No seu caso, pelo que você disse, você mesmo ta gerenciando as conexões com c3po. Não mexo com isso há muito muito, então não lembro se existe alguma configuração para “verificar se a conexão está ativa” antes de fornece-la.

Já vi problemas parecidos acontecerem em datasources gerenciados por servidores de aplicação. A infra muitas vezes é instável, e as conexões se perdem por motivos aleatórios (falha na comunicação de rede por exemplo). O servidor usa as conexões sem saber se elas ainda são válidas, e o erro ocorre. Nesse caso é preciso fazer isso que falei pra você: Configurar o pool para verificar as conexões antes de entrega-las ao cliente (a aplicação nesse caso).

edit:
Em uma rápida pesquisa no google encontrei esse tópico no stackoverflow: http://stackoverflow.com/questions/12507021/best-configuration-of-c3p0
Da uma olhada se essa configuração mencionada, testConnectionOnCheckOut, não é o que você precisa.

Rodrigo

Incluí a propriedade testConnectionOnCheckOut = true, mas ainda continuo tendo o problema.

Percebi que no meu caso, quando existe uma certa quantidade de usuários logados na aplicação fazendo algumas transações trava o sistema.
O glassfish/c3p0 mata a conexão com o banco de dados e a aplicação não conecta mais com o banco tendo que restartar o glassfish para volta.

Segue abaixo minha configuração do c3p0:

     [code]   <property name="hibernate.connection.provider_class" value="org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider"/>                   
		<property name="hibernate.c3p0.min_size" value="1"/>
		<property name="hibernate.c3p0.minPoolSize" value="0"/>
		<property name="hibernate.c3p0.maxPoolSize" value="40"/>  
		<property name="hibernate.c3p0.acquireIncrement" value="5"/>		
		<property name="hibernate.c3p0.timeout" value="5000"/>
		<property name="hibernate.c3p0.maxIdleTime" value="3600"/>
		<property name="hibernate.c3p0.max_statements" value="0"/>
		<property name="hibernate.c3p0.maxStatementsPerConnection" value="0"/>
		<property name="hibernate.c3p0.idle_test_period" value="3000"/>
		<property name="hibernate.c3p0.numHelperThreads" value="3"/>
		<property name="hibernate.c3p0.testConnectionOnCheckOut" value="true"/>
		<property name="hibernate.c3p0.autocommit" value="false"/>[/code]

Caso tenha alguma outra sugestão de configuração do c3p0…

Oi William,

Realmente não conheço muito de c3po para dar qualquer outra sugestão. Uma que eu poderia dar é você simplesmente deixar de usa-lo. Já que você ta usando o glassfish, porque não deixar o glassfish gerenciar o pool de conexões (criando um datasource)?

Quem sabe assim seu problema é resolvido por tabela :slight_smile:

Ok Rodrigo,

Vou remover o c3p0 e deixar o próprio glassfish gerenciar…

valeu e obrigado pela sugestão!

Depois volta pra dizer se resolveu ou não.

Abraço!