使用EJB锁定数据源中的实体/行的最佳实践

时间:2014-11-26 09:58:59

标签: java mysql sql java-ee ejb

所以问题。我需要一些机制来阻止数据源中的实体。例如,如果某人以书面模式打开某篇文章,则其他人无法以书面模式打开本文,只能在阅读模式下打开。

我只看到两种方法:

  1. 在表格中创建一些列(例如:isBlocked)并将其标记为已阻止
  2. 使用EJB单例并保留数组打开的文章id。
  3. 什么更好?解决此类问题的其他方法有哪些?

1 个答案:

答案 0 :(得分:1)

对于第一个选项,缺点是,如果有人在编辑模式下打开文章并关闭浏览器而不释放它,那么该文章将保持锁定状态。您可以添加另一列,例如lockTime并根据它计算一些超时,之后文章将再次解锁。

第二个选项与第一个选项具有相同的缺点,而且在群集环境中它不会那么容易(您必须在群集中的不同服务器之间同步单例)。

在JPA中,您还有乐观锁定(使用@Version)和 pesimistic锁定(使用entityManager.lock()),请参阅this或者以this为例,也许这也可以帮助你。