oracle – JBoss连接池的意外问题

oracle – JBoss连接池的意外问题,第1张

概述我花了最后几天试图在几天前提出的开发过程中找到一些新问题的原因……而我还没有找到它.但我找到了解决方法.但让我们从问题本身开始. 我们使用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 我花了最后几天试图在几天前提出的开发过程中找到一些新问题的原因……而我还没有找到它.但我找到了解决方法.但让我们从问题本身开始.

我们使用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)处理.

几个星期前,一切都按预期工作,我们没有数据库相关的问题.我们使用以下数据源:

<datasource jta="true" jndi-name="java:/myDS" pool-name="myDS" enabled="true" use-java-context="true" use-ccm="true">    <connection-url>jdbc:oracle:thin:@192.168.0.93:1521:DEV</connection-url>    <driver>oracle</driver>    <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>    <pool>        <min-pool-size>1</min-pool-size>        <max-pool-size>20</max-pool-size>        <prefill>true</prefill>        <use-strict-min>false</use-strict-min>        <flush-strategy>FailingConnectionOnly</flush-strategy>    </pool>    <security>        <user-name>MY_DB</user-name>        <password>pass</password>    </security></datasource>

大多数时候我们有5-10个打开的连接,使用1-3个(单个开发环境)……池保持这个级别并且工作得很好.

但是对我们的代码进行了一些未知的更改,池停止工作……不再释放它的连接……甚至根本没有重复使用它们!它花了一些简单的请求来填充池,最多连接20个连接,JPA拒绝任何新的数据库查询.

我们花了几天的时间来查找代码的相关更改……但没有成功!

今天我发现了一种解决方法.我们稍微更改了persistence.xml:

<persistence-unit name="myPU">    <provIDer>org.hibernate.ejb.HibernatePersistence</provIDer>    <jta-data-source>java:/myDS</jta-data-source>    <propertIEs>        <property name="jboss.entity.manager.factory.jndi.name"     value="java:/myDSMF" />        <property name="hibernate.dialect"                          value="org.hibernate.dialect.Oracle10gDialect" />        <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBosstransactionManagerLookup" />        <property name="hibernate.default_batch_fetch_size"         value="1000" />        <property name="hibernate.jdbc.batch_size"                  value="0" />        <property name="hibernate.connection.release_mode"          value="after_statement" />   <!-- <property name="hibernate.connection.release_mode"          value="after_transaction" /> -->        <property name="hibernate.connection.SetBigStringTryClob" value="true" />    </propertIEs></persistence-unit>

将hibernate.connection.release_mode从after_transaction更改为after_statement就可以了.但之前从未接触过这种设定.现在连接按预期释放,并且池再次可用.

我不明白为什么after_transaction不再起作用…因为提交了更改.我们在数据库中看到了所有这些东西.提交交易应该结束 – 不是吗?

虽然我发现这个简单的解决方法我真的知道了这个问题.我没有把这种知识推迟到制作时间的感觉.所以任何反馈都非常感谢!谢谢!

解决方法 您正在使用JTA.所以after_transaction模式从不推荐用于JTA事务.

这是JBOSS网站上的文件.

after_transaction – says to use
ConnectionReleaseMode.AFTER_TRANSACTION. This setting should not be
used in JTA environments. Also note that with
ConnectionReleaseMode.AFTER_TRANSACTION,if a session is consIDered to
be in auto-commit mode connections will be released as if the release
mode were AFTER_STATEMENT.

所以你应该明确地使用auto或after_statement来积极地释放连接.

参考

Connection Release Modes.

总结

以上是内存溢出为你收集整理的oracle – JBoss连接池的意外问题全部内容,希望文章能够帮你解决oracle – JBoss连接池的意外问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1160860.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存