Java。无法打开连接 [英] Java. Cannot open connection

查看:214
本文介绍了Java。无法打开连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用


oracle.ucp.jdbc.PoolDataSource


获取连接。每个连接包装到自定义类(历史解决方案)。一般来说,连接是通过entityManager获取的。我的系统需要高性能处理。有ThreadPool使用它。线程池可以同时提供 15 个线程,如连接池。
每一件事情都很好,但有时我得到异常(在这一刻只使用4个连接):

  2012 -09-26 17:51:45.835 |错误| ThreadExecutor-7 | org.hibernate.ejb.AbstractEntityManagerImpl |线程ThreadExecutor-7中的异常
javax.persistence.PersistenceException:org.hibernate.exception.GenericJDBCException:无法打开连接
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)
...
在java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:886)
在java。 util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:908)
在java.lang.Thread.run(Thread.java:619)
Caused by:org.hibernate.exception.GenericJDBCException:无法打开连接
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)
在org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52)
在org.hibernate.jdbc.ConnectionManager。 openConnection(ConnectionManager.java:449)
在org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
在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)



如果我同步指定的 getConnection 系统性能下降8-12次。



有任何解决方案吗?

解决方案

设置适当的值

 < property name =minPoolSizevalue =5/& 
< property name =maxPoolSizevalue =100/> //如果你想要改变
< property name =initialPoolSizevalue =5/>
< property name =validateConnectionOnBorrowvalue =true/>
< property name =maxStatementsvalue =10/>

您可以检查配置这里



您应该在hibernate中更改连接池。



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


I'm using

oracle.ucp.jdbc.PoolDataSource

for getting connections. Each connection wrapped to custom class (historic solution). Generally connection is getting by entityManager. My system require hight performance processing. There is ThreadPool using for it. Thread pool can provide 15 threads at the same time, like connection pool. Every thing works fine, but sometimes i get exception (in this moment were used only 4 connections):

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)

If i synchronize specified getConnection performance of the system going down 8-12 times.

Is any ideas for fix?

解决方案

Please check you are setting appropriate values for

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

You can check configuration here

You should change connection pooling in hibernate.

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

Hibernate's own connection pooling algorithm is, however, quite rudimentary. It is intended to help you get started and is not intended for use in a production system, or even for performance testing. You should use a third party pool for best performance and stability. Just replace the hibernate.connection.pool_size property with connection pool specific settings. This will turn off Hibernate's internal pool. For example, you might like to use c3p0.

hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=1800
hibernate.c3p0.max_statements=50

这篇关于Java。无法打开连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆