[英]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.