我们正在使用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>
我们也用过,但没有变化......
答案 0 :(得分:2)
数据源有三种主要类型:
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 false或J2EETM 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
希望帮助任何人