Optimistic Locking

Lange Transaktionen absichern

Bei langen Transaktionen, beispielsweise wenn Benutzer über eine GUI Daten erfassen oder ändern, führt ein Lock auf der Datenbank oft zu nicht akzeptablen Performance-Einschränkungen. In der Regel werden durch Locking die Tabellen gesperrt, auf denen aktuell gearbeitet wird. Daher wird bei Applikationen, die nach dem Muster „oft lesen, selten ändern“ arbeiten, eine optimistische Locking-Strategie verfolgt:

  • Transaktionen werden nur eingesetzt, um die Daten für die GUI zu holen und nach Abschluss der Bearbeitung wieder zu speichern.
  • Wenn die zugrunde liegenden Datensätze in der Zwischenzeit von einem anderen Benutzer geändert wurden, schlägt die Speicherung fehl und es wird eine Exception ausgelöst. Es werden also keine Änderungen unbemerkt überschrieben.
  • Die Daten in Bearbeitung können dann mit den Änderungen aktualisiert und anschließend wieder gespeichert werden.

JPA unterstützt optimistisches Locking über ein Versionsattribut in den Tabellen mit der Annotation @Version. Dieses Attribut wird bei jedem Speichern automatisch aktualisiert, so dass Änderungen an den Daten in der Tabelle leicht erkannt und Konflikte automatisch abgefangen werden können. Hibernate erweitert den Mechanismus noch um die Möglichkeit, ohne explizites Versionsattribut auszukommen, indem alle Attribute auf Änderungen überprüft werden. Allerdings sollte dieses Verfahren nur für Datenbanken angewandt werden, die nicht geändert werden können (Legacy Data).

Aufgabe

Optimistic Locking ist in den Domainklassen noch nicht implementiert. Erweitern Sie daher alle Domainklassen um ein Versionsattribut. Wählen Sie dafür einen geeigneten Datentyp.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.