These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: Connection.close() has already been called (after idle)
PostPosted: Thu Nov 15, 2007 3:44 am 
Newbie

Joined: Thu Nov 15, 2007 3:17 am
Posts: 19
Hi,

I developed a web application using JSP/ Servlets + Annotated Hibernate 3 which works very well on a local test server. Database is MySQL.
Now I deployed it on a Tomcat 6 (+ using the tomcat realm authentication feature). It works well for many hours (8+ hours), but then every request with db access is throwing this exception:

Code:
org.hibernate.TransactionException: JDBC commit failed
        at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:130)
        at de.volkswagen.ap.website.filter.HibernateSessionFilter.commitTransactions(HibernateSessionFilter.java:32)
        at de.volkswagen.ap.website.filter.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:76)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        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:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        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:263)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:595)
Caused by: 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:3728)
        at com.mysql.jdbc.Connection.commit(Connection.java:2267)
        at org.hibernate.transaction.JDBCTransaction.commitAndResetAutoCommit(JDBCTransaction.java:139)
        at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:115)
        ... 15 more
org.hibernate.TransactionException: JDBC rollback failed
        at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:170)
        at de.volkswagen.ap.website.filter.HibernateSessionFilter.commitTransactions(HibernateSessionFilter.java:49)
        at de.volkswagen.ap.website.filter.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:76)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        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:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        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:263)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:595)
Caused by: 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:3728)
        at com.mysql.jdbc.Connection.rollback(Connection.java:5204)
        at org.hibernate.transaction.JDBCTransaction.rollbackAndResetAutoCommit(JDBCTransaction.java:183)
        at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:162)
        ... 15 more


HibernateSessionFilter is my implementation of the Open-Session-In-View concept, described in the hibernate documention. The exceptions are thrown on either transaction.commit() or transaction.rollback().

My session configuration is as follows (no JTA or Spring):

Code:
        <property name="current_session_context_class">thread</property>
        <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
        <property name="hibernate.connection.release_mode">after_transaction</property>


I get the hibernate sessions via factory.getCurrentSession().

When I restart the web app. via tomcat manager, it works the whole work day, but next morning same problem.

I hope you can give me a hint, whats going wrong here.

Thanks in advance!

byto


Top
 Profile  
 
 Post subject:
PostPosted: Thu Nov 15, 2007 5:49 am 
Newbie

Joined: Thu Nov 15, 2007 3:17 am
Posts: 19
I have just found out that MySQL terminates connections after 8 hours of inactivity by default. It seems that Hibernate is not able to reconnect without configuring some kind of connection pool.

What's the easiest way for me to use connection pools with Tomcat 6 and MySQL?

TIA


Top
 Profile  
 
 Post subject:
PostPosted: Thu Nov 15, 2007 8:57 am 
Newbie

Joined: Thu Nov 15, 2007 3:17 am
Posts: 19
Problem is solved. I've configured Hibernate to use C3PO for connection pooling. You can set MySQL variable wait_timeout to a smaller value for better testing (default is 28800 sec).


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.