2016-08-20 4 views
0

У меня есть метод бизнес-сервисов, который вызывает Repository и я хочу знать, как я могу откатить transaction.Say, напримерJava EE JTA и откат транзакции

@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 Exception происходит, тогда я хочу, чтобы и createOrder, и reduceInventory должны были быть rollledback.Say после создания порядка, когда я иду reduceInventory, если количество элементов отрицательное, я не создаю порядок, который нужно создать вообще.

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

ответ

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 исключений брошенного то вся транзакция будет откат.

+0

Wow именно то, что я искал, я искал это всюду в течение 2 дней и не нашел простой пример, как ваш. Спасибо Стив код написан как можно шире :) – user3249433

0

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

@Transactional (rollbackFor = Exception.class)

вы можете увидеть этот пост для получения дополнительной информации: Annotation @Transactional. How to rollback?

+0

Поскольку вы используете JTA использовать ** rollbackOn ** атрибут вместо –

+0

Я не использую весну Я использую Java EE – user3249433

+0

Любые примеры этого, пожалуйста, я искал поиск, но без радости – user3249433

Смежные вопросы