2012-09-26 5 views
0

을 열 수 없습니다. 각 연결은 사용자 정의 클래스에 래핑됩니다 (기존 솔루션). 일반적으로 연결은 entityManager에 의해 이루어집니다. 내 시스템은 hight 성능 처리가 필요합니다. 그것을 위해 ThreadPool이 있습니다. 스레드 풀은 연결 풀과 같이 개의 스레드를 동시에 제공 할 수 있습니다. 모든 일이 잘 작동하지만 때때로 나는 (이 순간 만 4 연결을 사용 하였다) 예외를 얻을 :Java. 내가 연결을 얻기를 위해</p> <blockquote> <p>oracle.ucp.jdbc.PoolDataSource</p> </blockquote> <p>를 사용하고 연결

2012-09-26 17:51:45.835 | ERROR | ThreadExecutor-7 | org.hibernate.ejb.AbstractEntityManagerImpl | Exception in thread "ThreadExecutor-7" 
javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Cannot open connection 
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1235) 
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1168) 
    at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:1245) 
    at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:63) 
    ... 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:619) 
Caused by: org.hibernate.exception.GenericJDBCException: Cannot open connection 
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140) 
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128) 
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52) 
    at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449) 
    at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) 
    at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142) 
    at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85) 
    at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1463) 
    at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:60) 
    ... 
    at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) 

을 내가 아래로 8-12 번가는 시스템의 의 getConnection 성능을 지정 동기화합니다.

수정을위한 아이디어가 있습니까?

답변

0

당신은 당신이 최대 절전 모드에서 연결 풀링을 변경해야합니다 구성을 here

을 확인할 수 있습니다

<property name="minPoolSize" value="5"/> 
<property name="maxPoolSize" value="100"/>//Change if you want 
<property name="initialPoolSize" value="5"/> 
<property name="validateConnectionOnBorrow" value="true"/> 
<property name="maxStatements" value="10"/> 

에 대한 적절한 값을 설정하고 확인하시기 바랍니다.

Hibernate 자신의 커넥션 풀링 알고리즘

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/session-configuration.html

은, 그러나, 아주 기초적인 것입니다. 프로덕션 시스템 또는 성능 테스트 용도로 시작하지 않고 사용하기위한 것이 아닙니다. 최상의 성능과 안정성을 위해 타사 풀을 사용해야합니다. hibernate.connection.pool_size 속성을 연결 풀 특정 설정으로 바꾸십시오. 이것은 Hibernate 내부 풀을 끌 것이다. 예를 들어, c3p0을 사용하고자 할 수 있습니다.

hibernate.c3p0.min_size=5 
hibernate.c3p0.max_size=20 
hibernate.c3p0.timeout=1800 
hibernate.c3p0.max_statements=50 
관련 문제