Automatisiertes Datensatz-Locking

Anfang  Zurück  Vor

Letzte Änderung 13.02.2014

 

Das XDEV Application Framework stellt Ihnen ein Konzept für pessimistisches Datensatz-Locking zur Verfügung, das dafür ausgelegt ist, möglichst viele Standard-Anwendungsfälle abzudecken. Beim pessimistischen Locking wird ein zu bearbeitender Datensatz für die gesamte Bearbeitungszeit gesperrt, sodass der Datensatz von keiner anderen Transaktion (i.d.R. Benutzer) verändert werden kann.

 

Standardmäßig wird das automatisierte Datensatz-Locking von der GUI-Komponete XdevFormular unterstützt. Mit Verwendung der API kann das Locking auch in Verbindung mit anderen GUI-Komponenten verwendet werden, z.B. mit der XdevTable.

 

Wie das Locking-Verfahren im Detail funktionieren soll, insbesondere wann ein Datensatz gelockt wird, wie lange ein Datensatz gesperrt bleibt und unter welchen Umständen Locks wieder aufgehoben werden sowie die Kommunikation mit dem Endanwender, lässt sich über die Eigenschaften der GUI-Komponenten XdevTable, XdevFormular sowie XdevVirtualFormular konfigurieren, die das automatisierte Locking unterstützen.

 

Das Sperren der Datensätze erfolgt direkt in der Datenbank mit Hilfe einer speziellen Lock-Tabelle (XDEVPESSIMISTICLOCKTABLE), in der lediglich Referenzen auf die in Bearbeitung befindlichen Datensätze gespeichert werden. Außer dem Anlegen der Lock-Tabelle müssen Sie keine weiteren Eingriffe an Ihrem Datenmodell vornehmen, sodass das Konzept auch mit bereits vorhandenen Datenbanken funktioniert.

 

Die API wurde so designed, dass Sie das Konzept nach Ihren Bedürfnissen flexibel ändern und erweitern können. Falls das Konzept für Ihren Anwendungsfall nicht geeignet ist, können Sie jederzeit ein anderes Verfahren verwenden.

 

 

 

Lock-Tabelle in Ihrer Datenbank

 

Für die Verwendung des Lock-Verfahrens müssen Sie in Ihrer Datenbank eine Tabelle mit dem Namen XDEVPESSIMISTICLOCKTABLE mit folgenden Datenfeldern und Constraints anlegen:

ID [INTEGER]- Die ID des Datensatzes ist der Primärschlüssel und muss ein Autowert sein, der von der Datenbank vergeben wird. Bei Datenbanken die Autowerte nicht unterstützen, muss ein entsprechender Workarounds implementiert werden, der dasselbe Resultat erzielt.

VALIDUNTIL [TIMESTAMP] - Zeitpunkt an dem das Lock abläuft.

TABLEROWIDENTIFIER [VARCHAR] - Eindeutiger Identifikations-Schlüssel des gelockten Datensatzes, der u.a. die ID des gelockten Datensatzes enthält.

USERSTRING [VARCHAR] - Anwender der den Datensatz gelockt hat. Standardmäßig wird ein Hashcode gespeichert.

TABLENAME [VARCHAR] - Name der Datenbanktabelle in der sich der gelockte Datensatz befindet.

USERID [INTEGER] - ID des Anwenders der den Datensatz gelockt hat.

 

 

Hinweis: Wenn Ihre Anwendung auf mehrere Datenbanken zugreift, benötigen Sie in jeder verwendeten Datenbank eine XDEVPESSIMISTICLOCKTABLE.

 

Hinweis: Falls weitere Anwendungen oder Dienste schreibend auf Ihre Datenbank zugreifen, müssen auch diese das XDEV-Lock-Konzept verwenden und sämtliche Vorgaben strikt einhalten. Ansonsten ist das gesamte Lock-Konzept hinfällig.

 

 

Sie können sich die Lock-Tabelle von XDEV 5 automatisch in Ihrer Datenbank anlegen lassen.

 

1.Legen Sie eine neue Datenquelle an oder wählen Sie Ihre bereits existierende Datenquelle an.

2.Klicken Sie im folgenden Verbindungs-Assistenten bei Metadaten auf Erzeuge Locking Tabelle.

clip0519

 

 

 

Wichtige Eigenschaften

 

Automatisches Datensatz Locking - Aktiviert das automatische Datensatz-Locking.

Timer anzeigen - Zeigt in einer Text-Komponente die verbleibende Lockdauer als Countdown an, z.B. XdevLabel.

Sperr-Hinweis - Ermöglicht die Ausgabe eines Hinweises, falls der Datensatz bereits gesperrt ist und ermöglicht zudem die Sperrung der Eingabe- und Auswahlfelder auf der Oberfläche.

Lock-Aktivierung - Zeitpunkt wann das Lock aktiviert werden soll. Entweder sobald der Datensatz im Formular angezeigt wird oder erst bei der ersten Änderung.

Lock Dauer - Zeit in ms für die der  Datensatz gelockt wird.

Lock erneuerbar - Erlaubt dem Anwender die Bearbeitungsdauer zu verlängern.

Warnung bei Restzeit - Bei Erreichen der angegebenen Restzeit (ms) wird eine Standard-Warnung mit dem Hinweis angezeigt, dass das Lock in Kürze ausläuft.

 

 

 

Locking bei Formularen

 

1.Ziehen Sie die Virtuelle Tabelle Fahrzeuge mit Drag&Drop in die Arbeitsfläche, um ein Formular generieren zu lassen.

2.Klicken Sie im folgenden Formular-Assistent auf OK, um sämtliche Standardeinstellungen zu übernehmen.

3.Wählen Sie in den Eigenschaften Automatisches Datensatz Locking an.

4.Wählen Sie die Eigenschaft Formular sperren bei Lock an.

5.Wählen Sie in bei Lock-Aktivierung Erst bei Änderung aus.

6.Geben Sie bei Lock Dauer 60.000 an, um den bearbeiteten Datensatz 1 Minute zu locken.

 

 

 

Sperr-Hinweis

 

Im Sperr-Hinweis wird angezeigt, welcher Anwender den Datensatz gerade bearbeitet. Der Anwender wird aus der XDEVPESSIMISTICLOCKTABLE aus dem Datenfeld USERSTRING [VARCHAR] ausgelesen. Standardmäßig wird für jeden User ein eindeutiger Hashcode (unique) abgespeichert, der damit auch im Sperr-Hinweis erscheint. Der Hashcode kann jedoch sehr leicht durch den Benutzername des Anwenders ersetzt werden. Der Benutzername wird i.d.R. bei Programmstart aus einer Benutzerverwaltung ausgelesen und kann dann mit Hilfe der Methode setUserName( ) im Programm gesetzt werden.

 

 

package Fenster;
import xdev.db.locking.ClientSession;
import xdev.lang.EventHandlerDelegate;
import xdev.ui.XdevWindow;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
 
public class StartWindow
extends XdevWindow 
{
   @EventHandlerDelegate void this_windowClosing(WindowEvent event) 
   {
      close();
   }
 
   @EventHandlerDelegate void this_init() 
   {
        String userName = "";    
        // Username jetzt aus Benutzerverwaltung auslesen
        
        ClientSession.setUserName(userName);             
   }

 

 

clip0535