Sna*_*Eye 13 java ejb thread-local java-ee
如果我的Web应用程序和ejb应用程序位于同一台机器上(在同一个JVM上)并且所有ejb调用都是本地调用,那么ThreadLocal在将信息从Web传递到ejb时是否会使用创建任何问题?
如果ejb调用是远程的,任何解决方法?将ThreadLocal信息可以从Web应用程序到EJB应用程序?ThreadLocal在这种情况下使用是否合适?
pgr*_*ras 14
对于第一个问题,只要在每次调用结束时删除ThreadLocal变量就没有问题.这很重要,因为容器(servlet或ejb)通常使用线程池并因此重用线程,这有两个影响:一个"调用"可能会看到来自前一个调用的线程局部信息,如果从容器中删除一个应用程序而不停止JVM某些类可能不会被垃圾收集,因为它们仍然被容器线程引用.因此,将数据放在try/finally块中的threadlocal中,并在finally部分中删除.
这是一篇文章,展示了解决问题的一种方法:Web应用程序中的ThreadLocal
对于第二个问题,因为数据是threadlocal,它不会带有远程调用,你必须在接口中添加一个参数,在一侧提取threadlocal数据并在另一侧重新创建它...