使用 XA 交易時的指導方針和限制
Apache ShardingSphere 的发布版包括源码包及其对应的二进制包。 由于下载内容分布在镜像服务器上,所以下载后应该进行 GPG 或 SHA-512 校验,以此来保证内容没有被篡改。
Apache ShardingSphere - 版本: 5.0.0 ( 发布日期: Nov 10th, 2021 )
使用 PGP 或 SHA 签名验证下载文件的完整性至关重要。 可以使用 GPG 或 PGP 验证 PGP 签名。 请下载 KEYS 以及发布的 asc 签名文件。 建议从主发布目录而不是镜像中获取这些文件。
4.0 atomikos JTA/XA全局事务
在上一节我们讲解JTA规范时,提到过XADataSource、XAConnection等接口应该由资源管理器RM来实现,而Atomikos的作用是一个事务管理器(TM),并不需要提供对应的实现。而Atomikos对XADataSource进行封装,只是为了方便与事务管理器整合。封装XADataSource的实现类为 AtomikosDataSourceBean 。典型的XADataSource实现包括:
孤立的 XA 事务,SQL Server 使用的 JDBC 驱动程序连接到 SQL Server 时
SQL Server 2014 Enterprise SQL Server 2014 Enterprise SQL Server 2014 Developer SQL Server 2014 Developer SQL Server 2014 Standard SQL Server 2014 Standard SQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Standard SQL Server 2008 Enterprise SQL Server 2008 Developer SQL Server 2008 Express More. Less
使用 XA 事务、 Microsoft SQL Server JDBC 驱动程序和 Microsoft 使用 XA 交易時的指導方針和限制 SQL Server 作为后台数据库时,您可能会有孤立事务挂起在 SQL Server 上的如果事务管理器遇到故障或连接问题。
交易记录处于挂起状态的 SQL Server 实例上很长时间。它们可能具有空值或-2会话 ID 在数据库中。
事务管理器和 SQL Server 之间的连接丢失时未准备好的交易记录,则 SQL Server JDBC 驱动程序不会不清理这些交易记录,并且他们可能会继续使用资源并阻止其他事务。由于 SQL Server 的 XA 实现 JDBC 驱动程序中,SQL Server 无法检测异常的事务管理器断开。因此,SQL Server 为这些交易记录保留系统中直到 XA 事务超时或重新启动数据库。超时的 SQL Server 实例上使用无穷,并且不可配置数据库上。
重新启动数据库服务器,当您遇到任何 Java 虚拟机 (JVM) 崩溃或网络连接问题,导致在这些孤立的事务。
分别以清理其资源的数据库上停止孤立的事务。若要验证事务孤立的请确保它不是在怀疑 (准备) 或一个目前完成事务。JVM 并成功恢复周期最后通过重新启动相关的任何事务应被孤立。
设置超过最长事务以使其停止超过超时值时,就立即对 XA 事务的超时值。您可以通过调用XAResource.setTransactionTimeout()方法来执行此操作。
ShardingSphere的分布式事务
然后,我们下载并启动 Seata 服务器,这个过程需要设置 Seata 服务器 config 目录下的 registry.conf,以便指定注册中心,这里使用 ZooKeeper 来充当注册中心。关于如何启动 Seata 服务器的过程可以参考 Seata 的官方文档。请注意,按照 Seata 的运行要求,我们需要在每一个分片数据库实例中创建一张 undo_log 表。然后,我们还需要在代码工程中 classpath 中增加一个 seata.conf 配置文件:
实现 BASE 事务
基于 ShardingSphere 提供的分布式事务的抽象,我们从 XA 事务转到 BASE 事务唯一要做的事情就是重新设置 TransactionType,也就是修改一行代码: