---- ULA UVULA <[EMAIL PROTECTED]> schrieb: > I have written a jsf application which is maintaining a java data structure > (bean). (BTW: I never have written any jsp pages, I direct > starting with jsf). > > Is there any way to inform the users that another user is already > manipulating this structure? > > Workflow: > a user can add/delete/edit/copy items into the data structure. After the work > is finished, the user can > "activate/save" his settings. During this time span, I want to lock the page > for other users or at least I want to > inform the second user, that another user is already active. > The goal is to have consistency and not "last write wins". > > Can you also consider: what happens, if the first user is closing the > web-browser without doing a "logoff" on the page?
It's not an easy problem to solve AFAIK. The Java Persistence API (Hibernate, Toplink etc) provides "pessimistic locking", where a version column exists on each table. When data is read, this version# is also read. When data is written, if the version# has changed then the write fails. This provides "first write wins" type functionality rather than "last write wins". However it's still probably not what you want. I don't know of any other standard mechanism for doing what you want. You're talking about "logically locking" an object over a number of requests (a conversation). I would think the best thing to do is to have a separate "lock table", containing columns object-name object-key lock-expiry-time owner and inserting a row whenever someone starts editing a specific object. On write, remove the row. Forbid starting an edit if there already exists a lock entry with lock-expiry-time > now. Sounds fairly complicated though. It would indeed be nice if there was some standard solution to this. Maybe such a thing would belong in Myfaces Orchestra, as it really is conversation-related, but there is no such feature yet. Regards, Simon

