gpt4 book ai didi

java - 在消息驱动 Bean (MDB) 中生成新的 Java 线程

转载 作者:搜寻专家 更新时间:2023-11-01 02:32:17 25 4
gpt4 key购买 nike

我可以从 MDB 中启动/生成新的 Java 线程吗?我需要从 MDB 中的代码进行一些并行处理,然后将控制权返回给 MDB。

要求:消息到达 MDB,然后进行一些代码处理。然后启动两个新的从属线程来做一些并行工作。直到那时 MDB 正在等待。当线程完成工作时。然后控制返回给 MDB,MDB 完成相关的最终/清理工作。

从 MDB 启动一个新线程 (Runnable) 是个好主意吗?如果不是,那么替代方案应该是什么?

最佳答案

如果您在线程中执行事务性工作,这是个坏主意。

当前正在 EJB 容器启动的事务中执行工作的线程与事务上下文相关联。在您的例子中,MDB 中的 onMessage 方法启动了一个新事务(除非您指定了 NotSupported 描述符),并且执行此事务的线程将与事务上下文相关联。启动一个新线程,不会将事务上下文传播到子线程。当容器检测到子线程试图在没有事务上下文的情况下访问事务资源时,这将导致创建一个新事务。

虽然一些(或大多数?)事务管理器支持存在拥有相同事务上下文的多个线程,但这可能(而且很可能)不适用于应用程序启动的线程。

关于java - 在消息驱动 Bean (MDB) 中生成新的 Java 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6266254/

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