Uploaded image for project: 'Spring Framework'
  1. Spring Framework
  2. SPR-10395

PooledConnection has already been closed exception with Hibernate 4.2

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Minor
    • Resolution: Complete
    • Affects Version/s: 3.2.2
    • Fix Version/s: 3.2.3, 4.0 M1
    • Component/s: Data:ORM
    • Labels:
      None
    • Last commented by a User:
      true

      Description

      When using Spring's JdbcTemplate inside a transactional-service with the JpaTransactionmanager and the HibernateJpaDialect an exception is thrown.

      Using Hibernate-4.2.0.Final, JPA, Spring-3.2.2 and I get:

      Caused by: java.sql.SQLException: PooledConnection has already been closed.
              at org.apache.tomcat.jdbc.pool.DisposableConnectionFacade.invoke(DisposableConnectionFacade.java:86)
              at com.sun.proxy.$Proxy19.commit(Unknown Source)
              at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doCommit(JdbcTransaction.java:112)
              ... 44 more
      

      This happens both with c3p0 and tomcat-pool that comes with tomcat7.

      I've tested in two projects with the same results. This doesn't happen with Hibernate-4.1.x

      I know i should provide a test-case but I only have a scala-project at hand and you probably want that out of the equation...

        Issue Links

          Activity

          Hide
          andreak Andreas Joseph Krogh added a comment -

          Attached example maven-project.
          extract it and run "mvn install" and it fails.

          Replacing the Hibernate-version with 4.1.9.Final works.

          Show
          andreak Andreas Joseph Krogh added a comment - Attached example maven-project. extract it and run "mvn install" and it fails. Replacing the Hibernate-version with 4.1.9.Final works.
          Hide
          juergen.hoeller Juergen Hoeller added a comment -

          The problem here is that Hibernate 4.2 exposes the actual underlying Connection now - instead of the "borrowed connection" handle that it used to return, which was a proxy that interpreted a "close()" call as returning the borrowed connection to the Hibernate Session.

          I've fixed this in the course of other JPA-related changes for 4.0 M1, with HibernateJpaDialect's HibernateConnectionHandle simply not calling "close()" on a Hibernate 4.x provided Connection anymore. In contrast to Hibernate 3.6 (see SPR-6895), Hibernate 4.1 didn't do anything special when receiving a "close()" call on a borrowed connection handle, so it should be safe to not call "close()" against Hibernate 4.x in general.

          To be backported to 3.2.3. Note that we need to make sure that we're not sacrificing HibernateJpaDialect's JPA 1.0 and Hibernate 3.2-3.5 compatibility there. I would also suggest to keep 3.2.3 compiling and testing against Hibernate 4.1 since that is the primary version that it has been designed for. 4.0 M1 compiles against Hibernate 4.2 now and needs to be tested against 4.2 as well as the upcoming 4.3 (with JPA 2.1 support).

          Juergen

          Show
          juergen.hoeller Juergen Hoeller added a comment - The problem here is that Hibernate 4.2 exposes the actual underlying Connection now - instead of the "borrowed connection" handle that it used to return, which was a proxy that interpreted a "close()" call as returning the borrowed connection to the Hibernate Session. I've fixed this in the course of other JPA-related changes for 4.0 M1, with HibernateJpaDialect's HibernateConnectionHandle simply not calling "close()" on a Hibernate 4.x provided Connection anymore. In contrast to Hibernate 3.6 (see SPR-6895 ), Hibernate 4.1 didn't do anything special when receiving a "close()" call on a borrowed connection handle, so it should be safe to not call "close()" against Hibernate 4.x in general. To be backported to 3.2.3. Note that we need to make sure that we're not sacrificing HibernateJpaDialect's JPA 1.0 and Hibernate 3.2-3.5 compatibility there. I would also suggest to keep 3.2.3 compiling and testing against Hibernate 4.1 since that is the primary version that it has been designed for. 4.0 M1 compiles against Hibernate 4.2 now and needs to be tested against 4.2 as well as the upcoming 4.3 (with JPA 2.1 support). Juergen
          Hide
          ramesh.samarasam Ramesh Samarasam added a comment -

          I'm having the same exception with the Hibernate 4.1.9.Final and spring framework 3.1.3.RELEASE, Please help
          Tomcat Version is 7.0.37
          Connection has already been closed. (java.sql.SQLException) org.apache.tomcat.jdbc.pool.ProxyConnection.invoke(ProxyConnection.java:117) org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:109) org.apache.tomcat.jdbc.pool.DisposableConnectionFacade.invoke(DisposableConnectionFacade.java:80) com.sun.proxy.$Proxy33.rollback(Unknown Source)

          Show
          ramesh.samarasam Ramesh Samarasam added a comment - I'm having the same exception with the Hibernate 4.1.9.Final and spring framework 3.1.3.RELEASE, Please help Tomcat Version is 7.0.37 Connection has already been closed. (java.sql.SQLException) org.apache.tomcat.jdbc.pool.ProxyConnection.invoke(ProxyConnection.java:117) org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:109) org.apache.tomcat.jdbc.pool.DisposableConnectionFacade.invoke(DisposableConnectionFacade.java:80) com.sun.proxy.$Proxy33.rollback(Unknown Source)

            People

            • Assignee:
              juergen.hoeller Juergen Hoeller
              Reporter:
              andreak Andreas Joseph Krogh
              Last updater:
              Ramesh Samarasam
            • Votes:
              6 Vote for this issue
              Watchers:
              12 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:
                Days since last comment:
                1 year, 6 weeks ago