(1.1 TMClient 启动流程分析) 已经描述了 TMClient的启动流程,通过继承图和代码我们可以知道,TM的引导程序,两个定时任务,两个执行器都是同时创建的,这里不再叙述。
我们重点看差异操作。
我们进入 RMClient的init方法,可以看到他比TM的创建流程多了两步, 设置ResourceManager(资源管理器)和ClientMessageListener(消息监听)。
1.ResourceManager资源管理器
我们进入 DefaultResourceManager.get() 方法, 可以看到这也是个经典的单例, 使用内部类实现的。
他的创建方法 调用了initResourceManagers()方法,主要是加载当前的资源管理器,主要用了类似 SPI 的机制,进行灵活加载。他会扫描/META-INF.services 下的类进行加载。我们看一下ResourceManager的继承结构。
我们可以看到,ResourceManager 主要实现了分支事务的提交,注册,报告,回滚,以及锁定查询(全局锁)等操作, 关于这些操作后续我们会有专门的文章解析。这里不再过多叙述
2.ClientMessageListener消息监听
ClientMessageListener进去看了一下,这一块可能是同一个人写的, 单例的实现方式相同,加载类的方式相同
我们还是去看 ClientMessageListener 的继承关系
看到这我们就大致能够明白了, ClientMessageListener 负责接收Server 下达的命令, 进行分支事务的提交,回滚,以及删除undoLog 的请求。