Кажется, я не могу найти способ заставить управляемый компонент, зависящий от приложения, создавать или инициализировать при запуске веб-приложения. Кажется, что бобы с приложениями получают ленивый экземпляр при первом запуске боба, а не при запуске веб-приложения. Для моего веб-приложения это происходит, когда первый пользователь впервые открывает страницу в веб-приложении.Как заставить компонент с областью приложения создавать экземпляр при запуске приложения?
Причина, по которой я хочу избежать этого, заключается в том, что во время инициализации моего компонента, связанного с областью приложения, происходит множество трудоемких операций с базой данных. Он должен извлекать кучу данных из постоянного хранилища, а затем кэшировать некоторые из них, которые будут часто отображаться пользователю в виде элементов ListItem и т. Д. Я не хочу, чтобы все это происходило, когда первый пользователь подключается и, следовательно, вызывают длительную задержку.
Моя первая мысль заключалась в использовании старого метода ServletContextListener contextInitialized(), и оттуда использовать ELResolver для ручного запроса экземпляра моего управляемого компонента (таким образом, чтобы инициализация произошла). К сожалению, я не могу использовать ELResolver для запуска инициализации на этом этапе, потому что ELResolver нуждается в FacesContext, а FacesContext существует только в течение срока службы запроса.
Кто-нибудь знает об альтернативном способе выполнения этого?
Я использую MyFaces 1.2 в качестве реализации JSF и не могу обновить до 2.x в это время.
+1 для эффективного решения. Один маленький вопрос: официально ли это делать в соответствии со спецификацией или он полагается на некоторые детали реализации JSF? Я имею в виду, что реализация JSF могла бы решить отслеживать, был ли экземпляр компонента приложения полностью невидимым, и затем воссоздает компонент, например. – ewernli
@BalusC Это было так просто и работает. Я избегал использования метода setAttribute() в ServletContext, потому что я думал, что это будет мешать JSF, но, видимо, нет. PS: Любите свою страницу на blogspot.com - ваша старая статья об использовании DataTables была полезна. –
@ Jim: добро пожаловать. @ewernli: спецификация явно не допускает этого, но это также не объясняет это явно. Спецификация, однако, описывает, что управляемый компонент должен быть создан, когда он не присутствует в области. – BalusC