美文网首页
Druid连接池源码解析(6)DruidXADataSource

Druid连接池源码解析(6)DruidXADataSource

作者: 错乱的三元运算 | 来源:发表于2022-05-17 18:34 被阅读0次

    1 DruidXADataSource

    DruidXADataSource,顾名思义是基于 XA 协议的Datasource,XA简单来说就是两阶段提交的分布式事务。
    有兴趣的可以看下 分布式事务方案(XA 2PC TCC Seata)(图画得特别好)
    看了下历史版本,最早的1.0.17就已经支持了, 再翻了下提交记录,2011年就支持了,也真的是不得不佩服想得很全面。

    看下类图:


    DruidXADataSource.png

    额外实现了JDBC的XADataSource

    2 getXAConnection

    同样最主要的还是获取连接的流程,先看下源码:

        @Override
        public XAConnection getXAConnection() throws SQLException {
            DruidPooledConnection conn = this.getConnection();
    
            Connection physicalConn = conn.unwrap(Connection.class);
    
            XAConnection rawXAConnection = createPhysicalXAConnection(physicalConn);
    
            return new DruidPooledXAConnection(conn, rawXAConnection);
        }
    

    获取连接,获取出来的是封装过的DruidDataSource
    然后unwrap获取物理连接
    通过createPhysicalXAConnection获取标准的XAConnection,内部通过数据库类型的Util,根据Driver的类型、版本等,反射创建相应的instance
    最后通过获取的XAConnection和DruidPooledConnection初始化DruidPooledXAConnection返回

    3 分布式事务的具体实现

    连接池中还是只提供标准的XAConnection接口,具体的实现还是要依赖Atomikos等框架的集成。
    其中XAConnection 中有一个XAResource,其中有个Xid,应该就是用来定义事务ID的,然后定义了一系列根据xid 的commit,rollback,start,end等方法;
    XAResource还定义了很多常量,看起来是随机数的,应该是定义了事务的状态,后续可以深入了解一下,

    相关文章

      网友评论

          本文标题:Druid连接池源码解析(6)DruidXADataSource

          本文链接:https://www.haomeiwen.com/subject/wlhnurtx.html