JBoss数据库连接池自动提交行为

时间:2010-08-07 06:34:46

标签: java oracle jdbc jboss datasource

我们正在使用JBoss 4和Oracle以及通过JBoss数据源XML文件配置的JNDI数据源。

最近意识到默认情况下从数据源获取的所有连接都将auto-commit属性设置为true。但是,我们依赖Oracle存储过程并希望控制存储过程中的提交。

我们使用普通的JDBC调用以及Spring StoredProcedure包装来从JBoss调用存储过程。尝试从JBoss数据源XML设置自动提交并没有真正起作用。

我只能看到,对于我们从datasource获得的每个连接,我们可以将auto-commit属性设置为false,但有人知道我们如何在一个地方配置它吗?

编辑:我正在添加我们使用的数据源配置:

<local-tx-datasource>
    <jndi-name>some name</jndi-name>
    <connection-url>jdbc:oracle:thin:@(description=(address_list=(address=(protocol=tcp)(port=1521)(host=xxx))(address=(protocol=tcp)(port=1521)(host=xxx)))(load_balance = yes)(connect_data=(SERVICE_NAME=xxx)(SERVER=DEDICATED)))</connection-url>
    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
    <user-name>xxxr</user-name>
    <password>xxx</password>
    <!-- Checks the Oracle error codes and messages for fatal errors -->
    <exception-sorter-class-name>
        org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter
    </exception-sorter-class-name>
    <min-pool-size>5</min-pool-size>
    <max-pool-size>25</max-pool-size>
    <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml -->
    <metadata>
        <type-mapping>Oracle10g</type-mapping>
    </metadata>
</local-tx-datasource>

我们也用过,但没有变化......

3 个答案:

答案 0 :(得分:2)

数据源有三种主要类型:

  • &LT;无-TX-数据源&GT;
  • &lt;局部-TX-数据源&GT;
  • &LT; XA-数据源&GT;

JBoss Community ConfigDataSources

您的deploy / oracle-ds.xml文件应使用&lt; local-tx-datasource&gt;或&lt; xa-datasource&gt;将自动提交的连接设置为false。

请参阅Scott Stark在这篇文章中的回复:How to Declaratively set autoCommit to falseJ2EETM Connector Architecture Specification Version 1.5第15.5.3.1节,了解原始来源。

答案 1 :(得分:0)

您可以创建自己的DataSource,它是您正在使用的DataSource的子类。将其存储在JNDI中。您需要覆盖的唯一方法是getConnection(),它将执行:

Connection public getConnection()
{
  Connection conn = super.getConnection();
  conn.setAutoCommit(true);
  return conn;
}

答案 2 :(得分:0)

在我的情况下,我使用的是Jboss EAP 6(AS7),我的解决方案是创建类WrapperDataSource的包装并添加指令:

wc.setAutoCommit(false);
在getConnection方法中

,以便在我的应用程序从de JDBC池获取连接时将自动提交连接设置为false。

此链接说明了如何操作

http://antuansoft.blogspot.com.es/2017/01/jboss-datasources-set-autocommit-example.html

希望帮助任何人