Фиксация транзакции в конце итерации l oop. Откат в противном случае - PullRequest
0 голосов
/ 19 марта 2020

У меня есть список заказов. Каждый из них должен быть полностью обработан. Для каждого заказа необходимо выполнить несколько операций.

Пример обработки заказа выглядит следующим образом:

  1. проверка покупателя
  2. проверка продавца
  3. создать исторический заказ (отдельную сущность) для покупателя и продавца
  4. обновить покупателя
  5. обновить продавца
  6. сохранить исторические заказы из пт. 3
  7. отправка уведомлений
  8. обновление состояния заказа до «выполнено»

Теперь с моим списком заказов я перебираю с помощью для l oop. Как убедиться, что фиксация транзакции выполнена в конце текущей итерации? Я хочу избежать ситуации, когда шаги 4 и 5 фиксируются, а затем при выполнении сохранения на шаге 6 возникает некоторая исключительная ситуация. Я не могу остановить приложение, но мне нужно установить состояние ордера «отклонено» и продолжить обработку. Чего я действительно хочу добиться, так это:

for (Order o : orders){
try{
    doStep1;
    doStep2;
    doStep3;
    doStep4;
    doStep5;
    doStep6;
    doStep7;
    doStep8('completed');
    commitAllUpdates&Saves;
} catch (Exception e){
    doStep8('rejected');
}

Справка.

...