我是JPA 2.0锁定的新手,所以可能是我遗漏了一些东西。
使用NetBeans,我尝试调试无状态会话Bean。我试图在两个线程之间切换来检查这个概念:
em.lock(entity, LockModeType.PESSIMISTIC_WRITE);
em.persist(entity);
try {
em.flush();
} catch (Exception e) {
System.out.println("Already Locked!");
}
我让第一个过程完成
em.flush();
(无例外)。然后,我切换到第二个过程。令人惊讶的是 - 只有在第一个流程退出该功能后,在第一行后暂停,继续。
注意:使用LockModeType.OPTIMISTIC完成所有工作。
这是正常行为吗?我错过了什么吗? here它似乎以不同的方式表现。
谢谢,
丹尼
答案 0 :(得分:1)
这是完全正常的行为。锁在事务提交/回滚中释放,并且由于调用em.flush()而不会发生。