Browserfunktionen abfangen

mephisto22

Grünschnabel
Hallo!

Ich hab folgendes Problem. Meine Webanwendung dient dazu Datensätze aus einer DB auszulesen, sie zu bearbeiten und wieder abzuspeichern. Das ganze funktioniert so, dass wenn ein Datensatz geöffnet wird, sein Status in der DB auf "in Bearbeitung" gesetzt wird sodass kein anderer Benutzer ihn öffnen kann. Wenn der Datensatz dann gespeichert oder geschlossen (über einen Button) wird, ist der Datensatz dann wieder freigegeben.

Wenn aber jetzt ein Benutzer einen Datensatz öffnet (und somit der Status auf in Bearbeitung gesetzt wird) und danach das Browserfenster schliesst, bleibt der Datensatz auf "in Bearbeitung" und kann nur mehr vom Admin wieder freigegeben werden.

Vielleicht hat ja irgendwer eine Idee wie man das am Besten lösen könnte...Ideal wäre es wenn ich das schliessen des Browsers abfangen könnte...
 
Ich hab leider nicht viel Erfahrung, was programmierung im Browser angeht. Aber mein Vorschlag wäre, dass du nen Controller hast, der die Datensätze sperrt/frei gibt. Dieser Controller gibt dann den Datensatz wieder frei, wenn 10 Minuten oder so keine Rückmeldung kam.

MFG

zEriX
 
Auf das Schließen des Browsers kannst Du nicht reagieren, aber auf ein session timeout und zwar mit einem HttpSessionBindingListener.

Du könntest einen statischen LockManager schreiben, an dem du alle gelockten Objekte für die Session registierst. Beim valueUnbound kannst Du dann alle Locks dieser Session wieder freigeben.

Eine einfachere Variante ist das Lock durch einen Timestamp zu ersetzen und bei der Überschreitung einer bestimmten Zeitspanne das Objekt wieder als frei zu betrachten.

Gruß, Basti
 
Danke für eure Antworten!

Ich hab auch schon überlegt ob nicht einfach beim öffnen der Datensätze einen Timestamp setze und wenn dieser älter als 10-20 Minuten ist, die Datensätze einfach wieder schliesse.

Ein Problem das ich dabei habe ist, dass ich momentan nicht wirklich weis wie ich eine Bestimmte Methode in bestimmten Zeitabständen starten kann. Bis jetzt werden meine ganzen Servlets ja nur dann aufgerufen wenn der Benutzer im Browser eine Aktion vornimmt....Es gibt ja im Hintergrund keine Funktion die ständig durchläuft von der aus ich eine solche Datenbank-Bereinigung ausführen könnte...

Vielleicht habt ihr ja eine idee wie das am besten funktioniert
 
Wozu denn einen Job dafür schreiben? Prüf das doch einfach, wenn Du dir den Lock holen willst. Also etwa 'wenn lock frei oder älter als x, setze lock'.
 
...ich hab mal wieder zu kompliziert gedacht - Vielen Dank für den Tipp!

Ich kontrollier jetzt einfach beim laden der Datensätze den Timestamp und wenn dieser älter als 30 Minuten ist wird der Status wieder auf "frei" gesetzt.

Danke nochmals für eure Hilfe
 

Neue Beiträge

Zurück