当前位置: 首页 > 知识库问答 >
问题:

将ThreadLocal变量传递给EJB容器线程池

江俊能
2023-03-14

由于对公共EJB方法的Async调用,我有一个继承线程本地变量,我想将其传递给由EJB容器的线程池分配的另一个子线程。发起异步调用的父调用方是REST资源,它是无状态EJB。仅当子线程创建为新线程时,才将值传递给其子线程。一旦在池中创建了线程,它就不会破坏线程,直到服务器被反弹。

考虑到上述事实,我的案例的子线程来自EJB容器维护的线程池。仅当服务器启动后第一次调用资源时,或者如果刚刚在Threadpool中创建的全新线程被分配为子线程,则InheritableThreadLocal才会将值传递给其子线程。在所有其他情况下,当线程第一次被创建和分配时,我从池中获取分配给子线程的初始值。

我正在IBMWebSphere上运行代码,并且在异步调用中作为方法参数传递ThreadLocal值不是一个选项。

如何重新分配ThreadLocal值,以便每次运行时都能获得分配给子线程的当前值?

我发现下面的链接有点类似,但对于我来说,线程池是EJB容器提供的。

从ExecutorService获取的新线程的传播

共有1个答案

凌通
2023-03-14

使用ThreadLocal不是一种可移植的方式。您需要确切了解容器如何处理线程。

从我的角度来看,线程本地是保存的,因为通常容器使用相同的线程来处理一系列同步Servler/REST/EJB调用。如果异步发挥作用,这将不起作用。

我会使用一种可移植的方式,比如参数或持久性。

 类似资料:
  • 问题内容: 我是Docker的新手,目前尚不清楚如何从容器访问外部数据库。硬编码连接字符串的最佳方法是吗? 问题答案: 您可以使用该标志将环境变量传递到您的容器。 启动脚本的示例: 或者,如果您不希望在命令行中使用,等显示该值,则可以直接从当前环境中获取该值,如果您不带: 如果您有许多环境变量,尤其是要保密的话,可以使用env文件: --env-file标志将文件名作为参数,并期望每行采用VAR

  • 我是Docker的新手,不清楚如何从容器访问外部数据库。是在连接字符串中硬编码的最佳方法吗?

  • 问题内容: 我有Google地图提供的JavaScript值,需要将其保存在MySQL数据库中。 其实我有变量 我需要将该变量传递给PHP变量lugar 问题答案: 如果要在页面转换时进行操作,则可以通过表单或在URL中传递它,然后仅使用或接收变量。 如果您需要无缝完成它,那么您可能需要考虑使用AJAX。

  • 问题内容: 我有一个PHP会话变量,在整个会话过程中仍然有效。在开头部分,我包含了我的JavaScript文件。 如果需要以下内容,如何将会话变量传递到JavaScript文件中。 由于无法在JavaScript文件中识别出,因此上面的代码不起作用。因此,我必须放入PHP文件本身,但是如何将其保留在JavaScript文件中? 问题答案: 在您的PHP文件中,您可以将用户设置为全局变量: 在包含外

  • 问题内容: 如果我有一个指令,我可以这样调用它 我该如何访问?我在函数中使用时会得到实际的字符串。当我检查html时,实际上说。 问题答案: 尝试 然后 演示:柱塞

  • 我是第一次和docker合作,我正在努力弄清楚这一切。 在我正在进行的这个项目中,我们在启动文件中广泛使用了Windows环境变量。为了将这些内容放入配置中,我们使用AddEnvironmentVariables(string prefix)方法,如下所示: 在localhost和Azure中,这是没有问题的,因为我们已经将它们添加到了这些环境中。但是我不能想出如何在我的docker容器中配置这些