TX-LCN5.0.2分布式事务框架源码分析-关键线索罗列-txc部分
1、注解TxcTransaction
2、在其注解接口附近查找aop配置:TransactionAspect
3、runTransaction是在执行事务业务代码时的包装逻辑
4、transactionServiceExecutor.transactionRunning(info);
5、获取本地分布式事务控制器 loadDTXLocalControl找到TxcRunningTransaction
6、根据注解和切面配置,resolvePropagationState返回是DTXPropagationState.JOIN
7、DTXServiceExecutor dtxLocalControl.doBusinessCode(info),直接线索中断
8、回到刚才切面所在的包,发现还有DataSourceAspect,对数据库连接进行了替换,非常重要,先看看连接的接口有什么东西,想想我们的jdbc写法也是弄一个连接,然后调用其中的各种方法
9、
DTXResourceWeaver 对获取db连接进行了封装,其中有执行sql的相关动作改写
txLcnBeanHelper.loadTransactionResourceProxy(transactionType);
找到transaction_txc TxcTransactionResourceProxy执行的proxyConnection,继续进入方法
10、查看ConnectionWrapper其中的commit rollback等对原始的数据库连接进行了替换,有用到jdbcEventListener,分析listener
11、找到ConnectionHelper其中注入的CompoundJdbcEventListener,这个bean在类名上已经进行了标记,里面用的P6spyJdbcEventListener实际上是TxcJdbcEventListener
12、随便看个update 63行看看拦截的处理sqlExecuteInterceptor.preUpdate((Update) statement);粗看其中的代码,有一段前置准备,最后96行txcService.resolveUpdateImage(updateImageParams);
13、粗看resolveUpdateImage其中代码,就是对影响范围进行分析,然后保留undo数据(195行方法内部162行)
14、到此基本我们可以验证之前的txc的理论,刚才部分分析比较粗略,大家有时间可以自己细看
TX-LCN5.0.2分布式事务框架源码分析-关键线索罗列-txc部分的更多相关文章
- YII框架源码分析(百度PHP大牛创作-原版-无广告无水印)
YII 框架源码分析 百度联盟事业部——黄银锋 目 录 1. 引言 3 1.1.Yii 简介 3 1.2.本文内容与结构 3 2.组件化与模块化 4 2.1.框架加载和运行流程 4 ...
- Spark RPC框架源码分析(一)简述
Spark RPC系列: Spark RPC框架源码分析(一)运行时序 Spark RPC框架源码分析(二)运行时序 Spark RPC框架源码分析(三)运行时序 一. Spark rpc框架概述 S ...
- Spark RPC框架源码分析(三)Spark心跳机制分析
一.Spark心跳概述 前面两节中介绍了Spark RPC的基本知识,以及深入剖析了Spark RPC中一些源码的实现流程. 具体可以看这里: Spark RPC框架源码分析(二)运行时序 Spark ...
- Android Small插件化框架源码分析
Android Small插件化框架源码分析 目录 概述 Small如何使用 插件加载流程 待改进的地方 一.概述 Small是一个写得非常简洁的插件化框架,工程源码位置:https://github ...
- Spark RPC框架源码分析(二)RPC运行时序
前情提要: Spark RPC框架源码分析(一)简述 一. Spark RPC概述 上一篇我们已经说明了Spark RPC框架的一个简单例子,Spark RPC相关的两个编程模型,Actor模型和Re ...
- 介绍开源的.net通信框架NetworkComms框架 源码分析
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 售价249英镑 我曾经花了 ...
- nodejs的Express框架源码分析、工作流程分析
nodejs的Express框架源码分析.工作流程分析 1.Express的编写流程 2.Express关键api的使用及其作用分析 app.use(middleware); connect pack ...
- laravel框架源码分析(一)自动加载
一.前言 使用php已有好几年,laravel的使用也是有好长时间,但是一直对于框架源码的理解不深,原因很多,归根到底还是php基础不扎实,所以源码看起来也比较吃力.最近有时间,所以开启第5.6遍的框 ...
- iOS常用框架源码分析
SDWebImage NSCache 类似可变字典,线程安全,使用可变字典自定义实现缓存时需要考虑加锁和释放锁 在内存不足时NSCache会自动释放存储的对象,不需要手动干预 NSCache的key不 ...
随机推荐
- easyui datagrid Column Group 列组、 复杂表头 嵌套表头 组合表头 (转载)
核心: rowspan:2 //占两行 colspan:3 //占三列 所有的colspan下的二级列表头,统一放在一个数组里. 文章一: 转载来源:https://blog.csdn.ne ...
- java 不同时间格式转化
今天项目中遇到一个格式问题,收到的timestamp格式是2019-08-19-16:03:21 , 但是入es时,当类型为date的时候,这种格式直接报错,因为索引建的格式是yyyy-MM-dd H ...
- python之路第三天
2018年 7月 13 日 while循环语句: 输出1-5的数 s = 1 whlie s < 6: print(s) 用while循环输入 1 2 3 4 5 6 8 9 10 while ...
- Docker搭建Adminer(数据库图形化管理界面)
1.下载官方库的adminer镜像: docker pull adminer 2.创建adminer容器:docker run --link mysql:mysql --name adminer -p ...
- ValueError:GraphDef cannot be larger than 2GB.解决办法
在使用TensorFlow 1.X版本的estimator的时候经常会碰到类似于ValueError:GraphDef cannot be larger than 2GB的报错信息,可能的原因是数据太 ...
- HDU4183 Pahom on Water(来回走最大流,一个点只经过一次)
题意: 有n个圆,每个圆的中心和半径和一个频率都给定,只有一个频率最高的789为紫色,只有一个最低的400为红色,规则如下: 1.当两个圆严格相交时,且人是从红色到紫色的方向运动时可以由低频率向高频率 ...
- 数据结构 - 顺序栈的实现 C++
顺序栈封装 C++ 使用C++对顺序栈进行了简单的封装,实现了栈的基本操作 封装方法: pop(),top(),size(),empty(),push() 代码已经过测试 #pragma once # ...
- Pushing Boxes(广度优先搜索)
题目传送门 首先说明我这个代码和lyd的有点不同:可能更加复杂 既然要求以箱子步数为第一关键字,人的步数为第二关键字,那么我们可以想先找到箱子的最短路径.但单单找到箱子的最短路肯定不行啊,因为有时候不 ...
- selenium安装
pip安装 pqi优化pip下载速度 pip install selenium pip install --upgrade selenium pip show selenium 离线安装 官网下载se ...
- pve配置
U盘安装 推荐使用https://rufus.ie/ 刻录到U盘 (注意:以 DD 镜像 模式写入) 关闭订阅提醒 将if(data.status!=='Active')替换为if(false) se ...