DB後dropps空閒連接或DB是往下再往我收到以下錯誤在我的webapp:Guice JPA - 「此連接已關閉。」錯誤
javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: could not inspect JDBC autocommit mode
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1365)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1293)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:265)
... 60 more
Caused by: org.hibernate.exception.JDBCConnectionException: could not inspect JDBC autocommit mode
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:131)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.isAutoCommit(LogicalConnectionImpl.java:395)
at org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl.afterNonTransactionalQuery(TransactionCoordinatorImpl.java:195)
at org.hibernate.internal.SessionImpl.afterOperation(SessionImpl.java:565)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1220)
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:256)
... 70 more
Caused by: org.postgresql.util.PSQLException: This connection has been closed.
at org.postgresql.jdbc2.AbstractJdbc2Connection.checkClosed(AbstractJdbc2Connection.java:712)
at org.postgresql.jdbc2.AbstractJdbc2Connection.getAutoCommit(AbstractJdbc2Connection.java:678)
at sun.reflect.GeneratedMethodAccessor138.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.tomcat.jdbc.pool.ProxyConnection.invoke(ProxyConnection.java:126)
at org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:99)
at org.apache.tomcat.jdbc.pool.DisposableConnectionFacade.invoke(DisposableConnectionFacade.java:63)
at $Proxy66.getAutoCommit(Unknown Source)
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.isAutoCommit(LogicalConnectionImpl.java:392)
當這個開始,我得到一個
SQL Error: 0, SQLState: 08006 - An I/O error occured while sending to the backend.
但之後,它只是:
SQL Error: 0, SQLState: 08003 - This connection has been closed.
問題是:我已經設置testOnBorrow,所以我希望只獲得打開的連接。
如果有幫助:池ususaly包含好的和壞的連接組合,並且問題似乎隨着時間的推移而逐漸消失,但是我的服務器運行時間> 12h,並且返回的連接仍然不正常。 重啓後,evertything工作正常(一段時間)。
我已經調試了一些更多的問題,好像池正在返回不良連接,例如如果在DB上有所有連接中斷後,我得到:
SQL Error: 0, SQLState: 57P01
然後通常的東西 - 從池中返回的連接被終止。 問題是:它是一個應用程序問題嗎?
我嘗試通過JMX清除池但這似乎沒有任何效果。 另一個奇怪的是,即使應用程序顯然沒有做任何事情(通過線程轉儲進行檢查),JMX bean顯示7個活動連接和0個空閒連接。當我執行一個需要數據庫訪問的請求時,我立即得到響應(說明沒有可用的空閒連接),但JMX在此之後顯示7個活動連接和0個空閒連接。
PS。也許我錯過了一些明顯的東西,這是我的一個連接管理問題?我正在使用通過persistence.xml配置的JPA EntityManager,所以也許我做錯了什麼,連接在使用後沒有正確關閉(返回)?
你是怎麼解決這個問題? –