开发者

Is JPA locking considered atomic?

I am using Eclipse Link implementation, but maybe this is relevant also for Hibernate. At some point I called:

em.lock(entity, LockModeType.OPTIMISTIC_FORCE_INCREMENT);

Which I considered as an atomic operation.

Surprisingly - after putting a breakpoint on the @Version field, it seems that there many calls to entity._persistence_get and entity._persistence_set.

Apparently - it is possible to get to the same point with a debugger, using two browsers, and switch between the Threads while it is still running those hidden functions. When this is done - it's impossible for both threads to flush/commit later.

Is there a change this would happen when not on Release Mode, or is it onl开发者_如何学Goy because of the debugger?

Regards, Daniel


There is no way (AFAIK) to prevent context switches in Java. Thus, I don't see how locking could be atomic in this sense. But I also don't see why it would matter anyway, since an attached entity is not supposed to be used concurrently by several threads.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜