无法从Self Spawned Thread访问FacesContext.getCurrentInstance()

时间:2012-06-29 17:37:36

标签: multithreading jsf-2 primefaces

无法在自生成的线程中获取“FacesContext.getCurrentInstance()”。

需要根据后端进程动态更新组件。通过创建一个监视进程的线程并回调组件更新以及p:poll。

来实现相同目的

但是,似乎“FacesContext.getCurrentInstance()”不适用于新线程。只需在调用任何依赖于新生成的线程中的FacesContext.getCurrentInstance()的实用程序方法时获取NPE。

有没有办法在自生成的线程中使用“FacesContext.getCurrentInstance()”?

环境JSF2.0,Prettyfaces-jsf2-3.3.2,Primafaces 3.2,Tomcat 6.0.32,JDK 5.0

谢谢,

1 个答案:

答案 0 :(得分:5)

FacesContext是存储在线程中的ThreadLocal<T>,它执行当前的HTTP servlet请求。你肯定无法在你自己产生的其他线程中访问它,这将破坏JSF / Servlet的整个工作。您应该将您需要的那些信息从runnable对象中的FacesContext传递给它的构造函数,也许只是具体的bean实例本身,或者其他一些对象也是如此。引用为会话属性。

顺便说一句,在Java EE Web应用程序中生成非托管线程是一种气味。确保你真正理解你在做什么。另请参阅Is it safe to start a new thread in a JSF managed bean?

相关问题