Я работаю над созданием микросервиса, который использует диспетчер транзакций, реализованный на основе Java Transaction API (JTA).
Мой вопрос: есть ли у Trasaction maanger возможность обрабатывать проблему параллелизма в сценариях распределенной базы данных.
Сценарий:
Предположим, что существует несколько запущенных экземпляров службы, и мы получаем два запроса на обновление суммы баланса на 10 в учетной записи. Первоначально в учетной записи может быть 100 долларов, и первый экземпляр получает это и увеличивает его до 10 долларов, но еще не зафиксирован.
В то же время второй экземпляр также получает аккаунт, который по-прежнему равен 100, и увеличивает его на 10 долларов, а затем фиксирует его, обновляя баланс до 110 долларов, а затем обслуживает одну учетную запись снова обновляет до 110 долларов.
К этому времени вы, должно быть, догадались, что баланс должен быть увеличен на 20 долларов, а не на 10. Нужно ли мне писать какой-то механизм исключения Optimistic lock, чтобы предотвратить описанный выше сценарий, или Transaction Manager, основанный на спецификации JTA, уже обеспечит такую вещь не случится ?