依赖XAResource
使用XAResource、XAConnection实现2PC的简单实例:
待调整后展示
看一下XAResource的interface,能知道XAResource接口需要由资源管理器者来实现,XAResource接口中定义了一些方法,这些方法将会被TM进行调用,如:
- start方法:开启事务分支
- end方法:结束事务分支
- prepare方法:准备提交
- commit方法:提交
- rollback方法:回滚
- recover方法:列出所有处于PREPARED状态的事务分支
Atomikos在XAResource基础上封装了AtomikosDataSourceBean,方便与事务管理器整合
源码结构
源码太深,实在难以阅读,基本对外实现还是实现几个JTA的interface:
atomikos 使用示例
待调整后粘贴
调用流程
流程可以参考这几个图示,出自:
https://juejin.cn/post/6901960471474077709
Atomikos 封装 DataSource 的逻辑:
图示的XAResource是DruidXADataSource(阿里巴巴开源的druid连接池,对应的实现类为com.alibaba.druid.pool.xa.DruidXADataSource)
UserTransactionImp 的begin的调用:
总的大致调用流程图示: