1
A
回答
2
豆類定義始終容器管理。
可能你想知道的是當前事務CMT或BMT。用異常來控制流量不好
public class SomeInterceptor {
@Resource
private javax.ejb.SessionContext sessionContext;
@AroundInvoke
public Object intercept(InvocationContext ctx) throws Exception {
if (isCMT()) {
}
...
}
private boolean isCMT() {
try {
//throws IllegalStateException if not BMT
sessionContext.getUserTransaction();
return false;
}
catch (IllegalStateException ise) {
return true;
}
}
}
當然,但我不知道其他方法來區分的:由於@AroundInvoke攔截方法是在相同的事務中截獲業務方法執行,你可以用以下命令來檢查交易類型BMT和CMT。
0
您可以使用InvocationContext
獲取調用攔截器的Class
和Method
。然後,您可以嘗試爲它們解析註釋並確定事務管理類型。但是這種方法有一個巨大的缺點:如果使用ejb-jar.xml
部署描述符設置事務管理屬性,那麼您可以根本找不到註釋或無效的重寫註釋。您也可以嘗試調用java.util.Map<java.lang.String,java.lang.Object> getContextData()
並發現結果。
0
這似乎是在錯誤的層面解決問題。如果像isCMT()
這樣的測試無論如何都不是非常面向對象的。爲什麼不用兩個攔截器,一個用於BMT的豆子,另一個用於CMT?爲正確的bean使用正確的攔截器......如有必要,兩個攔截器仍然可以通過繼承一個共同的父類來重用公共邏輯。
+0
謝謝,但重點是讓它不可知論的BMT或CMT – anergy 2012-08-14 12:52:31
相關問題
- 1. 在EJB中如何管理CMT和BMT?
- 2. EJB中有些CMT和BMT的疑問?
- 3. Spring + EJB 3.1 CMT與BMT交易
- 4. PersistenceContext在CMT似乎PersistenceContext的不同在BMT
- 5. 混合使用CMT和BMT的交易管理(BMT案例提交數據過早)
- 6. BMT編程 - UserTransaction
- 7. CMT交易
- 8. CMT交易(REDUX)
- 9. 如果註釋是安全的,那麼爲什麼不`x = 0; x +/* cmt */+;`或`var f/* cmt */oo ='foo';`工作?
- 10. xa與CMT的交易
- 11. EJB CMT TransactionAttributeType.REQUIRES_NEW不起作用
- 12. 休眠:長CMT交易
- 13. Ejb3 CMT無狀態豆
- 14. EJB CMT和事務超時
- 15. BMT EJB如何使用UserTransaction的
- 16. 確定ElementFinder或ElementArrayFinder?
- 17. 確定Editorfor或TextBoxFor
- 18. 確定數組或對象
- 19. C++ Winsock確定HTTP或HTTPS
- 20. 帶'cmt'擴展名(?)的PHP文件
- 21. CMT回滾:如何回滾事務
- 22. Cmt遷移工具驗證錯誤
- 23. 如何調試CMT事務邊界?
- 24. 無法使CMT事務工作
- 25. Toplink和CMT消息驅動bean
- 26. jpa併發CMT異常處理
- 27. 使用Spring datasource配置Quartz CMT jobStore
- 28. 是否可以在BMT EJB中使用@TransactionAttribute註釋方法?
- 29. 如何將客戶端的UserTransaction傳播到使用BMT
- 30. 是否有人熟悉.BMT文件及其結構?
不錯的主意,但似乎依靠異常尷尬。 – anergy 2012-08-14 09:58:53
這是,但可能沒有其他的選擇。 – 2012-08-14 09:59:48
這是有趣的黑客:) – gkuzmin 2012-08-14 10:01:00