gpt4 book ai didi

java - 更好地理解 XA 数据源

转载 作者:行者123 更新时间:2023-12-01 18:33:57 26 4
gpt4 key购买 nike

我想在 2 个不同位置的数据库中分离 2 个表...因此 1 个 MySQL 数据库位于一个数据中心,另外 1 个位于另一个数据中心。

我在 Wildfly 中使用普通数据源,并使用 JPA 连接到 java 应用程序。现在我只想维护实体管理器中配置的一个数据源。但我必须连接第二个数据库并在与第一个数据库的单个事务中进行管理。

为此,我认为我需要一个 XA 数据源,因此我必须在 Wildfly 中配置一个数据源,其中包含指向我的 2 个 MySQL 数据库的 2 个连接字符串,并在 persistance.xml 中将 jta 数据源指向 XA数据源名称?这是正确的吗?

在这种情况下,是否存在 XA 数据源,以便以透明的方式管理两个数据库之间的事务?

最佳答案

您应该为每个架构配置一个单独的数据源。

MySQL 和 MariaDB 不完全兼容 XA。我在 Wildfly 服务器中使用 JTA 时注意到很多问题。一个主要问题是 MySQL 和 MariaDB 无法按照 JTA 的要求正确支持嵌套事务。

一个例子:

start transaction;
insert into user...
start transaction;
insert into user_details...
commit;
insert into orders...
rollback;

您所期望的是,所有内容都会回滚,因为外部事务已回滚。但相反,将提交对 user 和 user_details 表的插入,并且仅回滚订单。

由于该限制,Java EE 的整个事务管理会产生奇怪的结果。所以最好根本不要使用它。

我写了一篇关于测试 Java 企业应用程序的文章,其中包含如何在没有 JTA 的情况下使用 EntityManagerFactory 和 EntityManager 的示例:

http://stefanfrings.de/enterprise_junit/index.html#jndi

翻译成英文:

https://translate.google.com/translate?hl=en&sl=de&tl=en&u=http%3A%2F%2Fstefanfrings.de%2Fenterprise_junit%2F (跳转到JNDI章节)

关于java - 更好地理解 XA 数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60100114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com