3

jsf/icesfaces アプリケーションに Open Session in View パターンを利用しています。いつものように、サーブレット フィルターは、「Web サーバー スレッド」の最初と最後ですべての休止状態セッションを開いたり閉じたりします。

私の問題は、たとえば非同期タスクを使用していることです。データベースからオブジェクトの大きなリストをロードします。したがって、タスクを実行する新しいスレッドを「手動で」作成しています。

今私の質問:そのような非同期タスクの休止状態セッションを処理する最良の方法は何ですか? スレッド自体で手動でセッションを作成する必要がありますか、それともスレッド用のサーブレット フィルターのようなもの (スレッドの開始時にセッションを開き、終了時にセッションを閉じるもの) がありますか?

ベストプラクティスなどに感謝します。ありがとうございました。

スレッドを作成するコードは次のとおりです。

protected static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5,
            15, 50, TimeUnit.SECONDS, new LinkedBlockingQueue(20));

// called by action method of a button
private void asyncLoading() {

        SessionRenderer.addCurrentSession(this.renderGroup);            

        threadPool.execute(new Thread() {   
                // do the thing to do (...)
                }
}
4

1 に答える 1

0

一般的に言えば、「ビューでセッションを開く」フィルターは非常に単純です。セッションを開き、それを ThreadLocal にアタッチし、最後に閉じます。実装間の変更点は、ThreadLocal に格納されているセッションに到達する方法です。したがって、使用している「Open Session in View」parttern 実装に応じて、使用しているフィルターに関連付けられていないアクセス可能なファクトリがあるか、(ほとんどの場合)、そのソースを覗くことができます。フィルタリングし、「// do the thing to do (...)」の周りの処理を模倣します。

于 2010-10-18T17:09:30.707 に答える