线程企业应用程序中的本地用法

2022-09-04 01:38:40

如果我的Web应用程序和ejb应用程序在同一台机器上(在同一个JVM上),并且所有的ejb调用都是本地调用,那么在将信息从Web传递到ejb时,使用会产生任何问题吗?ThreadLocal

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


答案 1

对于第一个问题,只要在每次调用结束时删除 ThreadLocal 变量,就没有问题。这很重要,因为容器(servlet 或 ejb)通常使用线程池,因此重用线程,这有两个影响:一个“调用”可能会看到来自上一个调用的线程位置信息,如果你在不停止 JVM 的情况下从容器中删除应用程序,则某些类可能不会被垃圾回收,因为它们仍然被容器线程引用。因此,将数据放在线程局部中,在尝试/最终块中并在最终部分中删除。

这是一篇展示处理该问题的方法的文章:Web应用程序中的ThreadLocal

对于第二个问题,由于数据是线程本地的,它不会附带远程调用,您必须向接口添加一个参数,在一端提取线程本地数据,然后在另一端重新创建它...


答案 2

使用 EJB 3.1 时,您可以使用其上下文数据在 EJBContext 中传递上下文信息。这只是一个.Map<String,Object>


推荐