程序猿基礎知識的學習娄周、理解沪停、整理——事務(方方土)
- 什么是XA事務木张?在什么場景下會出現(xiàn)XA事務?
@TransactionAttribute(TransactionAttributType.REQUIRED)
public void placeFixedIncomeTrade(TradeData trade)
? ? ? ? ? ? ? throws Exception{
? ? ? ? ? ? ? try{
? ? ? ? ? ? ? ? ? ? ?Placement placement = placementService.placeTrade(trade);
? ? ? ? ? ? ? ? ? ? ? //將placemenet發(fā)送到jms消息隊列中
? ? ? ? ? ? ? ? ? ? ?placementService.sendPlacementMessage(placement);
? ? ? ? ? ? ? ? ? ? ? //將placement寫到數據庫中
? ? ? ? ? ? ? ? ? ? ?excutionService.executeTrade(placement);
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ?catch(TradeExecutionExcepiton e){
? ? ? ? ? ? ? ? ? ? ? log.fatal(e);
? ? ? ? ? ? ? ? ? ? ? sessionCtx.setRollbackOnly();
? ? ? ? ? ? ? ? ? ? ? throw e
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ?}
上面的函數泻轰,如果要求這個函數中的操作是在同一個事務中浮声,那么它就是一個XA事務旋奢,因為它在一個事務內部涉及了兩種資源至朗,jdbc資源和jms資源;當然并非所有XA事務都是涉及兩種不同的資源矗钟,如果在同一個事務內涉及兩個不同的數據庫的操作嫌变,也是XA事務
- 那么對于XA的事務,該怎么處理呢东涡?
對于XA的接口描述中,有兩個概念组贺,事務管理器概念和資源管理器的概念祖娘,工作機制參加下圖:
對于XA的事務贿条,正常的提交流程如下圖:
- 那么對于XA事務整以,最佳實踐是什么呢?
對于XA事務邑商,我的觀點是能免則免人断。
為什么恶迈?
1、很多開發(fā)人員對于事務的概念不一定搞的非常清楚暇仲,更加不用說是XA事務了
2奈附、目前很多XA的驅動程序對于XA的支持不是很好斥滤,比如weblogic自帶的XA驅動還存在問題
3勉盅、如果使用XA事務佑颇,那么對于事務提交的性能是由一定影響的
怎么樣?
1菇篡、在設計上要避免同一個事務跨庫或者跨資源漩符,這個很重要,很多XA事務其實是可以在設計階段進行避免的驱还;
2嗜暴、要識別一下存在跨庫或者跨資源的操作是否就必須在一個事務中個,比如议蟆,如果對于一個庫是查詢操作闷沥,對于另外一個庫是插入操作,那么就沒必要用XA事務咐容;