Hmmm. Maybe I am wrong. Let me rephrase it:
Does getInvocationContext() return a different object per thread? Is that what makes it so that two different threads doing this at the same time don't step on each others' toes?
(slaps self on head). I looked at the code, and see that InvocationContext is ThreadLocal. So anybody, can I just have confirmation that using OptionOverrides to set data version for optimistic locking is thread-safe? :-P
Yes, it's thread safe.