Durch Sperrenaktualisierungen verursachte Datenbank-Deadlocks

Zur Vermeidung von gegenseitigem Sperren (Deadlocks) in Datenbanken, das durch Sperrenaktualisierungen verursacht wird, können Sie die Richtlinie für Zugriffsarten für Entity-Beans vom Standardwert "wsPessimisticUpdate-WeakestLockAtLoad" in "wsPessimisticUpdate" ändern oder ein Konzept mit optimistischen Sperren verwenden.

Wenn parallel auf Daten in einer Datenbank zugegriffen wird, muss die Anwendung auf Datenbanksperren vorbereitet sein, die gesetzt werden müssen, um die Integrität der Daten sicherzustellen.

Wenn eine Entity-Bean eine "findByPrimaryKey"-Methode ausführt, die standardmäßig eine Lesesperre für die Datenbank anfordert, und die Entity-Bean in derselben Transaktion aktualisiert wird, dann findet eine Sperrenaktualisierung in "Exklusiv" statt.

Falls dieses Szenario in mehreren Threads gleichzeitig auftritt, kann es zu einem gegenseitigen Sperren (Deadlock) kommen. Dies liegt daran, dass mehrere Lesesperren gleichzeitig festgelegt werden können, dass eine exklusive Sperre aber nur dann festgelegt werden kann, wenn die anderen Sperren freigegeben werden. Weil in diesem Szenario alle Transaktionen versuchen, eine Sperrenaktualisierung auszuführen, kann diese eine "exklusive" Sperre niemals erteilt werden.

Sie können dieses Problem vermeiden, indem Sie die Richtlinie für Zugriffsarten für die Entity-Bean vom Standardwert "wsPessimisticUpdate-WeakestLockAtLoad" in "wsPessimisticUpdate" ändern. Aufgrund dieser Änderung ist die Anwendung in der Lage, das Produkt und die Datenbank darüber zu informieren, dass die Transaktion die Enterprise-Bean aktualisiert hat. Die Aktualisierungssperre wird unverzüglich für der Methode "findByPrimaryKey" festgelegt. Damit wird die Sperrenaktualisierung vermieden, wenn die Aktualisierung später durchgeführt wird.

Die bevorzugte Methode für das Definieren von Richtlinien für Zugriffsarten ist die Änderung der Zugriffsart für die gesamte Entity-Bean. Sie können zwar auch die Zugriffsart für die Methode "findByPrimaryKey" ändern, aber diese Methode ist ab Version 6.0 veraltet. Sie können die Zugriffsart für einzelne Methoden ändern, wenn die Entity-Bean beispielsweise an schreibgeschützten Transaktionen beteiligt ist.

Ein alternatives Verfahren ist die Verwendung einer optimistischen Methode, bei der die Methode "findByPrimaryKey" keine Lesesperre hält und somit auch keine Sperrenaktualisierung durchgeführt wird. Dieses Verfahren setzt jedoch voraus, dass die Anwendung entsprechend codiert ist, damit potenzielle Rollback-Operationen durchgeführt werden können. Optimistisches Sperren ist für Anwendungen bestimmt, die keine Konkurrenzsituationen in der Datenbank erwarten.

Zum Ändern der Richtlinie für Zugriffsarten für eine Entity-Bean können Sie mit dem Assembliertool, wie im Artikel Richtlinien für Zugriffsarten auf Beans anwenden beschrieben, die Bean-Stufe festlegen.


Symbol, das den Typ des Artikels anzeigt. Konzeptartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cejb_ailu
Dateiname:cejb_ailu.html