簡體   English   中英

EJB事務

[英]EJB Transactions

我正在使用具有單個入口點(方法)的無狀態EJB開發Web服務。 此方法包含3個步驟,我希望第1步在與第2步和第3步不同的事務中發生(應該在同一事務中)。 這些“步驟”包括對注入的無狀態EJB的調用。 讓我用一些代碼解釋一下:

@Stateless  
@WebService(...)  
public class MyWebServiceImpl implements MyWebService { 

     @EJB  
     private UserBusinessBean userBusinessBean;  

     @EJB  
     private EventsBusinessBean eventsBusinessBean;  

     @WebMethod(...)  
     public MyWebServiceResult process(MyWebServiceParam param) {  
          // extract data from param  
          EventResult createEventResult = eventsBusinessBean.createEvent(data); // step 1  
          // do some extra processing  
          User user = userBusinessBean.createUser(someData); // step 2  
          // do some extra processing  
          EventResult updateEventResult = eventsBusinessBean.updateEvent(moreData); // step 3  
     }  
}  

注入的2個EJB本身是無狀態的,並且注入了對無狀態DAO的引用,無狀態DAO的功能是在數據庫上調用存儲過程。

我需要在一個事務中執行步驟1,在另一個事務中執行步驟2和3(因為如果步驟2或3失敗,則已經提交了來自步驟1的信息)。

我知道有兩種方法可以實現此目的:容器管理器事務或用戶管理的事務。 我相信前一種方法比后者更安全,將管理委托給容器(在我的情況下為Weblogic服務器)。 但是我不明白如何使用EJB事務注釋來實現此邏輯。 我應該注釋注入的Business Bean中的方法嗎? DAO呢,它們也需要注釋嗎? 我應該使用哪些?

希望您能在這方面給我一些幫助。 讓我知道您是否需要從我的實施中了解更多細節。

由於MyWebServiceImpl@Stateless ,因此它將隱式具有REQUIRED事務屬性。 為確保第1步在其自己的事務中完成,應將@TransactionAttribute(REQUIRES_NEW)添加到EventsBusinessBean.createBean方法。 這將導致在其自己的事務中創建Bean,然后其余process將在另一個事務中進行操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM