0

I have a Web application were, I am using hibernate 3.3.2 with c3p0 0.9.2.1

When I am running the web application some times I am getting following exception

java.sql.SQLException: Operation not allowed after ResultSet closed
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
at com.mysql.jdbc.ResultSetImpl.checkClosed(ResultSetImpl.java:794)
at com.mysql.jdbc.ResultSetImpl.next(ResultSetImpl.java:7139)
at com.mchange.v2.c3p0.impl.NewProxyResultSet.next(NewProxyResultSet.java:2859)
at org.hibernate.loader.Loader.doQuery(Loader.java:720)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
at org.hibernate.loader.Loader.doList(Loader.java:2232)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2129)
at org.hibernate.loader.Loader.list(Loader.java:2124)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:312)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1723)
at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:175)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:67)
at zumigo.dal.CompanyDataManager.getCompanyNameList(CompanyDataManager.java:1331)
at zumigo.businesslogic.CompanyManager.getCompanyNameList(CompanyManager.java:277)
at org.apache.jsp.jsp.zumigoadmin_jsp._jspService(zumigoadmin_jsp.java:978)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:709)
at org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:680)
at org.apache.jsp.jsp.login_jsp._jspService(login_jsp.java:267)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)

As per the log same connection is executing the query and one is successful and another is getting this exception. I search SO and hibernate sites. In one of the forum it was mentioned that add hibernate.connection.release_mode as after_statement. But this is not solving my issue. Can someone tell me what is wrong and how to overcome this issue?

Natraj
  • 397
  • 4
  • 9
  • 35
  • which HQL or criteria list throws this exception,is there any pattern to reproduce the error..?you can try hibernate.connection.release_mode :auto. issue might be because of transaction management injection..may be ur injecting transaction management in a layer and trying to access entity outside transaction where result set etc is closed.. – Rajesh Apr 22 '14 at 13:56
  • I have a function getCompanyNameList which is getting called many times during a operation for that I am getting the above exception for the first time I load the page afterwards I do not see this exception. I have even cleared the singleton entity manager object before executing the select query. The query is built as follows `Query qry = entityMgrObj.createNativeQuery("select company_name from company order by company_name asc"); List result = qry.getResultList();` The exeception is thrown on the line `qry.getResultList()` – Natraj Apr 23 '14 at 05:37
  • what was the reason for native sql? – Rajesh Apr 23 '14 at 10:01
  • Client requirement. They did not want to use HQL. – Natraj Apr 23 '14 at 10:46
  • CLient Requirement?? What they have to do with this..any way god bless such client..You can try Dynatrace tool..to identify list of connection created and when one code runs out of connection..also you can check code quality using sonar..may be that will point up some issue.. – Rajesh Apr 24 '14 at 18:22

1 Answers1

0

Same happened to me due to a simple error.

I used a shared singleton session that was killed by a discarded servlet...

you most likely kill the session somewhere and try to use it after. See documentation for guidelines JBoss Hibernate documentation :

The lifecycle of a Session is bounded by the beginning and end of a logical transaction.

Regards,

Sahi

Sahi
  • 31
  • 2