Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用EJB锁定数据源中的实体/行的最佳实践_Java_Mysql_Sql_Jakarta Ee_Ejb - Fatal编程技术网

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

Java 使用EJB锁定数据源中的实体/行的最佳实践,java,mysql,sql,jakarta-ee,ejb,Java,Mysql,Sql,Jakarta Ee,Ejb,所以问题来了。我需要一些机制来阻止数据源中的实体。例如,如果有人在写作模式下打开某篇文章,那么其他人就不能在写作模式下打开这篇文章,而只能在阅读模式下打开 我只看到两种方法: 在表中创建一些列(例如:isBlocked)并将其标记为blocked 使用EJB单例并保留数组中打开的文章id 什么更好?解决此问题的其他方法有哪些?对于第一个选项,缺点是如果有人在编辑模式下打开文章并关闭浏览器而不释放它,则该文章将保持锁定状态。您可以添加另一列,如lockTime,并根据它计算一些超时,之后文章将再次

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

我只看到两种方法:

  • 在表中创建一些列(例如:isBlocked)并将其标记为blocked
  • 使用EJB单例并保留数组中打开的文章id

  • 什么更好?解决此问题的其他方法有哪些?

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

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

    在JPA中,您还有乐观锁定(使用
    @Version
    )和伪相似锁定(使用
    entityManager.lock()
    ),请参阅或以获取示例,因此这也可能对您有所帮助