事务—XA事务

程序猿基础知识的学习、理解、整理——事务(方方土)

  • 什么是XA事务?在什么场景下会出现XA事务?

@TransactionAttribute(TransactionAttributType.REQUIRED)

public void placeFixedIncomeTrade(TradeData trade)

              throws Exception{

              try{

                     Placement placement = placementService.placeTrade(trade);

                      //将placemenet发送到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、很多开发人员对于事务的概念不一定搞的非常清楚,更加不用说是XA事务了
2、目前很多XA的驱动程序对于XA的支持不是很好,比如weblogic自带的XA驱动还存在问题
3、如果使用XA事务,那么对于事务提交的性能是由一定影响的
怎么样?
1、在设计上要避免同一个事务跨库或者跨资源,这个很重要,很多XA事务其实是可以在设计阶段进行避免的;
2、要识别一下存在跨库或者跨资源的操作是否就必须在一个事务中个,比如,如果对于一个库是查询操作,对于另外一个库是插入操作,那么就没必要用XA事务;



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容