Похоже, вы не используете транзакции, управляемые контейнером или бином. Или, в этом отношении, вы просто извлекаете соединение из DataSource
и затем отключаете autocommit
, без первоначального установления контекста транзакции; это означает, что вы используете транзакции JDBC (которые зависят от менеджера транзакций базовой базы данных).
Когда вы используете управляемые контейнером или бином транзакции, вам больше не придется беспокоиться о свойстве Connection
*1006*, используемом в транзакции, поскольку контейнер гарантирует, что для свойства autocommit
установлено значение false перед возвратом Connection
в приложение.
Если вам нужно использовать транзакции, управляемые контейнером, вам нужно использовать EJB. Любая транзакция, связанная с EJB, будет совершаться автоматически, если только не выброшено RuntimeException
или ApplicationException
.
Если вам нужно использовать управляемые Бином или программные транзакции, вам придется использовать UserTransaction
API.
Если вы используете среду ORM, например Hibernate, которая отвечает за установление соединений, то вам следует помнить, что именно Hibernate отвечает за отключение свойства autocommit для Connection. и в большинстве случаев это отключило бы свойство.
Если вы намереваетесь использовать транзакции 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>
...
В Консоли администрирования вы можете добавить свойство defaultAutoCommit=false
в текстовой области Свойства конфигурации источника данных: