如果未显式提交或回滚,则自动提交事务

Roh*_*hit 2 java connection weblogic

我们使用Weblogic服务器并在获取连接到Oracle 10g时始终将autoCommit设置为'false'.

我想知道Weblogic中是否有设置,如果未在应用程序代码中显式调用Commit或Rollback,它将自动提交事务.我听说Websphere中存在类似的设置.

Vin*_*lds 5

看起来您没有使用Container管理或Bean管理的事务.或者,就此而言,您只是从a中检索连接DataSource然后禁用autocommit,而不需要初始建立事务上下文; 这意味着您正在使用JDBC事务(依赖于底层数据库的事务管理器).

当您使用Container或Bean托管事务时,您将不再需要担心事务中使用的autocommit属性Connection,因为容器将确保autocommit在返回Connection应用程序之前将该属性设置为false .

如果需要使用容器管理的事务,则需要使用EJB.除非抛出a RuntimeException或an ,否则与EJB关联的任何事务都将自动提交ApplicationException.如果您需要使用Bean管理或程序化事务,则必须使用UserTransactionAPI.

如果您正在使用负责建立连接的Hibernate之类的ORM框架,那么您应该记住,Hibernate负责关闭Connection的autocommit属性.在大多数情况下,它会关掉房产.

如果您打算使用JDBC事务,尽管有更好的JTA事务替代方法,那么您可以尝试defaultAutoCommit从管理控制台或数据源的JDBC配置文件中为驱动程序设置属性.JDBC配置文件的片段如下所示:

<?xml version='1.0' encoding='UTF-8'?>
<jdbc-data-source xmlns="http://xmlns.oracle.com/weblogic/jdbc-data-source" xmlns:sec="http://xmlns.oracle.com/weblogic/security" xmlns:wls="http://xmlns.oracle.com/weblogic/security/wls" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/jdbc-data-source http://xmlns.oracle.com/weblogic/jdbc-data-source/1.0/jdbc-data-source.xsd">
  <name>JDBC Data Source-Oracle</name>
  <jdbc-driver-params>
    <url>jdbc:oracle:thin:@localhost:1521:oracle</url>
    <driver-name>oracle.jdbc.OracleDriver</driver-name>
    <properties>
      <property>
        <name>user</name>
        <value>app</value>
      </property>
      <!-- Disable autocommit for connections-->
      <property>
        <name>defaultAutoCommit</name>
        <value>false</value>
      </property>
    </properties>
    ...
Run Code Online (Sandbox Code Playgroud)

在管理控制台中,您可以defaultAutoCommit=false在DataSource配置的Properties textarea中添加该属性:

在Weblogic中为JDBC数据源设置defaultAutocommit