Подключения, полученные от Weblogic, настроены на автоматическую фиксацию

У нас есть приложение, разработанное с использованием 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, например, добавить диспетчер транзакций).

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
870
1

Ответы 1

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

Другие вопросы по теме