Отказ от ответственности : у меня есть только очень общее представление о том, как работают веб-сервисы, и я не очень разбираюсь в продвинутых темах WS, таких транзакциях и т. Д.интернет-магазин с использованием Java EE, JPA и т. д. Также давайте представим, что у меня есть контракт с провайдером обработки онлайн-платежей для обработки платежей, и он предоставил мне WS API.
Теперь давайте представим, что клиентразместил заказ.В сессионном компоненте (например, внутри OrderSB.placeOrder
) я открыл транзакцию, сохранил ордер в БД, и теперь я звоню в WS API провайдера платежей.Он успешно возвращается (и я предполагаю, что к настоящему моменту счет моего клиента был списан), но прежде чем я смогу сохранить соответствующий Платеж Заказа (существует взаимно-однозначная связь между Заказом и Платежом), возникает исключение, и моя транзакция откатывается.
Как можно гарантировать, что при возникновении такого исключения учетная запись моего клиента не будет списана?Или, другими словами, либо оба из вызова WS и OrderSB.placeOrder
должны успешно завершиться и зафиксировать, либо оба они должны быть откатаны вместе.
Откат placeOrder
легко выполнить в случае сбоя вызова WS, ноЯ не знаю, как я могу откатить вызов WS после его возврата.