는 유휴 연결을 dropps 또는 DB가 다운되어 다시 내 웹 애플리케이션에서 다음과 같은 오류 메시지가 표시됨 :이 내가Guice JPA - "이 연결이 닫혔습니다." DB 후 오류
SQL Error: 0, SQLState: 08006 - An I/O error occured while sending to the backend.
하지만 그 후 얻을 시작되면
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: 08003 - This connection has been closed.
문제는 다음과 같습니다. testOnBorrow를 설정 했으므로 열려있는 연결 만 얻을 것으로 예상됩니다.
만약 도움이된다면 : pool ususaly는 양호한 연결과 나쁜 연결이 혼합되어 있으며 시간이 지남에 따라 문제가 해결 된 것 같지만 서버가 12 시간 이상 가동되어 여전히 잘못된 연결이 반환되었습니다. 다시 시작한 후 모든 시간이 정상적으로 작동합니다.
문제를 좀 더 디버깅했으며 풀이 잘못된 연결을 반환하는 것처럼 보입니다. DB에서 모든 연결을 종료 한 후에 다음을 얻습니다.
SQL Error: 0, SQLState: 57P01
그런 다음 일반적으로 삭제 된 연결이 풀에서 반환됩니다. 질문 : 응용 프로그램 문제입니까?
JMX를 통해 풀을 제거하려고했지만 그 효과가없는 것 같습니다. 또 다른 이상한 점은 앱이 분명히 아무 것도하지 않는다고해도 (스레드 덤프를 통해 확인) JMX 빈은 7 개의 활성 연결과 0 개의 유휴 연결을 보여줍니다. DB 액세스를 요구하는 요청을 실행하면 즉각적으로 응답을 받지만 (유휴 연결을 사용할 수 없음), JMX는 그 후에 7 개의 활성 연결과 0 개의 유휴 연결을 보여줍니다.
추신. 어쩌면 나는 명백한 무언가를 놓치고 있는데 이것이 내 문제인 연결 관리 문제 일까? persistence.xml을 통해 구성된 JPA EntityManager를 사용하고 있습니다. 어쩌면 내가 잘못하고있는 중이고 연결이 사용 후 제대로 닫히지 않았습니다 (반환 된)?
방법이 오류를 해결 했습니까? –