2016-04-05 36 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 
    } 
} 

現在我喜歡有業務的呼叫周圍一個try/catch我可以正確記錄異常的邏輯。但我需要手動回滾事務,除非我再次拋出異常,我不喜歡。那麼我該如何強制翻轉回滾呢?我知道如何做到這一點,如果這將是一個EJB:我們可以做

@Resource 
private SessionContext ctx;  

然後

ctx.setRollbackOnly(); 

catch密切。

但是,它不是一個EJB,我不能因爲資源限制而使EJB不在其中。

回答

0

您可以包含與@Transactional註釋關聯的參數rollbackOn =「Exception.class」。

但如果喲做到這一點,你必須退出「的try-catch」塊

+0

根據文檔:http://docs.oracle.com/javaee/7/api/javax/transaction/Transactional。 html - 它實際上是'rollbackOn'。 – Gimby

+0

感謝#Gimby的糾正 – Wakachopo

+0

@Wakachopo:你的意思是什麼*但是如果你這樣做,你必須**退出**「try-catch」塊*? – badera