Java EE JTA и откат транзакции

java-ee jta

1211 просмотра

2 ответа

У меня есть метод бизнес-службы, который вызывает хранилище, и я хочу знать, как я могу откатить транзакцию. Скажем, например,

@Transactionl
public class OrderService {

@inject
OrderRepository orderRepository;

@inject
InventoryRepository inventoryRepository;

@inject
Order order;

@inject
Item item;

public Order createOrder (Order order) {
    orderRepository.save(order);
}
public Item reduceInventory(Item item) {
     inventoryRepository.update(item);

}

То, что я хочу, это когда возникает проверенное исключение, такое как исключение SQL, тогда я хочу, чтобы оба createOrder и reduInventory должны были быть откатаны назад. Скажем, после создания порядка, когда я иду в lowerInventory, если число элементов отрицательно, я не хочу создавать порядок вообще ,

заранее спасибо

Автор: user3249433 Источник Размещён: 08.11.2019 10:59

Ответы (2)


1 плюс

Решение

Я предполагаю, что вы используете свой OrderServiceвеб-уровень, который не связан с управлением транзакциями.

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

@Transactional(rollbackOn = { SQLException.class, PersistenceException.class } )
public Order createOrder (Order order) {
    orderRepository.save(order);
    // I'm just guessing your update logic here:
    for (Item item: order.getItems()) {
        inventoryRepository.update(item)
    }
}

Если rollbackOnвыброшено какое-либо исключение, тогда будет выполнена откат всей транзакции.

Автор: Steve C Размещён: 22.08.2016 01:35

0 плюса

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

@Transactional (rollbackFor = Exception.class)

Вы можете увидеть этот пост для получения дополнительной информации: Аннотация @Transactional. Как откатиться?

Автор: Abass A Размещён: 20.08.2016 09:32
Вопросы из категории :
32x32