4

自己生成スレッドで「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

ありがとうございました、

4

1 に答える 1

5

これは、現在のHTTPサーブレットリクエストを実行するスレッドに格納されてFacesContextいるものです。ThreadLocal<T>自分で作成した他のスレッドでは絶対にアクセスできません。これにより、JSF/サーブレットの動作全体が中断されます。代わりに、実行可能なオブジェクト内からそのコンストラクターに必要な情報を正確渡す必要があります。おそらく、具象Beanインスタンス自体、またはセッション属性としても参照される他のオブジェクトです。FacesContext

ちなみに、JavaEEWebアプリケーションでアンマネージスレッドを生成するのは臭いです。自分がしていることを本当に理解していることを確認してください。JSFマネージドBeanで新しいスレッドを開始しても安全ですか?も参照してください。

于 2012-06-29T17:51:52.863 に答える