【问题标题】:Using XA transaction with JDBC, MySQL, and Microsoft SQL Server将 XA 事务与 JDBC、MySQL 和 Microsoft SQL Server 一起使用
【发布时间】:2011-10-07 04:20:04
【问题描述】:

假设我在一台机器上运行 MySQL 服务器,在第二台机器上运行 Microsoft SQL Server,在第三台机器上运行我自己的自定义 Java 数据库。

我如何使用 X/Open XA 标准在所有三者之间运行分布式事务?

X/Open XA 是否指定了基于 TCP 或 UDP 的协议?我找不到这方面的任何信息。 XA 似乎没有指定任何关于网络的内容,在这种情况下,它如何用于跨 MySQL、SQL Server 和自定义 Java 数据库运行分布式事务。

【问题讨论】:

    标签: mysql sql-server jdbc xa


    【解决方案1】:

    在数据库上提供对 2 阶段提交事务的支持。一般来说,它们提供了不同的 ConnectionPool 实现。如果您的 Java 应用程序在应用程序服务器上运行,您必须显式定义 XA 数据源。

    XA 不需要指定任何低级网络要求。这是一个应用协议,维基百科提供了一个很好的概述:http://en.wikipedia.org/wiki/2PC

    因此,如果要实现分布式连接,所有参与者都必须提供支持 XA 的接口。

    【讨论】:

    • 让我看看我是否明白你在说什么。事务管理器需要链接到 MySQL 的客户端库,该库实现 MySQL 服务器期望请求使用的应用程序协议。这可以建立在 TCP 或 UDP 或其他任何东西上。未指定。 SQL Server 和自定义 Java 数据库也是如此。总共需要链接 3 个连接库。 MySQL 和 SQL Server 的客户端库已经实现。为 Java 数据库实现它是为 Java 数据库实现 XA 支持的一部分。
    • 3 个连接中的每一个都返回了一些创建某种 XA 对象的方式,事务管理器可以在创建分布式事务时使用这些对象。实际上,TCP 在 UDP 上使用,即使它增加了响应行程。你知道数据包通常是什么样子的吗?究竟何时发送要执行的事务语句?它们是准备消息的一部分吗?
    • 不,我不知道数据包长什么样。我想它是特定于数据库供应商的,您不必小心。很确定这不是在 TCP/IP 层上处理的。这是一个特定于应用程序的协议,ISO/OSI 第 5-7 层。
    猜你喜欢
    • 2011-05-01
    • 2018-05-14
    • 2013-03-10
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多