Spring lidando com conexao que possui timeout por inatividade

0 respostas
spranta

Olá pessoal, tenho uma aplicação que acabei de colocar em produção, nela estou utilizando SPRING + JSF + JPA (Hibernate). Acontece que quando passa-se um tempo sem trabalhar na aplicação, por exemplo, de um dia pro outro, quando eu entro na aplicação e tento executar uma primeira ação é exibido o erro abaixo, no entanto, logo após este erro, todas as outras ações funcionam, até mesmo a que originou o erro, ou seja, ele acontece uma vez e tá consertado. Imagino eu na minha ignorancia ser por causa de algum time out do banco de produção, que fecha a conexao depois de um tempo dai quando dá um getConnection avisa que a conexao está fechada, e então ela deve ser recriada. Estou supondo isso tudo porque quem gerencia minhas conexoes e transações é o SPRING e não uma classe minha mesmo. Se o erro acontecesse dentro de uma classe minha eu poderia antes de emiti-lo tratá-lo pegando uma nova conexao aberta. Mas enfim, gostaria de saber se voces sabem como eu posso fazer o SPRING tratar esse tipo de erro, ou seja, se a conexao estiver fechada (por timeout) ele abre uma nova já imediatamente e nao emite um erro, caso esse seja mesmo o meu problema. Abaixo o erro que citei:

12 Nov 2007 17:13:23 [TP-Processor16] INFO org.apache.myfaces.custom.redirectTracker.RedirectTrackerManager - No context init parameter 'org.apache.myfaces.redirectTracker.POLICY' found, using default value org.apache.myfaces.custom.redirectTracker.policy.NoopRedirectTrackPolicy 12 Nov 2007 17:13:23 [TP-Processor16] INFO org.apache.myfaces.custom.redirectTracker.RedirectTrackerManager - No context init parameter 'org.apache.myfaces.redirectTracker.MAX_REDIRECTS' found, using default value 20 12 Nov 2007 17:13:28 [TP-Processor16] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 08003 12 Nov 2007 17:13:28 [TP-Processor16] ERROR org.hibernate.util.JDBCExceptionReporter - Connection.close() has already been called. Invalid operation in this state. 12 Nov 2007 17:13:28 [TP-Processor16] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/bmw].[FacesServlet] - Servlet.service() for servlet FacesServlet threw exception com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Connection.close() has already been called. Invalid operation in this state. at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:888) at com.mysql.jdbc.Connection.getMutex(Connection.java:3714) at com.mysql.jdbc.Connection.setAutoCommit(Connection.java:5341) at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:104) at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423) at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144) at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:119) at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:57) at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1326) at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:38) at org.springframework.orm.jpa.DefaultJpaDialect.beginTransaction(DefaultJpaDialect.java:70) at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:326) at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:350) at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:262) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:101) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) at $Proxy20.getAlfabeto(Unknown Source) at com.mcp.intranetAcademica.action.AlunoAct.pesquisar(AlunoAct.java:123) 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.sun.el.parser.AstValue.invoke(AstValue.java:157) at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:283) at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68) at com.sun.facelets.el.LegacyMethodBinding.invoke(LegacyMethodBinding.java:69) at javax.faces.component.UICommand.broadcast(UICommand.java:89) at org.ajax4jsf.component.AjaxActionComponent.broadcast(AjaxActionComponent.java:61) at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:186) at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:164) at org.ajax4jsf.component.AjaxViewRoot.processDecodes(AjaxViewRoot.java:280) at org.apache.myfaces.lifecycle.ApplyRequestValuesExecutor.execute(ApplyRequestValuesExecutor.java:32) at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95) at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:139) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141) at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:111) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151) at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200) at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283) at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773) at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703) at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685) at java.lang.Thread.run(Thread.java:619)

Criado 12 de novembro de 2007
Respostas 0
Participantes 1