我正在努力理解distributed transactions
in Java EE
。在阅读了一些在线材料和书籍之后,我了解到在Java中有特定的API,称为JTA
,它是Java处理分布式事务的技术栈之一。除了JTA之外,还有其他一些概念,如:2PC (two-phase commit) strategy
、XA, the eXtended Architecture
。
仅考虑数据库,对于分布式事务,我有以下问题:
Q1)对于分布式事务的真正支持是否来自数据库驱动程序本身?
Q2)数据库(真正的db)是否知道分布式事务,还是由其他组件负责?
有人能帮我清除这些查询吗?
发布于 2016-07-24 16:16:35
简而言之,真正具有事务性功能的是数据库。数据库必须注意提交后的数据是一致的,并正确地存储到磁盘。
同时,驱动程序可以帮助您管理事务。例如,在第一次请求时为您打开它或自动提交它。
编辑:对不起,主要问题是关于分布式事务。分布式事务由驱动程序和事务管理器处理。从数据库的角度来看,这个事务没有什么特别之处。
发布于 2016-08-10 19:34:03
JTA ( Java规范)定义了用于事务管理器与应用服务器(例如WildFly)、应用程序(您的代码)和资源(例如数据库)通信的接口(WildFly)。事务管理器实现该规范,其目的是管理XA事务。事务管理器是Java应用服务器的一部分。
回答你的问题
A1)分布式/XA事务由事务管理器作为应用服务器的一部分进行管理。从应用服务器到数据库的任何交互都要经过jdbc驱动程序(基于app服务器)。如果数据库是XA事务的完全参与者,那么数据库和驱动程序就必须具备相应的功能。
Jdbc规范定义了jdbc必须提供的接口,以便事务管理器能够管理它。例如,请参见PostgreSQL jdbc驱动程序包xa (https://github.com/pgjdbc/pgjdbc/tree/master/pgjdbc/src/main/java/org/postgresql/xa)或检查jdbc本身。
数据库必须提供正确响应jdbc驱动程序xa调用的功能,特别是必须实现2PC。当事务管理器命令准备数据库时,必须记住,有一些准备好的事务与这些数据一起工作,以便能够在事务管理器调用commit之后完成它。
如果您将XA事务理解为对几个资源(一些数据库,一个jms代理)的操作中的事务复合,那么数据库本身就没有任何其他参与者的概念( XA事务有多大)。数据库只知道存在XA事务,而我是参与者。
所有XA事务管理都是事务管理人员的职责。数据库运行由事务管理器驱动的2PC。数据库只关心哪些数据是这种两阶段提交的一部分,并且响应来自符合XA规范的事务管理器的调用。
https://stackoverflow.com/questions/38455321
复制相似问题