我想在2个不同位置的数据库中分离2个表...因此,1个MySQL数据库位于一个数据中心,另一个位于另一个数据中心。
我使用的是Wildfly中的一个普通数据源,它使用JPA连接到一个java应用程序。现在我只想管理一个在实体管理器中配置的数据源。但我必须连接第二个数据库,并在第一个数据库的单个事务中进行管理。
要做到这一点,我认为我需要一个XA数据源,所以我必须配置一个数据源,该数据源包含指向我的2个MySQL数据库的2个连接字符串,并在persistance.xml中将jta数据源指向XA数据源名称?对吗?
对于这种情况,XA数据源是否存在,用于以透明方式管理两个数据库之间的事务?
发布于 2020-02-07 03:01:06
您应该为每个架构配置一个单独的数据源。
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的整个事务管理都会产生奇怪的结果。所以最好不要使用它。
我写了一篇关于测试Java企业应用程序的文章,其中包含一个如何在没有JTA的情况下使用EntityManagerFactory和EntityManager的示例:
http://stefanfrings.de/enterprise_junit/index.html#jndi
翻译成英文:
https://stackoverflow.com/questions/60100114
复制相似问题