gpt4 book ai didi

jakarta-ee - Java EE 中使用异步方法的事务管理

转载 作者:行者123 更新时间:2023-12-01 12:54:34 27 4
gpt4 key购买 nike

我们在 StatelessSessionBean 中有一个性能不佳的业务方法。为了提高性能,我们希望将此业务方法拆分为多个异步方法调用。

问题是这些异步方法必须在同一个事务中运行(它们必须使用同一个 JPA 实体管理器)。据我了解 Java EE 规范,使用容器管理事务是不可能的。是否可以使用 bean 管理的事务或其他一些机制来实现此要求?

最佳答案

您不能这样做,无论是使用标准 EJB 还是使用任何扩展。事务与数据库连接相关联,这意味着您必须在多个线程之间共享该连接。这不安全。

异步代码也可能由于某种原因以较大的延迟执行,例如在高 CPU 负载下。这将使您的交易在不必要的长时间内保持打开状态。

您有哪些选择?首先,并行化 SQL 查询(尤其是写入——您需要将它们放在一个事务中)不会给您带来太多好处。数据库通常受 I/O 限制。只有当您有 CPU 密集型任务或您正在等待某事时,并行化才值得您花时间。

在这两种情况下,重新设计您的代码以在多个线程中执行并行代码并且只有一个编写器线程来处理数据库和事务。例如,如果您需要调用 10 个服务器,收集响应并存储它们 - 生成 10 个线程/使用一个池,等待结果并将所有结果存储在一个线程中。

另见

关于jakarta-ee - Java EE 中使用异步方法的事务管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10549901/

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