gpt4 book ai didi

multithreading - 如何确保多线程 JPA 应用程序中的单一操作

转载 作者:行者123 更新时间:2023-11-28 23:06:24 26 4
gpt4 key购买 nike

我有一个带有 JPA/hibernate 后端的多线程应用程序(在 servlet 容器中运行)。此应用程序允许通过简单的 URL 检索文档。第一次下载文档时(即收到对特定 URL 的请求),应用程序应通过电子邮件发送通知消息并将文档标记为已在数据库中检索。

确保每个文档只发送一封电子邮件的正确方法是什么?由于检索文档的链接可能会被多次点击,因此可能存在并行事务(在不同的线程中)。这些交易只有在提交时才会看到各自的结果。

最佳答案

由于发送电子邮件不是事务性的,我看到两种可能性:

  • 使用全局事务来更新检索状态并发送一条 JMS 消息,指示必须发送电子邮件。应该在文档实体上激活乐观并发(使用@Version 字段)。这样,如果事务由于乐观并发检查而失败,则不会发送 JMS 消息。您当然需要一个 JMS 监听器,以便在收到 JMS 消息时实际发送电子邮件
  • 使用乐观锁定,并在事务之外发送电子邮件。如果事务因乐观锁定而失败,则不会发送电子邮件。如果成功,将发送电子邮件。

或者您根本不在乎,并假设并发的首次下载会非常出色。因此,您可能会非常异常(exception)地收到两封电子邮件而不是一封电子邮件,在这种情况下您只需删除多余的电子邮件即可。

关于multithreading - 如何确保多线程 JPA 应用程序中的单一操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8785750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com