내 스탠드 자바 애플리케이션에서 우리는 Hibernate JPA 기반 Pooled DataSource를 사용하여 Oracle Database에 연결합니다. 우리는 간헐적으로 다음 예외를 얻고 있습니다. 하지만 다시 시도하면 연결 풀을 만드는 데 성공합니다. 또한 동일한 DB 서버에 접속하는 다른 서비스들도 연결 풀을 성공적으로 생성 할 수 있습니다.Connection (Hibernate, Oracle) 열기시 간헐적 PersistenceException/GenericJDBCException
이 문제를 해결하는 방법은 무엇입니까?
연결 유출 및 진단 방법이있을 수 있습니까? javax.persistence.PersistenceException : org.hibernate.exception.GenericJDBCException : 스레드 "주요"com.xyz.abc.inf.console.ConsoleException
는예외 열 수 없습니다 연결
at com.xyz.abc.inf.console.service.GatewayService.postStart(GatewayService.java:104)
at com.xyz.abc.inf.console.service.AbstractLaunchableService.start(AbstractLaunchableService.java:205)
at com.xyz.abc.inf.console.ConsoleLauncher.main(ConsoleLauncher.java:85)
에 의해 발생 : javax.persistence.PersistenceException : org.hibernate.exception.GenericJDBCException : 수 열려 있지 연결
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1387)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1310)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:273)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.orm.jpa.SharedEntityManagerCreator$DeferredQueryInvocationHandler.invoke(SharedEntityManagerCreator.java:311)
at $Proxy102.getResultList(Unknown Source)
at com.nrift.finch.inf.domain.repository.RepositoryBase.query(RepositoryBase.java:139)
at com.xyz.abc.inf.domain.dao.jpa.impl.ServiceRouteParticipantDaoImpl.findByServiceId(ServiceRouteParticipantDaoImpl.java:55)
at com.xyz.abc.inf.service.impl.RouteResolverServiceImpl.getRouteByService(RouteResolverServiceImpl.java:21)
at com.xyz.abc.inf.console.service.GatewayService.startCamelContextIfNotStarted(GatewayService.java:143)
at com.xyz.abc.inf.console.service.GatewayService.postStart(GatewayService.java:102)
... 2 more
에 의해 발생 : org.hibernate.exception.GenericJDBCException : 열 수 없습니다 연결
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
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.obtainConnection(LogicalConnectionImpl.java:304)
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:169)
at org.hibernate.engine.jdbc.internal.proxy.ConnectionProxyHandler.extractPhysicalConnection(ConnectionProxyHandler.java:82)
at org.hibernate.engine.jdbc.internal.proxy.ConnectionProxyHandler.continueInvocation(ConnectionProxyHandler.java:138)
at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
at $Proxy103.prepareStatement(Unknown Source)
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:147)
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:166)
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:145)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1854)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1831)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1811)
at org.hibernate.loader.Loader.doQuery(Loader.java:899)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
at org.hibernate.loader.Loader.doList(Loader.java:2516)
at org.hibernate.loader.Loader.doList(Loader.java:2502)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2332)
at org.hibernate.loader.Loader.list(Loader.java:2327)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:490)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:355)
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:195)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1247)
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:264)
... 13 more
에 의해 발생 : java.sql.SQLException : 클라이언트가 Connection을 체크 아웃하려는 시도가 시간 초과되었습니다.
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106)
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:527)
at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:70)
at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:292)
데이터베이스 서버 : 오라클 11g
클라이언트 구성 :
[루트 @의 eighamq1 ~] # 개에서 uname -a 리눅스 eighamq1.nrifintech.com 2.6.18-194.el5 # 1 SMP Tue Mar 16 21:52:39 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
[root @ eighamq1 ~] # cat/etc/redhat-release Red Hat Enterprise Linux 서버 릴리스 5.5 (Tikanga)
[루트 @의 eighamq1 ~] # 자바 -version 자바 버전 "1.7.0" 자바 (TM) SE 런타임 환경 자바 핫스팟 (TM) 64 비트 서버 VM (1.7.0-B147를 구축) (빌드 21.0-b17, 혼합 모드)
[root @ eighamq1 ~] # mvn -v Apache Maven 3.0.4 (r1232337; 2012-01-17 14 : 14 : 56 + 0530) Maven 홈 : /usr/local/maven-3.0.4 Java 버전 : 1.7.0, 공급 업체 : Oracle Corporation Java 홈 :/usr/java/jdk1. 7.0/JRE 기본 로케일 : ko 페이지, 플랫폼 인코딩 : UTF-8 OS 이름 : "리눅스", 버전 : "2.6.18-194.el5"아치 "AMD64"가족 : "유닉스"
사용 JDBC.properties
jdbc.database.driverClass = oracle.jdbc.OracleDriver
jdbc.database.url = jdbc:oracle:thin:@172.16.29.92:1521:d11gr21
jdbc.database.initialLimit = 1
jdbc.database.maxLimit = 5
jdbc.database.minLimit = 1
jpa.hibernate.dialectClass = org.hibernate.dialect.Oracle10gDialect
jdbc.database.initialPoolSize = 10
jdbc.database.minPoolSize = 5
jdbc.database.maxPoolSize = 20
jdbc.database.maxStatements = 0
jdbc.database.acquireIncrement = 5
jdbc.database.acquireRetryAttempts = 5
jdbc.database.checkoutTimeout = 1000
유물 :
,536,ojdbc16-11.2.0.1.0.jar
c3p0-0.9.1.1.jar
hibernate-entitymanager : 4.1.12.Final
hibernate-commons-annotations : 4.0.1.Final
hibernate-c3p0 : 4.1.12.Final
hibernate-commons-annotations : 4.0.1.Final
hibernate-jpa-2.0-api : 1.0.1.Final