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)