У нас есть приложение, разработанное с использованием Spring 3.1.1 и Hibernate 3.6.10, которое использует Oracle 11g в качестве базы данных.
Приложение ищет источник данных с помощью JNDI и использует org.springframework.orm.hibernate3.HibernateTransactionManager.
И файл конфигурации spring содержит:
<jee:jndi-lookup jndi-name = "jdbc/ds"
id = "dataSource" proxy-interface = "javax.sql.DataSource"/>
<bean id = "sessionFactory"
class = "org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name = "dataSource" ref = "dataSource"/>
....
</bean>
<bean id = "transactionManager"
class = "org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name = "sessionFactory" ref = "sessionFactory"/>
</bean>
Мы используем Tomcat на машинах для разработки, но приложение развернуто на Weblogic 11 для производства.
Проблема в файле Weblogic datasource.log, регистрируется следующее сообщение:
<autoCommit=true,enabled=true,isXA=true,isJTS=false,vendorID=0,connUsed=false,doInit=false,'null',destroyed=false,poolname=life_rac,appname=null,moduleName=null,connectTime=45,dirtyIsolationLevel=false,initialIsolationLevel=2,infected=false,lastSuccessfulConnectionUse=1531636426817,secondsToTrustAnIdlePoolConnection=10,currentUser=java.lang.Exception
at weblogic.jdbc.common.internal.ConnectionEnv.setup(ConnectionEnv.java:356)
at weblogic.common.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:364)
at weblogic.common.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:330)
...
Теперь нас беспокоит то, что autoCommit=true в сообщениях журнала, потому что кажется, что в некоторых случаях первые запросы DML фиксируются, а они не фиксируются, особенно когда Weblogic остановлен из-за некоторых проблем (например, из-за потери питания).
Я отмечу, что источник данных, определенный в Weblogic Server, является источником данных XA.
Есть ли способ изменить конфигурацию autoCommit по умолчанию на false?
Поскольку у нас есть только одна база данных и никаких других транзакционных ресурсов, я считаю, что мы можем изменить источник данных на не-XA, без каких-либо последствий. Я прав?
И нам нужно изменить конфигурацию, чтобы она работала как в Weblogic, так и в Tomcat (можно добавить некоторую конфигурацию в Tomcat, например, добавить диспетчер транзакций).




WebLogic Server 11g позволяет создавать и развертывать класс перехватчика jdbc. Этот документация поможет написать класс. Каждый раз, когда создается соединение, ваш перехватчик будет вызываться, и вы сможете установить для свойства автоматической фиксации значение false. Этот способ устарел в 11g. 12c использует обратный вызов инициализации соединения.