Was ist der Unterschied zwischen JTA und einer lokalen Transaktion?
Ein Beispiel, das zeigt, wann JTA und wann eine lokale Transaktion verwendet werden soll, wäre großartig.
Was ist der Unterschied zwischen JTA und einer lokalen Transaktion?
Ein Beispiel, das zeigt, wann JTA und wann eine lokale Transaktion verwendet werden soll, wäre großartig.
Antworten:
JTA
ist eine allgemeine API zum Verwalten von Transaktionen in Java. Sie können Transaktionen ressourcenneutral starten, festschreiben und zurücksetzen. Der Transaktionsstatus wird normalerweise in TLS (Thread Local Storage) gespeichert und kann an andere Methoden in einem Aufrufstapel weitergegeben werden, ohne dass ein explizites Kontextobjekt übergeben werden muss. Transaktionsressourcen können der laufenden Transaktion beitreten. Wenn mehr als eine Ressource an einer solchen Transaktion beteiligt ist, muss mindestens eine davon eine sogenannte XA-Ressource sein.
A resource local transaction
ist eine Transaktion, die Sie mit einer bestimmten einzelnen Ressource unter Verwendung einer eigenen spezifischen API haben. Eine solche Transaktion wird normalerweise nicht an andere Methoden in einem Aufrufstapel weitergegeben, und Sie müssen ein explizites Kontextobjekt weitergeben. Bei den meisten lokalen Ressourcen-Transaktionen ist es nicht möglich, dass mehrere Ressourcen an derselben Transaktion teilnehmen.
Sie würden eine ressourcenlokale Transaktion beispielsweise in JDBC-Code auf niedriger Ebene in Java SE verwenden. Hier wird das Kontextobjekt durch eine Instanz von ausgedrückt java.sql.Connection
. Andere Beispiele für ressourcenlokale Transaktionen sind Entwickler, die um 2002 Unternehmensanwendungen erstellen. Da Transaktionsmanager (von JTA verwendet) zu dieser Zeit teuer, geschlossen und kompliziert einzurichten waren, entschieden sich die Leute für die billigeren und einfacher zu beschaffenden ressourcenlokalen Varianten.
Sie würden eine JTA-Transaktion in praktisch jedem anderen Szenario verwenden. Sehr einfache, kleine, kostenlose und Open-Source-Server wie TomEE (25 MB) oder GlassFish (35 MB) bieten sofort JTA-Unterstützung. Es gibt nichts einzurichten und sie funktionieren einfach.
Schließlich vereinfachen Technologien wie EJB und Spring die Verwendung von JTA durch das Angebot declarative transactions
. In den meisten Fällen wird empfohlen, diese zu verwenden, da sie einfacher, sauberer und weniger fehleranfällig sind. Sowohl EJB als auch Spring können JTA unter der Decke verwenden.
Der Transaktionstyp sollte für Java SE-Anwendungen auf "RESOURCE_LOCAL" und für Java EE-Anwendungen auf "JTA" gesetzt werden. "RESOURCE_LOCAL" funktioniert möglicherweise in einigen auf Tomcat bereitgestellten Webanwendungen einwandfrei, kann jedoch Probleme verursachen, wenn Sie Ihre Anwendung in einer Glassfish-Umgebung ausführen.
Wenn Sie an verteilten Transaktionen arbeiten, müssen Sie "JTA" als Transaktionsmanager verwenden.
Die J2EE-Anwendung enthält Unterstützung für DT über 2 Spezifikationen.
JTA ---> Java Transaction API.Highe-Level-Implementierung und ist immer aktiviert.
JTS ---> Java Transaction Service.