Weitere aktuelle Java-Titel finden Sie bei dpunkt.
 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index


18.11.3

Isolations-Ebenen


Befindet sich die Datenbank-Sitzung nicht im Auto-Commit Modus, kann man durch das Setzen der Isolations-Ebene festlegen, inwiefern in einer Transaktion durchgeführte Änderungen für andere Clients sichtbar sind. Prinzipiell gilt, je restriktiver die Isolations-Ebene ist, desto schlechter wird die Performance beim Zugriff mehrerer Clients, da Sperren in der Datenbank gesetzt werden müssen.

Bei der Durchführung von Änderungen unterscheidet man prinzipiell folgende Probleme: Die einzelnen Isolations-Ebenen unterscheiden sich dadurch, dass sie jeweils verschiedene dieser möglichen Probleme beheben. Je mehr dieser Probleme in einer Transaktion behoben werden, desto geringer wird die Verarbeitungsgeschwindigkeit bei vielen gleichzeitigen Nutzerzugriffen, da für die größere Einschränkung der Sichtbarkeit von Änderungen in einer Transaktion mehr Sperren vom Datenbanksystem gesetzt werden müssen. In Abbildung 18.26 sind die in JDBC definierten Isolations-Ebenen aufgeführt (nach ANSI-92 SQL). Die in der ersten Spalte angegebenen Konstanten sind in der Klasse Connection definiert.

Abbildung 18.26: Isolations-Ebenen in JDBC
Abbildung 18.26

Nicht jedes Datenbanksystem unterstützt alle Isolations-Ebenen. Welche Isolations-Ebenen von einer Datenbank unterstützt werden, kann man über die Metadaten-Schnittstelle in JDBC ermitteln. Die Klasse DatabaseMetaData stellt hierfür die Methode supportsTransactionIsolationLevel() zur Verfügung. supportsTransactionIsolationLevel() erwartet als Parameter eine der in Abbildung 18.26 aufgeführten Konstanten. In den folgenden Zeilen wird geprüft, ob die Isolations-Ebene Serializable (nicht zu verwechseln mit dem Java-Interface Serializable) unterstützt wird:
  Connection con = DriverManager.getConnection(url, user, password);
  DatabaseMetaData meta = con.getMetaData();
  if(meta.supportsTransactionIsolationLevel(
                           Connection.TRANSACTION_SERIALIZABLE)))
    System.out.println("Serializable wird unterstützt");
  else
    System.out.println("Serializable wird nicht unterstützt");

Die aktuelle Isolations-Ebene kann ebenfalls über die Metadaten-Schnittstelle mit der Methode getDefaultTransactionIsolation() ermittelt werden. Folgender Code-Ausschnitt zeigt, wie hierbei vorgegangen wird.
  Connection con = DriverManager.getConnection(url, user, password);
  DatabaseMetaData meta = con.getMetaData();
  switch(meta.getDefaultTransactionIsolation()) {
  case Connection.TRANSACTION_NONE:
    System.out.println("none"); break;
  case Connection.TRANSACTION_READ_UNCOMMITTED:
    System.out.println("read uncommitted"); break;
  case Connection.TRANSACTION_READ_COMMITTED:
    System.out.println("read committed"); break;
  case Connection.TRANSACTION_REPEATABLE_READ:
    System.out.println("repeatable_read"); break;
  case Connection.TRANSACTION_SERIALIZABLE:
    System.out.println("serializable"); break;
  }


 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index

Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.