Понять лучше XA Datasource - PullRequest
0 голосов
/ 06 февраля 2020

Я хочу разделить 2 таблицы в 2 разных базах данных ... так что 1 MySQL база данных в одном центре данных, а другая 1 в другом.

Я использую обычный источник данных в Wildfly, подключенный к java приложение с использованием JPA. Теперь я хочу поддерживать только один источник данных, настроенный в менеджере сущностей. Но мне нужно подключить вторую базу данных и управлять одной транзакцией с первой.

Чтобы сделать это, я думаю, что мне нужен источник данных XA, поэтому мне нужно настроить в wildfly один источник данных, который содержит строку 2 соединений, которые указывают на мою базу данных 2 MySQL и в персистентности. xml указать источник данных jta на имя источника данных XA? Это правильно?

Для этого случая существует источник данных XA для управления транзакцией между двумя базами данных прозрачным способом?

1 Ответ

0 голосов
/ 06 февраля 2020

Необходимо настроить один отдельный источник данных для каждой схемы.

MySQL и MariaDB не полностью совместимы с XA. Я заметил много проблем при использовании JTA на сервере Wildfly. Одна из основных проблем заключается в том, что 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 корпоративных приложений, в которой содержится пример использования EntityManagerFactory и EntityManager без JTA:

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

Перевод на английский sh:

https://translate.google.com/translate?hl=en&sl=de&tl=en&u=http%3A%2F%2Fstefanfrings.de%2Fenterprise_junit%2F (перейти к главе JNDI)

...