首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在多线程JPA应用程序中确保单个操作

如何在多线程JPA应用程序中确保单个操作
EN

Stack Overflow用户
提问于 2012-01-09 16:46:14
回答 1查看 242关注 0票数 0

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

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

EN

回答 1

Stack Overflow用户

发布于 2012-01-09 17:04:21

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

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

或者你根本不关心,并假设并发的首次下载会非常异常。因此,你可能会收到两封电子邮件,而不是一封,在这种情况下,你只需删除多余的电子邮件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8785750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档