我们使用 Weblogic 服务器,并在连接到 Oracle 10g 时始终将 autoCommit 设置为“false”。
我想知道 Weblogic 中是否有一个设置,如果没有从应用程序代码中显式调用提交或回滚,它会自动提交事务。我听说 Websphere 中存在类似的设置。
最佳答案
看起来您既没有使用容器管理的事务,也没有使用 Bean 管理的事务。或者,就此而言,您只是从 DataSource
检索连接,然后禁用 autocommit
,而没有初始建立事务上下文;这意味着您正在使用 JDBC 事务(依赖于底层数据库的事务管理器)。
当您使用容器或 Bean 管理的事务时,您将不再需要担心事务中使用的 Connection
的 autocommit
属性,因为容器将确保autocommit
属性设置为 false,然后将 Connection
返回给应用程序。
如果您需要使用容器管理的事务,则需要使用 EJB。与 EJB 关联的任何事务都将自动提交,除非抛出 RuntimeException
或 ApplicationException
。
如果您需要使用 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
属性:
关于java - 如果未明确提交或回滚,则自动提交事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7525605/