java - ThreadLocal 在企业应用中的使用

标签 java jakarta-ee ejb thread-local

如果我的 web 应用程序和 ejb 应用程序在同一台机器上(在同一台 JVM 上)并且所有 ejb 调用都是本地调用,使用 ThreadLocal 会在将信息从 web 传递到ejb?

如果 ejb 调用是远程的,有什么解决方法吗? ThreadLocal 信息是否可以从 Web 应用程序到 ejb 应用程序?在这种情况下是否建议使用 ThreadLocal

最佳答案

第一个问题,只要在每次调用结束时去掉ThreadLocal变量就没有问题。这很重要,因为容器(servlet 或 ejb)通常使用线程池并因此重用线程,这有两个影响:一个“调用”可能会看到来自先前调用的线程本地信息,并且如果您在不停止 JVM 的情况下从容器中删除应用程序有些类可能不会被垃圾回收,因为它们仍然被容器线程引用。因此,将数据放在 try/finally block 中的线程本地中,并在 finally 部分中删除。

这里有一篇文章展示了一种解决问题的方法:ThreadLocal in web applications

对于第二个问题,因为数据是线程本地的,它不会随远程调用一起出现,您必须向接口(interface)添加一个参数,在一侧提取线程本地数据并在另一侧重新创建...

关于java - ThreadLocal 在企业应用中的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10328464/

相关文章:

java - 使用 ForkJoin 和 Streams 构建自适应网格细化

java - Spring mvc 不适用于 AWS elastic beanstalk

java - 在运行时插入不同的对象,泛型 JAVA

java - 在 persistence.xml 中外部化动态属性

java - 模拟 JMS - jUnit

java - 使用 Hibernate 时如何在 boolean 属性中插入空值?

jakarta-ee - java.lang.NoSuchMethodError : javax. el.ELResolver.invoke(Ljavax/el/ELContext;Ljava/lang/Object;Ljava/lang/Object; 使用 maven tomcat 插件时

java - 无状态 session bean 中的高效 JDBC 连接管理

java - 向 @Stateless bean 添加状态

java - 有没有办法从 EJB 模块访问 HttpSession?