pessoal, to com um problema que não estou conseguindo resolver.
tenho uma appweb com hibernate.
há uma action generica com todos os controles genericos: controle de acesso, beans, transações, exceptions…
sempre quando a action generica é executada, a ultima session do hibernate é fechada. Alem disso abro uma transação (e session) e a fecho ao final da execução da action. Porem existe objetos (lazy do hibernate) que são carregados durante a execução do JSP, o que não me permite fechar a session ao final da action e sim no inicio da proxima action (ou a ultima session).
aparentemente está tudo ok.
starto o servidor e uso normalmente, sem problemas…
o que está acontecendo é que após um bom periodo sem uso, acontece um monte de erros no hibernate. parece que é um timeout. Talvez seja na ultima session que foi fechada ou então na SessionFactory que foi perdida.
um dos erros:
org.hibernate.exception.GenericJDBCException: could not execute query
mesmo assim dá um erro apos muito tempo sem atividade.
o problema parece que é na conecção…
após um tempo, a conection com o bd é fechada, ai quando vou iniciar uma session dá este erro:
java.sql.SQLException: No operations allowed after connection closed.
at com.mysql.jdbc.Connection.checkClosed(Connection.java:2647)
at com.mysql.jdbc.Connection.rollback(Connection.java:1410)
at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:134)
at org.noip.fabiobh.db.Persistencia.rollback(Persistencia.java:240)
at org.noip.fabiobh.control.action.GenericAction.execute(GenericAction.java:54)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.noip.fabiobh.db.SessionFilter.doFilter(SessionFilter.java:43)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)
E mais uma coisa: o forum é algo comunitário, e o pessoal que ajuda os
outros faz isso no tempo livre - o que, em muitos casos, é quase
inexistente. Se ninguém respondeu ainda, tenha paciencia e espere até
que alguem o faça
Primeiro que fviana é muito groça para quem sabe pouco, tem coisas feias nesse código, um deles é iniciar transação com banco de dados na action isso não se faz é muito feio, segundo é bom estudar um pouco e ler sovbre EntityManager ele vai cuidar do estado dos seus objetos, e você fica fechando conexão na mçao so pode dar problema mesmo, se você fecha a sessão e na jsp faz alguma coisa parecida com isto usuario.nome é lógico que vai dar problema afinal não existe mais como o objeto ser recuperado ja que você matou a sessão a qual o mesmo estav arelacionada!! pelo visto vc não sabe nada de java e Hibernate a e padrões e nem modelo de 3 camadas.