Quelle est la différence entre JTA et une transaction locale ?
Un exemple montrant quand utiliser JTA et quand utiliser une transaction locale serait très utile.
Quelle est la différence entre JTA et une transaction locale ?
Un exemple montrant quand utiliser JTA et quand utiliser une transaction locale serait très utile.
JTA
est une API générale pour la gestion des transactions en Java. Elle permet de lancer, de valider et d'annuler des transactions de manière neutre en termes de ressources. Le statut transactionnel est généralement stocké dans le TLS (Thread Local Storage) et peut être propagé à d'autres méthodes dans une pile d'appels sans qu'il soit nécessaire de faire circuler un objet contextuel explicite. Les ressources transactionnelles peuvent rejoindre la transaction en cours. Si plusieurs ressources participent à une telle transaction, au moins l'une d'entre elles doit être une ressource XA.
A resource local transaction
est une transaction que vous effectuez avec une ressource unique spécifique à l'aide de son API spécifique. Une telle transaction ne se propage généralement pas à d'autres méthodes dans une pile d'appels et il est nécessaire de transmettre un objet de contexte explicite. Dans la majorité des transactions locales de ressources, il n'est pas possible d'avoir plusieurs ressources participant à la même transaction.
Vous utiliseriez une transaction locale de ressources dans le code JDBC de bas niveau de Java SE, par exemple. Ici, l'objet contexte est exprimé par une instance de java.sql.Connection
. Les développeurs qui créent des applications d'entreprise autour de 2002 sont d'autres exemples de transactions de ressources locales. Comme les gestionnaires de transactions (utilisés par JTA) étaient chers, fermés et compliqués à mettre en place à cette époque, les gens ont opté pour les variantes locales de ressources, moins chères et plus faciles à obtenir.
Vous utiliseriez une transaction JTA dans pratiquement tous les autres scénarios. Des serveurs très simples, petits, libres et gratuits comme TomEE (25MB) ou GlassFish (35MB) supportent JTA dès leur sortie de l'emballage. Il n'y a rien à configurer et ils fonctionnent tout simplement.
Enfin, des technologies telles que EJB et Spring facilitent l'utilisation de JTA en offrant les avantages suivants declarative transactions
. Dans la plupart des cas, il est conseillé de les utiliser car elles sont plus simples, plus propres et moins sujettes aux erreurs. EJB et Spring peuvent tous deux utiliser JTA sous le manteau.
Le type de transaction doit être défini sur "RESOURCE_LOCAL" pour les applications Java SE et sur "JTA" pour les applications Java EE. "RESOURCE_LOCAL" peut fonctionner correctement sur certaines applications web déployées sur Tomcat, mais peut causer des problèmes lorsque vous exécutez votre application sous l'environnement glassfish.
Si vous travaillez sur des transactions distribuées, vous devez utiliser "JTA" comme gestionnaire de transactions.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.