2012-09-26 190 views
0

我使用Java。無法打開連接

oracle.ucp.jdbc.PoolDataSource

用於獲取連接。每個連接都包裝到自定義類(歷史解決方案)。通常連接正在通過entityManager獲取。我的系統需要高性能處理。有ThreadPool使用它。線程池可以同時提供線程,如連接池。 每一件事情能正常工作,但有時我得到異常(在這一刻只使用4個連接):

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

請檢查您是

<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"/> 

設置適當的值時,可以檢查配置here

您應該更改連接池處於休眠。

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

Hibernate自己的連接池算法,然而,相當簡陋。它旨在幫助您開始使用,不適用於生產系統,甚至不適用於性能測試。您應該使用第三方池以獲得最佳性能和穩定性。只需將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