我正在编写一个应用程序,它使用MDBs和EJB,并且需要ThreadLocal在事务完成之前跨多个EJB和Helper类传递和记录一个变量。Weblogic线程池中的ThreadLocal安全
的流动
与MDB的onMessage()开始 - >一些企业委托的EJB - >一些助手
问:
这个应用程序内的Weblogic和Weblogic的运行重新使用线程从它的ThreadPool中。那么跨线程的数据损坏是否存在?解决方案是否足够安全地使用ThreadLocal.remove()
?
除了将对象作为参数传递给所有方法之外,是否还有其他方法可用于ThreadLocal?
是的,我们的选择是将它作为参数传递。但是这个对象需要遍历超过15个方法调用,所以它会污染我们所有的接口和实现。我们希望保持它非侵入性 - 它实际上是一个记录对象,并由组织强制要求 – JoseK
我不认为你是这样一个人,它似乎是一个很常见的模式。虽然不幸,但面对EJB等组件框架的全部目的,它有点苍白。毕竟,你没有将事务或安全状态传递给每个方法调用,为什么你会传递日志记录状态?也就是说,如果你去参数路由,我会鼓励你把这些信息放在一个更强大的容器中,比如CallingContext对象,然后传递它。然后,当你需要添加下一个伟大的东西(tm)时,你不必重构所有的接口。 –