如果我的 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/