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