Como forço um bean com escopo de aplicativo a instanciar na inicialização do aplicativo?

Não consigo encontrar uma maneira de forçar um bean gerenciado no escopo do aplicativo a ser instanciado / inicializado quando o aplicativo da web é iniciado. Parece que os beans com escopo do aplicativo são instanciados com preguiça na primeira vez que o bean é acessado, não quando o aplicativo Web é iniciado. Para meu aplicativo Web, isso acontece quando o primeiro usuário abre uma página no aplicativo Web pela primeira vez.

A razão pela qual desejo evitar isso é porque várias operações de banco de dados demoradas acontecem durante a inicialização do meu bean com escopo de aplicativo. Ele precisa recuperar um monte de dados do armazenamento persistente e armazenar em cache alguns deles que serão freqüentemente exibidos para o usuário na forma de elementos ListItem etc. Não quero que tudo isso aconteça quando o primeiro usuário se conectar e, assim, causar um longo atraso.

Meu primeiro pensamento foi usar um método contextInitialized () ServletContextListener de estilo antigo e, a partir daí, usar um ELResolver para solicitar manualmente a instância do meu bean gerenciado (forçando a inicialização). Infelizmente, não posso usar um ELResolver para acionar a inicialização nesse estágio porque o ELResolver precisa de um FacesContext e o FacesContext só existe durante a vida útil de uma solicitação.

Alguém sabe de uma maneira alternativa de fazer isso?

Estou usando o MyFaces 1.2 como a implementação do JSF e não posso atualizar para o 2.x no momento.

questionAnswers(4)

yourAnswerToTheQuestion