我花了最后几天试图在几天前提出的开发过程中找到一些新问题的原因……而我还没有找到它.但我找到了解决方法.但让我们从问题本身开始.
我们使用JBoss EAP 6.1.0.GA(AS 7.2.0.Final-redhat-8)作为我们的应用服务器,用于一个相当大的企业项目. JPA层由Hibernate Core {4.2.0.Final-redhat-1}使用连接Oracle 11.2.0.3.0的oracle.jdbc.OracleDriver(版本11.2)处理.
几个星期前,一切都按预期工作,我们没有数据库相关的问题.我们使用以下数据源:
jdbc:oracle:thin:@192.168.0.93:1521:DEV
oracle
TRANSACTION_READ_COMMITTED
1
20
true
false
FailingConnectionOnly
MY_DB
pass
大多数时候我们有5-10个打开的连接,使用1-3个(单个开发环境)……池保持这个级别并且工作得很好.
但是对我们的代码进行了一些未知的更改,池停止工作……不再释放它的连接……甚至根本没有重复使用它们!它花了一些简单的请求来填充池,最多连接20个连接,JPA拒绝任何新的数据库查询.
我们花了几天的时间来查找代码的相关更改……但没有成功!
今天我发现了一种解决方法.我们稍微更改了persistence.xml:
org.hibernate.ejb.HibernatePersistence
java:/myDS
将hibernate.connection.release_mode从after_transaction更改为after_statement就可以了.但之前从未接触过这种设定.现在连接按预期释放,并且池再次可用.
我不明白为什么after_transaction不再起作用…因为提交了更改.我们在数据库中看到了所有这些东西.提交交易应该结束 – 不是吗?
虽然我发现这个简单的解决方法我真的知道了这个问题.我没有把这种知识推迟到制作时间的感觉.所以任何反馈都非常感谢!谢谢!