【问题标题】:Best practices to lock entities/rows in data source with EJB使用 EJB 锁定数据源中的实体/行的最佳实践
【发布时间】:2014-11-26 09:58:58
【问题描述】:

所以问题。我需要一些机制来阻止数据源中的实体。例如,如果有人以写作模式打开某篇文章,那么其他人无法以写作模式打开这篇文章,而只能以阅读模式打开。

我只看到两种方法:

  1. 在表中创建一些列(例如:isBlocked)并将其标记为已阻止
  2. 使用 EJB 单例并将打开的文章 ID 保存在数组中。

什么更好?解决此类问题的其他方法是什么?

【问题讨论】:

    标签: java mysql sql jakarta-ee ejb


    【解决方案1】:

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

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

    在 JPA 中,您还具有 乐观锁定(使用 @Version)和 悲观锁定(使用 entityManager.lock()),请参阅 thisthis 示例,所以也许这对你也有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多