Web アプリの起動時に、アプリケーション スコープのマネージド Bean を強制的にインスタンス化/初期化する方法が見つからないようです。アプリケーション スコープの Bean は、Web アプリの起動時ではなく、Bean に初めてアクセスしたときに遅延インスタンス化されるようです。私の Web アプリの場合、これは、最初のユーザーが Web アプリで初めてページを開いたときに発生します。
これを避けたい理由は、アプリケーション スコープの Bean の初期化中に多くの時間のかかるデータベース操作が発生するためです。永続ストレージから大量のデータを取得し、ListItem 要素などの形式でユーザーに頻繁に表示されるデータの一部をキャッシュする必要があります。最初のユーザーが接続したときにすべてが発生するのは望ましくないため、長い遅延を引き起こします。
私が最初に考えたのは、古いスタイルの ServletContextListener contextInitialized() メソッドを使用し、そこから ELResolver を使用してマネージド Bean のインスタンスを手動で要求することでした (したがって、強制的に初期化が行われます)。残念ながら、ELResolver には FacesContext が必要であり、FacesContext はリクエストの存続期間中にのみ存在するため、この段階で ELResolver を使用して初期化をトリガーすることはできません。
これを達成する別の方法を知っている人はいますか?
JSF 実装として MyFaces 1.2 を使用していますが、現時点では 2.x にアップグレードできません。