1. Was ist eine Java-Transaktion?
Das übliche Konzept ist, dass Transaktionen nur mit Datenbanken zusammenhängen.
Transaktionen müssen den von ISO/IEC festgelegten ACID-Grundsätzen entsprechen. ACID ist die Abkürzung für Atomizität, Konsistenz, Isolation und Haltbarkeit. Die Atomizität einer Transaktion bedeutet, dass jeder Fehler während der Transaktionsausführung dazu führt, dass alle von der Transaktion vorgenommenen Änderungen ungültig werden. Konsistenz bedeutet, dass beim Scheitern einer Transaktion alle von der Transaktion betroffenen Daten in den Zustand vor der Ausführung der Transaktion zurückversetzt werden sollten. Isolation bedeutet, dass Änderungen an Daten während der Transaktionsausführung für andere Transaktionen nicht sichtbar sind, bevor die Transaktion festgeschrieben wird. Persistenz bedeutet, dass der Status der übermittelten Daten korrekt sein sollte, wenn die Transaktionsausführung fehlschlägt.
Für Laien ist eine Transaktion eine Reihe von atomaren Operationseinheiten. Aus Datenbanksicht handelt es sich um eine Reihe von SQL-Anweisungen, die alle erfolgreich ausgeführt werden Aus irgendeinem Grund werden alle zuvor ausgeführten Anweisungen abgebrochen. Die einfachere Antwort lautet: Entweder sind alle Ausführungen erfolgreich, oder sie werden abgebrochen und nicht ausgeführt.
Was ist eine Java-Transaktion, da das Konzept der Transaktion aus der Datenbank stammt? Was ist die Verbindung?
Wenn ein Java-Anwendungssystem eine Datenbank betreiben möchte, wird dies tatsächlich über JDBC implementiert. Hinzufügung, Änderung und Löschung werden alle indirekt über entsprechende Methoden implementiert, und die Transaktionssteuerung wird entsprechend auch an den Java-Programmcode übertragen. Daher werden Datenbankoperationstransaktionen traditionell als Java-Transaktionen bezeichnet.
2. Warum Java-Transaktionen benötigt werden
Transaktionen werden zur Lösung von Datensicherheitsvorgängen vorgeschlagen. Die Transaktionskontrolle dient eigentlich dazu, den sicheren Zugriff auf Daten zu kontrollieren. Hier ein einfaches Beispiel: Beispielsweise möchte Konto A im Banküberweisungsgeschäft 1.000 Yuan von seinem eigenen Konto auf Konto B überweisen. Dabei muss zunächst der Saldo von Konto A um 1.000 Yuan abgezogen werden, dann der Saldo von Konto B um 1.000 Yuan erhöht werden. Wenn im Zwischennetzwerk ein Problem vorliegt und die Abbuchung von 1.000 Yuan vom Konto von A beendet wurde und der Betrieb von B aufgrund einer Netzwerkunterbrechung fehlschlägt, fällt das gesamte Geschäft aus und es muss eine Kontrolle vorgenommen werden, um die Stornierung des Kontos zu verlangen Transfergeschäft des Kontos von A. Nur so kann die Korrektheit des Geschäfts sichergestellt werden. Um diesen Vorgang abzuschließen, müssen entweder alle Ausführungen auf Konto A und die Aufstockung auf Konto B zusammengefasst werden Vorgänge werden abgebrochen, wodurch die Sicherheit der Daten gewahrt bleibt.
3. Arten von Java-Transaktionen
Es gibt drei Arten von Java-Transaktionen: JDBC-Transaktionen, JTA-Transaktionen (Java Transaction API) und Containertransaktionen.
1. JDBC-Transaktionen
JDBC-Transaktionen werden durch Verbindungsobjekte gesteuert. Die JDBC-Verbindungsschnittstelle (java.sql.Connection) bietet zwei Transaktionsmodi: automatische Übermittlung und manuelle Übermittlung. java.sql.Connection bietet die folgenden Methoden zur Steuerung von Transaktionen:
public void setAutoCommit(boolean)
public boolean getAutoCommit()
public void commit()
public void rollback()
Bei Verwendung der JDBC-Transaktionsdefinition können Sie mehrere verwenden SQL-Anweisungen werden zu einer Transaktion zusammengefasst. Ein Nachteil von JDBC-Transaktionen besteht darin, dass der Umfang der Transaktion auf eine Datenbankverbindung beschränkt ist. Eine JDBC-Transaktion kann nicht mehrere Datenbanken umfassen.
2. JTA-Transaktion (Java Transaction API)
JTA ist eine implementierte und protokollunabhängige API auf hoher Ebene. Anwendungen und Anwendungsserver können JTA verwenden, um auf Transaktionen zuzugreifen.
JTA ermöglicht Anwendungen die Durchführung verteilter Transaktionen – den Zugriff auf und die Aktualisierung von Daten auf zwei oder mehr Netzwerkcomputerressourcen, die über mehrere Datenbanken verteilt sein können. Die JTA-Unterstützung des JDBC-Treibers verbessert die Datenzugriffsmöglichkeiten erheblich.
Wenn Sie JTA zum Begrenzen von Transaktionen verwenden möchten, benötigen Sie einen JDBC-Treiber, der die Schnittstellen javax.sql.XADataSource, javax.sql.XAConnection und javax.sql.XAResource implementiert. Ein Treiber, der diese Schnittstellen implementiert, kann an JTA-Transaktionen teilnehmen. Ein XADataSource-Objekt ist eine Factory für XAConnection-Objekte. XAConnection s sind JDBC-Verbindungen, die an JTA-Transaktionen teilnehmen.
Sie müssen die XADataSource mit den Verwaltungstools Ihres Anwendungsservers einrichten. Anleitungen finden Sie in der Dokumentation zum Anwendungsserver und JDBC-Treiber.
J2EE-Anwendungen verwenden JNDI zum Abfragen von Datenquellen. Sobald die Anwendung das Datenquellenobjekt findet, ruft sie javax.sql.DataSource.getConnection() auf, um eine Verbindung zur Datenbank herzustellen.
XA-Verbindungen unterscheiden sich von Nicht-XA-Verbindungen. Es ist wichtig zu bedenken, dass XA-Verbindungen an JTA-Transaktionen beteiligt sind. Das bedeutet, dass XA-Verbindungen die Autocommit-Funktion von JDBC nicht unterstützen. Gleichzeitig dürfen Anwendungen nicht java.sql.Connection.commit() oder java.sql.Connection.rollback() für XA-Verbindungen aufrufen.
Stattdessen sollten Anwendungen UserTransaction.begin(), UserTransaction.commit() und serTransaction.rollback() verwenden.
3. Containerangelegenheiten
Containertransaktionen werden hauptsächlich von J2EE-Anwendungsservern bereitgestellt. Containertransaktionen werden größtenteils auf Basis von JTA durchgeführt, einer recht komplexen API-Implementierung auf Basis von JNDI. Im Vergleich zur Codierung zur Implementierung der JTA-Transaktionsverwaltung können wir dieselbe Funktion über den vom EJB-Container bereitgestellten Container-Transaktionsverwaltungsmechanismus (CMT) ausführen. Diese Funktion wird vom J2EE-Anwendungsserver bereitgestellt. Dadurch können wir einfach angeben, welche Methode zur Transaktion hinzugefügt werden soll, und sobald sie angegeben ist, übernimmt der Container die Transaktionsverwaltungsaufgaben. Dies ist unsere Tiefbaulösung, denn auf diese Weise können wir Transaktionscode von der logischen Codierung ausschließen und gleichzeitig alle Schwierigkeiten dem J2EE-Container überlassen, ihn zu lösen. Ein weiterer Vorteil der Verwendung von EJB CMT besteht darin, dass sich Programmierer nicht um die Codierung der JTA-API kümmern müssen. Theoretisch müssen wir jedoch EJB verwenden.
Vier. Drei Arten von Java-Transaktionsunterschieden
1 Die Einschränkung der JDBC-Transaktionssteuerung liegt innerhalb einer Datenbankverbindung, ihre Verwendung ist jedoch einfach.
2. JTA-Transaktionen sind leistungsstark und können mehrere Datenbanken oder DAOs umfassen, und ihre Verwendung ist auch relativ komplex.
3. Containertransaktionen beziehen sich hauptsächlich auf die vom J2EE-Anwendungsserver bereitgestellte Transaktionsverwaltung und sind auf EJB-Anwendungen beschränkt.
Das obige ist der detaillierte Inhalt vonWie man die Prinzipien von Java-Dingen versteht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!