Quelle est la différence entre JTA et une transaction locale?
Un exemple qui montre quand utiliser JTA et quand utiliser une transaction locale serait formidable.
JTA
est une API générale pour gérer les transactions en Java. Il vous permet de démarrer, valider et annuler des transactions d'une manière neutre en termes de ressources. Le statut transactionnel est généralement stocké dans TLS (Thread Local Storage) et peut être propagé à d'autres méthodes dans une pile d'appels sans avoir besoin de transmettre un objet de contexte explicite. Les ressources transactionnelles peuvent rejoindre la transaction en cours. S'il y a plus d'une ressource participant à une telle transaction, au moins l'une d'entre elles doit être une ressource dite XA.
UNE resource local transaction
est une transaction que vous avez avec une seule ressource spécifique en utilisant sa propre API spécifique. Une telle transaction ne se propage généralement pas à d'autres méthodes dans une pile d'appels et vous devez transmettre un objet contextuel 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 ressource dans par exemple du code JDBC de bas niveau dans Java SE. Ici, l'objet contextuel est exprimé par une instance de Java.sql.Connection
. D'autres exemples de transactions locales de ressources sont les développeurs qui créent des applications d'entreprise vers 2002. Comme les gestionnaires de transactions (utilisés par JTA) étaient coûteux, de source fermée et des choses compliquées à configurer à cette époque, les gens optaient 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. Les serveurs très simples, petits, gratuits et open source comme TomEE (25 Mo) ou GlassFish (35 Mo) ont un support JTA prêt à l'emploi. Il n'y a rien à configurer et ils fonctionnent.
Enfin, des technologies comme EJB et Spring rendent même JTA plus facile à utiliser en offrant declarative transactions
. Dans la plupart des cas, il est conseillé de les utiliser car ils sont plus faciles, plus propres et moins sujets aux erreurs. EJB et Spring peuvent utiliser JTA sous les couvertures.
Le type de transaction doit être défini sur "RESOURCE_LOCAL" pour Java SE et sur "JTA" pour Java EE). "RESOURCE_LOCAL" peut fonctionner correctement sur certains application Web déployée sur Tomcat, mais peut provoquer des problèmes lorsque vous exécutez votre application dans un environnement glassfish.
Si vous travaillez sur des transactions distribuées, vous devez utiliser "JTA" comme gestionnaire de transactions.
L'API Java Transaction API (JTA)) est l'une des API Java Enterprise Edition (Java EE) permettant d'effectuer des transactions distribuées sur plusieurs ressources XA dans un = Java.