java - 如果未明确提交或回滚,则自动提交事务

标签 java connection weblogic

我们使用 Weblogic 服务器,并在连接到 Oracle 10g 时始终将 autoCommit 设置为“false”。

我想知道 Weblogic 中是否有一个设置,如果没有从应用程序代码中显式调用提交或回滚,它会自动提交事务。我听说 Websphere 中存在类似的设置。

最佳答案

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

当您使用容器或 Bean 管理的事务时,您将不再需要担心事务中使用的 Connectionautocommit 属性,因为容器将确保autocommit 属性设置为 false,然后将 Connection 返回给应用程序。

如果您需要使用容器管理的事务,则需要使用 EJB。与 EJB 关联的任何事务都将自动提交,除非抛出 RuntimeExceptionApplicationException。 如果您需要使用 Bean 管理或编程事务,则必须使用 UserTransaction API。

如果您正在使用像 Hibernate 这样负责建立连接的 ORM 框架,那么您应该记住是 Hibernate 负责关闭连接的自动提交属性。在大多数情况下,它会关闭属性。

如果您打算使用 JDBC 事务,尽管 JTA 事务是更好的选择,那么您可以尝试从管理控制台或 JDBC 配置文件中为驱动程序设置 defaultAutoCommit 属性的数据源。 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>
    ...

在管理控制台中,您可以在数据源配置的属性文本区域中添加 defaultAutoCommit=false 属性:

Set defaultAutocommit for JDBC Datasource in Weblogic

关于java - 如果未明确提交或回滚,则自动提交事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7525605/

相关文章:

Java servlet 重定向有错误的 URL 并使用错误的 HTTP 方法

java - 根据 Switch Case 中的字母计算分数

linux - Bash linux 强制多个实例等待运行 sqlplus 命令完成

java - JDBC PreparedStatement Batch 在出错时继续插入

java - 使用分布式事务时无法调用commit

java - java.io.* 中 * 的用途是什么

java - 在 Java 中使用 Regex 验证文本和数字格式

php - 在什么情况下需要关闭 HTTP 连接?

java - postgres 上的错误转换连接

spring-mvc - Spring Boot 异常 : Could not open ServletContext resource [/WEB-INF/dispatcherServlet-servlet. xml]