2012-09-26 187 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