加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

oracle – JBoss连接池的意外问题

发布时间:2021-01-12 10:22:50 所属栏目:站长百科 来源:网络整理
导读:我花了最后几天试图在几天条件出的开拓进程中找到一些新题目的缘故起因……而我还没有找到它.但我找到了办理要领.但让我们从题目自己开始. 我们行使JBoss EAP 6.1.0.GA(AS 7.2.0.Final-redhat-8)作为我们的应用处事器,用于一个相等大的企业项目. JPA层由Hibernat

我花了最后几天试图在几天条件出的开拓进程中找到一些新题目的缘故起因……而我还没有找到它.但我找到了办理要领.但让我们从题目自己开始.

我们行使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.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读