2016-04-05 5 views
1

Я боб @RequestScoped, @Transactional CDI впрыскивается в моем REST интерфейс:транзакционных CDI боб: Как заставить транзакции Откат

@RequestScoped 
@Transactional 
public class myRestCall 
{ 
    @Inject 
    EntityHandlerService ehs;  // contains @PersistenceContext 

    try 
    { 
     // execute business logic, access DB via ehs (JPA/Hibernate) 
    } 
    catch(Throwable t) 
    { 
     // log exception 
     // -> rollback transaction 
    } 
} 

Теперь я хотел бы попробовать/поймать вокруг вызова бизнеса логику, что я могу правильно регистрировать исключение. Но мне нужно отменить транзакцию вручную, если я не сделаю исключение еще раз тем, что мне не нравится. Итак, как я могу принудительно отключить откат? Я знаю, как это сделать, если это было бы EJB: Мы могли бы сделать

@Resource 
private SessionContext ctx;  

, а затем

ctx.setRollbackOnly(); 

в catch близко.

Однако не является EJB, и я не могу сделать EJB из-за ограничений ресурсов.

ответ

0

Вы можете включить параметр rollbackOn = "Exception.class", связанный с аннотацией @Transactional.

Но если йо сделать это, вы должны выйти из «примерки поймать» блок

+0

Согласно документации: http://docs.oracle.com/javaee/7/api/javax/transaction/Transactional. html - это фактически 'rollbackOn'. – Gimby

+0

Спасибо #Gimby за исправление – Wakachopo

+0

@Wakachopo: Что вы имеете в виду * Но если вы сделаете так, вы должны ** выйти ** блок «try-catch» *? – badera

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