web-dev-qa-db-fra.com

Unité de persistance comme RESOURCE_LOCAL ou JTA?

J'ai des questions comme ci-dessous:

  1. Quelle est la différence de ces deux? 
  2. Est-ce que les deux sont supportés par toutes les bases de données?
  3. JPA TransactionManager et JTA TransactionManager sont-ils différents?
80
cometta

Les implémentations JPA ont le choix de gérer les transactions elles-mêmes (RESOURCE_LOCAL) ou de les faire gérer par l'implémentation JTA du serveur d'applications.

Dans la plupart des cas, RESOURCE_LOCAL va bien. Cela utiliserait des transactions de base au niveau JDBC. L'inconvénient est que la transaction est locale à l'unité de persistance JPA. Par conséquent, si vous souhaitez une transaction couvrant plusieurs unités de persistance (ou d'autres bases de données), alors RESOURCE_LOCAL risque de ne pas être suffisant.

JTA est également utilisé pour gérer les transactions sur des systèmes tels que JMS et JCA, mais c'est un usage assez exotique pour la plupart d'entre nous.

Pour utiliser JTA, vous avez besoin d'une prise en charge correspondante sur votre serveur d'applications, ainsi que du pilote JDBC.

90
skaffman

Resource_Local et JTA sont des gestionnaires de transactions (méthodes pour effectuer des transactions). Ce n'est pas la propriété de la base de données mais le composant responsable de la coordination des transactions. Les gestionnaires de transactions JPA et JTA sont différents. Le gestionnaire de transactions JPA est responsable des transactions JPA et vous souhaitez en utiliser une si vous ne faites que des transactions JPA. Le gestionnaire de transactions JTA est un gestionnaire de transactions à usage général et peut faire appel à d'autres ressources telles que les files d'attente JMS dans une transaction. Les conteneurs Java EE utilisent généralement un gestionnaire de transactions JTA pour les EJB, les entités JPA, etc. 

16
Chandra Patni

resource_local vs JTA concerne la transaction locale par rapport à la transaction globale. Il s’agit de pouvoir gérer plusieurs ressources en une seule transaction.

CMT vs BMT sont à savoir qui est l'ouverture et la fermeture de transaction - développeur d'application ou serveur d'applications.

0
Jain