Perdendo a Conexão no Oracle! (Hibernate)

Olá possoal, tudo bem ? ? ? ?

Tô precisando de uma ajudinha de vocês que são mestres em desenvolvimento web com java.

Eu tenho uma aplicação rodando no tomcat e com banco oracle 10g.

Uso o hibernate 3 para persistencia e a implementação gerada pelo plugin hibernate syncronizer (eclipse).


O problema é que após algumas horas de inatividade, o sistema perde a conexão com o banco de dados.

Alguém já passou por isso. Quem poder me ajudar agradeço muito.

Abaixo a exceção:



LOGGER: org.hibernate.util.JDBCExceptionReporter
DATA : 2006-07-11 08:44:20,150
WARN : org.hibernate.util.JDBCExceptionReporter.logExceptions(JDBCExceptionReporter.java:71)
MSG : SQL Error: 17008, SQLState: null

LOGGER: org.hibernate.util.JDBCExceptionReporter
DATA : 2006-07-11 08:44:20,150
ERROR : org.hibernate.util.JDBCExceptionReporter.logExceptions(JDBCExceptionReporter.java:72)
MSG : Conexão Fechada

LOGGER: com.opensymphony.webwork.dispatcher.DispatcherUtils
DATA : 2006-07-11 08:44:20,150
ERROR : com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:245)
MSG : Could not execute action

org.hibernate.exception.GenericJDBCException: could not execute query
	at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
	at org.hibernate.loader.Loader.doList(Loader.java:2148)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
	at org.hibernate.loader.Loader.list(Loader.java:2024)
	at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
	at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:308)
	at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1106)
	at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
	at org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:749)
	at tre.sisurna.ww.action.ActionAutenticaUsuario.execute(ActionAutenticaUsuario.java:85)
	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:585)
	at com.opensymphony.xwork.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:365)
	at com.opensymphony.xwork.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:217)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:191)
	at com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:137)
	at com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:81)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
	at com.opensymphony.xwork.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:115)
	at com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:81)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
	at com.opensymphony.webwork.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:171)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
	at com.opensymphony.xwork.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:151)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
	at com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:100)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:189)
	at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:113)
	at com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:233)
	at com.opensymphony.webwork.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:198)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Thread.java:595)
Caused by: java.sql.SQLException: Conexão Fechada
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
	at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:840)
	at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:759)
	at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:442)
	at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:368)
	at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:105)
	at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1561)
	at org.hibernate.loader.Loader.doQuery(Loader.java:661)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
	at org.hibernate.loader.Loader.doList(Loader.java:2145)

Se vc estiver usando pool de conexão do hibernate verifique a configuração.

Se estiver usando pool do servidor, verifique como configurar o teste de time out, ou então tire o time out da conexão do oracle.

flw

Olá Júnior,

Pô, obrigadão por me ajudar. Acho que essas informações são valiosas.

Vou ver se encontro algum tutorial no google mostrando como fazer essas configurações.

Valeu mesmo.

Oi júnior, posso te perguntar mais uma coisa ?

Qual pool tu acha melhor, o do tomcat ou o do hibernate?

É que eu nunca configurei isso. Deve tá o default.

No meu hibernate.cfg tmb não tem nenhuma configuração de pool.

Então acho que o pool do tomcat deve tá sendo usado por default.

Quanto ao pool isso é relativo, eu gosto de usar no hibernate para não depender do pessoal de infra.

Acrescente estas linhas no seu hibernate.cfg.xml:

<!-- Condiguração do c3p0 --> <property name="hibernate.c3p0.max_size">10</property> <property name="hibernate.c3p0.min_size">2</property> <property name="hibernate.c3p0.timeout">5000</property> <property name="hibernate.c3p0.max_statements">10</property> <property name="hibernate.c3p0.idle_test_period">3000</property> <property name="hibernate.c3p0.acquire_increment">2</property>

Obs.: Se for necessário mude os valores e lembre-se de incluir o jar do c3p0 que vem junto com o hibernate no diretorio lib.

flw

[b]Mas se eu colocar essas configurações do hibernate.

Automaticamente meu sistema deixará de utilizar o pool do tomcat?

[/b]

Obrigado mais uma vez! :wink:

Se vc não configurou nada no tomcat o seu sistema não está utilizando pool.

Ahh Junior, então acho que deve ser esse o problema.

Eu realmente não configurei nada no tomcat.

Pô, então vou testar as configurações de pool do hibernate.

Quando funcionar eu posto a confirmação aqui no forum.

Valeu Junior !

Olá Junior, pô cara, obrigadão pela ajuda.

As configurações que tu me passou do c3p0 funcionou.

Meu sistema está rodando desde ontem e ainda não perdeu a conexão com o banco de dados.

Eu coloquei nos libs a última versão do c3p0 que eu baixei no sourceforge.

Valeu mesmo, espero que esse tópico possa ajudar mais pessoas.

Amigos, estou com um problema parecido.
Minha aplicação não conecta se o banco tiver caído e voltado. Neste caso preciso reiniciar o tomcat. Penso que possa ter relação com o pool do c3po. Como eu poderia limpar o pool quando encontrasse uma falha de conexão?