# JSP - File_Lock?



## Strowi (13. Jul 2005)

hi zusammen,

ich bastele gerade an einer kleinen JSP-Seite, mit der ich (nach Passworteingabe) eine Datei bearbeiten kann.
Leider gibt es Probleme wenn die Seite mehrfach geöffnet wird, daher möchte ich es so einrichten, dass die Datei jeweils nur einmal geöffnet werden kann und danach wieder freigegeben wird.

Wie kann ich sowas bewerkstelligen?

Thx schonmal im voraus!


----------



## krey (14. Jul 2005)

Wenn die Applikation ausgeführt wird, guckt es ob eine Datei meinprogramm.lock gibt, wenn ja dann schläft es drei bis fünf Sekunden. Danach guckt es wieder, wenn es keine gibt legt es eine an und löscht sie nach Ablauf des Programmes.

Wäre eine Möglichkeit oda?


----------



## KSG9|sebastian (18. Jul 2005)

statische klasse bzw. singleton ?


----------



## Bleiglanz (18. Jul 2005)

application scope

leg einfach den dateinamen als key rein, und nach dem beenden wieder raus

=> wie üblich das problem mit dem entfernen des Locks, wenn ein Benutzer einfach seinen browser zumacht

oder machs optimistitsch

jeder kann zum editieren öffenen (inkl. timestamp)

wer zuerst speichert "gewinnt"

wenn die anderen speichern wollen, kannst du anhand des timestamps feststellen, dass das nicht mehr geht

nicht ganz einfach das problem


----------



## Strowi (18. Jul 2005)

hi,

danke für den Tipp..

habs nun erstmal über application.setAttribute()/application.getAttribute() gemacht, und teste die Variable beim Seitenaufruf, wenn die gesetzt ist, wird der Login garnicht angezeigt, bei erfolgreichem Login wird sie gesetzt, und beim Logout wieder gelöscht.

Bleibt aber wie gesagt, das Problem, die Datei automatisch freizugeben...

Mal ne Idee: 
Könnte man nicht theoretisch auch das Datum/Uhrzeit in die Variable speichern und testen, sodass die Datei nach max. 10min. wieder freigegeben wird?
Quasi:


```
application.setAttribute("lock", aktuelle_Zeit);
```
und dann testen mit:

```
if ( application.getAttribute("lock") - aktuelle_Zeit > 10min. ){
    application.setAttribute("lock", 0);

}
```

Ciao,

Strowi


----------



## byte (18. Jul 2005)

sowas ist nicht nur sinnvoll sondern nötig. sonst hast du ein problem, wenn der client crashed bzw. auf unkonventionellem weg verschwindet, ohne das lock freizugeben. bleiglanz hat das schon schön beschrieben.

dir sollte allerdings klar sein, dass wenn nun jemand länger als 10 minuten eingelogt bleibt, jemand anders trotzdem wieder reinkommt und es dann u.U. zu den problemen kommen kann, die du vermeiden wolltest.

finde die lösung mit den timestamps übrigens besser. aber das sind nur my 2 cents...


----------



## Strowi (19. Jul 2005)

hi,

vielen Dank nochmal für die Tipps, Singletons waren mir bisher total unbekannt, ich wusste auch garnicht so auf anhieb wie ich das in ner JSP-Seite ordentlich einbinden sollte (v.a., dass nach x min. wieder jeder sich einloggen darf). 
Ich habs jetzt wie oben schon geschrieben gemacht, einfach die aktuelle Systemzeit in Millisekunden beim Login gespeichert, und bei jedem Aufruf der Index-Seite wird geprüft, ob die Differenz > x ist. Entpsrechend wird dann der Login angezegit oder ausgeblendet.
Weiterhin hab ich es so gemacht, dass bei jeder 'action' im Editor (also add/del/edit) die Zeit nochmal aktualisiert wird.
Damit hat bspw. jeder 10min. Zeit für eine Aktion (und nicht pro kompletter Sitzung).

Funktioniert hier wunderbar.


Ciao,

Strowi


----------

