2012-03-20 5 views
1

Вот сценарий и, кстати, я ищу Java-ориентированный ответ.Может ли несколько вызовов REST участвовать в распределенной транзакции?

  1. Клиентский код вызывает REST Service A (POST) из приложения-провайдера №1.
  2. Клиентский код напрямую обновляет внутреннюю базу данных с использованием JDBC.
  3. Клиентский код вызывает REST Service B (POST) из приложения-провайдера №2.
  4. Шаги 1 - 3 должны выполняться в распределенной транзакции с поддержкой двух фазовых фиксаций, т. Е. При неудачном обновлении базы данных этапа 2, то мы хотим отменить POST 1-го шага. Если сбой POST Step 3 завершен, мы хотим отменить обновление базы данных POST и Step 2 на шаге 1.

Есть ли способ, которым мы можем это сделать, используя JTA без написания собственного кода компенсации (для отмены шагов 1 и 2)?

+0

Большинство из этого возможно с использованием API транзакций Java с ресурсами XA. Однако сложная часть включает в себя отмену запроса POST, вы не можете этого сделать, если приложение-поставщик не имеет для него нестандартной логики. –

ответ

2

Вы не можете координировать или управлять распределенной транзакцией, если каждый из участников не поддерживает двухфазное принятие независимо.

В этом случае, если ваши службы REST поддерживали два метода, эквивалентные двум этапам транзакции, вы могли бы реализовать менеджер транзакций в своем клиенте.