サーバーの起動時またはアプリケーションの展開時にキャッシュを初期化する際の問題に直面しています。キャッシュの初期化には、
- データベースにクエリを実行してアイテムのリストを取得する
- 各アイテムの rmi 呼び出しを行う
- JMS キュー/トピックのデータをリッスンする
- キャッシュの構築
この初期化プロセスはスタートアップ コードにあります。展開に多くの時間がかかっているか、サーバーの起動時間が増加しているため、これらすべてに多くの時間がかかっています。
そこで私が提案したのは、起動時にスレッドを作成し、その中で初期化コードを実行することです。それを示すためにサンプルアプリケーションを書きました。
これには、フィルターである ServletContextListener が含まれます。リスナーでは、HeavyProcess が実行される新しいスレッドを作成しています。終了すると、フィルターがリッスンするイベントが発生します。イベントを受信すると、フィルターは着信 http 要求を許可します。それまでは、フィルタはすべてのクライアントを、アプリケーションが初期化中であるというメッセージを表示するデフォルト ページにリダイレクトします。
私はこのアプローチを提示しましたが、懸念事項はほとんどありませんでした。
- スレッドの処理が難しいため、理想的にはスレッドを作成しないでください。
私の質問は、Web アプリケーションでこのようなスレッドを作成できない理由です。
これが良くない場合、最善のアプローチは何ですか?