Настройка транзакции для нескольких ресурсов с использованием Spring Framework?

Я понимаю тот факт, что транзакция, которая охватывает несколько транзакционных ресурсов, называется глобальной транзакцией.

Вопрос 1: Это просто другое название распределенной транзакции или что-то другое?

Вопрос 2: просмотрели весеннюю документацию по управлению транзакциями. Из этого я мог сделать вывод: а. JTA предназначен исключительно для распределенных транзакций. б. Только с помощью EJB и EJB CMT мы могли реализовать распределенные транзакции. в. Если EJB, то он также требует сервера приложений и косвенно JNDI.

Что такое аналог Spring для облегчения глобальных/распределенных транзакций?

Вопрос 3: Если мы не хотим использовать сервер приложений с возможностями JTA, должны ли мы использовать Atomikos / JOTM, как автономные менеджеры транзакций, для обеспечения выполнения глобальных транзакций?

Вопрос 4: Простой вариант использования обновления таблицы A в DB_1 (MySql) и таблицы B в DB_2 (Oracle) в рамках одной транзакции: каков ответ Spring на этот вариант использования?


person Nataraj    schedule 25.11.2017    source источник


Ответы (1)


  1. да
  2. а) Нет, не каждая транзакция будет распределена, только если задействовано более одного ресурса. TM управляет транзакциями, выполняемыми на задействованных ресурсах.
  3. б) Нет, есть менеджеры транзакций, которые можно использовать вне ejb-серверов, такие как atomikos, bitronix,... но я не уверен, что вы подразумеваете под принудительным выполнением, как я писал ранее, распределенные транзакции используются при необходимости.
  4. в) да
  5. г) аналог Spring
  6. если вы хотите использовать транзакции на нескольких ресурсах одновременно, да.
  7. вы определяете два источника данных таким образом, чтобы они позволяли TM обрабатывать свои ресурсы. И MySql, и Oracle предоставляют XA-источники данных, которые позволяют обрабатывать распределенные транзакции. Вы определяете TM и позволяете аннотировать свои bean-компоненты с помощью атрибутов транзакции. Есть много руководств, которые показывают, как это можно сделать.

Дополнительные замечания:

  1. Между тем транзакции также включены в CDI-Spec. Таким образом, вы также можете использовать CDI.
  2. Разумно обращайтесь с распределенными транзакциями. Двусторонняя фиксация делает практически невозможным установку разумного времени ожидания транзакции. Существуют сайты разработки, где распределенные транзакции используются только между одним ресурсом SQL-СУБД и одним ресурсом JMS, если это необходимо.
person aschoerk    schedule 26.11.2017
comment
Спасибо aschoerk за ваше время и усилия, чтобы ответить на этот вопрос. - person Nataraj; 16.06.2018