web-dev-qa-db-fra.com

Quelle est la différence entre nonXADatasource avec jta = "true" et XADataSource?

J'ai été troublé par le fait que nous pouvons autoriser l'utilisation de transactions JTA avec une source de données non XA. Lien vers la documentation . Quelle est donc la différence entre les sources de données XA/non-XA? Pourquoi devrions-nous utiliser des sources de données XA?

17
user3663882

Une transaction XA, dans les termes les plus généraux, est une "transaction globale" qui peut s'étendre sur plusieurs ressources. Une transaction non XA implique toujours une seule ressource.

Une transaction XA implique un gestionnaire de transactions de coordination, avec une ou plusieurs bases de données (ou d'autres ressources, comme JMS) toutes impliquées dans une seule transaction globale. Les transactions non XA n'ont pas de coordinateur de transactions, et une seule ressource effectue elle-même tout son travail de transaction (ce qu'on appelle parfois des transactions locales).

jta = "true", la transaction est validée automatiquement.

29
ashokhein

Je me posais des questions à ce sujet moi-même (option "utiliser JTA" dans une source de données non XA), j'ai donc testé plusieurs configurations. J'ai une transaction distribuée connectée à deux serveurs MySQL.

Voici mes résultats. Si j'ai:

  1. Deux sources de données non XA, les deux ont JTA = "true"

Résultat: Erreur "Impossible de s'inscrire dans la transaction lors de la saisie d'un objet sensible aux métadonnées."

  1. Deux sources de données non XA, avec une JTA = "true"

Résultat: ils ne participeront pas à la transaction distribuée. Chacun s'engagera séparément.

  1. Un XA et un non-XA avec JTA = "false",

Résultat: identique à # 2

  1. Un XA et un non-XA avec JTA = "true".

Résultat: ça marche!

De ceux-ci, il semble que l'option "utiliser JTA" indique si elle participera à une transaction distribuée s'il existe une source de données XA.

14
jersey-city-ninja