In a lot of web applications (JSP, Struts, Tapestry, ...) the session is usually stored as a cookie in the browser, so opening a new browser window and re-connecting to the application won't give you a new session and therefore you'd be connected to the original session (and DataContext -- I'm assuming you are storing the DC in the session) with the updated values. Try your test using different concurrent browsers, such as Firefox and IE/Safari (for example) and see if you get the same results. I use optimistic locking on pretty much everything and haven't noticed a problem. I wrote this a long time ago, too, which may or may not help:
http://cwiki.apache.org/CAY/optimistic-locking-explained.html I'll be out-of-touch for most of the rest of the day, but if you still have problems, perhaps someone else on the list can help. Thanks, /dev/mrg On 4/10/07, Marc Gabriel-Willem <[EMAIL PROTECTED]> wrote:
Hi, I have some trouble with the optimistic locking function. I set the 'optimistic locking' option to an ObjEntity and moreover I set an attribute as "used for locking". I'm in a web environment. When I do some modification in a DataObject, the 'log' displayed by Cayenne displays properly the query using the attribute for locking check. But, when a concurrent client modifies the 'same' DataObject, no error is detected ... because the new value for the optimistic check is used. It is important to note that the DataObject is modified by different browser (so different session data context) and by different child data context ! Scenario: My original record > attr1=MyAttr1, attr2=10:15:10 My record modified by client #1> attr1=MyAttr2, attr2(UseForLock)=10:18:15 [ attrSpecifiedInWhereClause: 10:15:10 ] My record modified by client #2> attr1=MyAttr3, attr2(UseForLock)=10:19:40 [ attrSpecifiedInWhereClause: 10:18:15 ] The value of the attribute used for optimistic locking seems to be refreshed... Thank you, Marc
