【问题标题】:Do database drivers need to support distributed transactions or the support needs to have by database itself?数据库驱动程序需要支持分布式事务还是数据库本身需要支持?
【发布时间】:2016-11-22 03:49:05
【问题描述】:

我试图理解Java EE 中的distributed transactions。在阅读了一些在线资料和书籍后,我了解到在 Java EE 中,有一个特定的 API,称为 JTA,它是 Java EE 处理分布式事务的技术栈之一。除了 JTA 之外,还有其他一些概念,如:2PC (two-phase commit) strategyXA, the eXtended Architecture

仅考虑数据库,关于分布式事务,我有以下问题:

Q1) 对分布式事务的真正支持是否来自数据库驱动程序本身?

Q2) 数据库(真正的数据库)是否知道分布式事务或由其他组件处理?

谁能帮我解决这些问题?

【问题讨论】:

    标签: java transactions jta distributed-transactions


    【解决方案1】:

    简而言之,实际上具有事务功能的是数据库。数据库必须关心提交后的数据是否一致并正确存储到磁盘。

    同时,司机可以帮助您管理交易。例如,在第一次请求时为您打开它或自动提交它。

    编辑: 抱歉,主要问题是关于分布式事务。 分布式事务由驱动程序和事务管理器处理。从数据库的角度来看,这个事务没有什么特别之处。

    【讨论】:

    • 感谢您的回复。谁执行 JTA 规范?应用服务器是否实现了 JTA 规范?事务管理器是应用程序服务器的一部分吗?任何进一步的指针都会有所帮助。仅供参考,我已经阅读了大量文档,但没有人提供一个工作示例应用程序来演示这些概念,因此我仍然感到困惑。
    • JTA 是 EE 规范的一部分,因此每个声称是 EE 容器的容器都必须实现它。换句话说,EE 规范说:如果你想称自己为企业容器,请实现这些功能。
    • Weblogic 例如是一个 EE 容器。它实现了 JTA(在其他 EE 功能中:servlet、JMS 等)
    • 感谢您的评论。事务管理器是否也由应用服务器实现?
    • 是的。 TransactionManager 是来自 JTA 规范的接口,由供应商实现。
    【解决方案2】:

    JTA(作为 Java EE 规范)定义了用于事务管理器与应用程序服务器(例如 WildFly)、应用程序(您的代码)和资源(例如数据库)通信的接口 (http://docs.oracle.com/javaee/7/api/javax/transaction/package-summary.html)。事务管理器实现规范,其目的是管理 XA 事务。事务管理器是 Java EE 应用服务器的一部分。

    回答你的问题

    A1) 分布式/XA 事务由事务管理器作为应用服务器的一部分进行管理。应用服务器与数据库的任何交互都通过 jdbc 驱动程序(基于应用服务器)。如果数据库是 XA 事务的完全参与者,那么数据库和驱动程序必须具备相应的能力。

    Jdbc 规范定义了 jdbc 必须为能够管理它的事务管理器提供的接口。例如,请参阅 PostgreSQL jdbc 驱动程序包 xa (https://github.com/pgjdbc/pgjdbc/tree/master/pgjdbc/src/main/java/org/postgresql/xa) 或查看 jdbc 规范本身。

    数据库必须提供正确响应 jdbc 驱动程序 xa 调用的功能,特别是必须实现 2PC。当事务管理器对prepare 数据库发出命令时,必须记住有一些准备好的事务可以处理这样和这样的数据,以便在事务管理器调用commit 后能够完成它。

    A2) 如果您将 XA 事务理解为对多个资源(某些数据库、jms 代理)的操作的事务复合,那么数据库本身没有任何其他参与者的概念(多大XA 交易是)。数据库只知道有一个 XA 事务并且我是参与者。

    所有 XA 事务管理都是事务管理器的责任。数据库运行由事务管理器驱动的 2PC。数据库只关心什么数据是这种两阶段提交的一部分,并响应来自符合 XA 规范的事务管理器的调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-14
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      • 2021-08-26
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多