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


Reply via email to