Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JBoss数据库连接池自动提交行为_Java_Oracle_Jdbc_Jboss_Datasource - Fatal编程技术网

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

Java JBoss数据库连接池自动提交行为,java,oracle,jdbc,jboss,datasource,Java,Oracle,Jdbc,Jboss,Datasource,我们使用JBoss 4和Oracle,并通过JBoss数据源XML文件配置JNDI数据源 最近意识到,默认情况下从数据源获取的所有连接的自动提交属性都设置为true。但是,我们依赖于Oracle存储过程,希望控制存储过程中的提交 我们使用普通的JDBC调用以及Spring StoredProcess包装器从JBoss调用存储过程。试图从JBoss数据源XML设置自动提交并没有真正起作用 我只能看到,对于从datasource获得的每个连接,我们都可以将auto commit属性设置为false,

我们使用JBoss 4和Oracle,并通过JBoss数据源XML文件配置JNDI数据源

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

我们使用普通的JDBC调用以及Spring StoredProcess包装器从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>

某个名字
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=decificated)))
oracle.jdbc.driver.OracleDriver
xxxr
xxx
org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter
5.
25
Oracle10g

我们也使用了,但没有改变…

有三种主要类型的数据源:

您的deploy/oracle-ds.xml文件应使用或来获取自动提交设置为false的连接


请参阅本文中Scott Stark的回复:或第15.5.3.1节了解原始数据源。

您可以创建自己的数据源,该数据源是您正在使用的数据源的子类。将其存储在JNDI中。您需要重写的唯一方法是getConnection(),它将执行以下操作:

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

在我的例子中,我使用的是Jboss EAP 6(AS7),我的解决方案是制作类WrapperDataSource的包装器,并添加指令:

wc.setAutoCommit(false);
在getConnection方法中,为了在我的应用程序从de JDBC池获得连接时将自动提交连接设置为false

此链接解释如何执行此操作


希望能帮助任何人

谢谢你的回答,我必须说我已经阅读了这些资源,我看到的唯一方法仍然是为我从JBoss(版本4)数据源检索到的每个连接以编程方式设置connection autocommit属性。理想情况下,我希望这个自动提交属性可以通过JBoss数据源或连接池配置进行管理,但可能我在这方面运气不好……你说:“试图从JBoss数据源XML设置自动提交实际上不起作用。”你能告诉我们一些不起作用的地方吗?另外,您是否可以发布数据源配置?JBoss 4.x和Oracle 9/10对我来说一直工作正常,所以我怀疑这是配置中的问题。最后一个想法,如果在连接上发出DDL命令,可能会出现问题,因为这些命令与事务内部发出的标准SQL命令不兼容。我们称之为在JDBC连接上下文中的表中插入记录的存储过程。理想情况下,我们不希望为每个插入发出数据库提交,但这是由于JDBC自动提交而发生的情况。您能看到容器在每个语句之后发出的提交语句吗?如果您是通过观察抛出异常时发生的提交来推断自动提交行为,那么您可能希望检查是否捕获异常并在上下文对象上使用setRollbackOnly()方法。应用程序(已检查)异常不会强制回滚,因此很容易以这种方式被发现。看见