Запустите класс сразу после развертывания, а не при запуске сеанса для JSF - PullRequest
0 голосов
/ 15 февраля 2010

Для веб-приложения я использую JSF 1.2 и Facelets.

Проблема в том, что теперь мы выполняем инициализацию с помощью одноэлементного шаблона, и это занимает около 5-15 секунд , поскольку он считывает файлы данных (мы не используем базу данных). Это происходит, когда первый пользователь просматривает соответствующую веб-страницу (2-й и другие пользователи не имеют этой задержки).

Я хотел бы инициализировать этот синглтон сразу после развертывания. Как я могу это сделать? Я пытался добавить бин приложения, но он не вызывается. Я также попытался добавить сервлет следующим образом:

  <servlet>
    <description>MyApplicationContextListener Servlet</description>
    <display-name>MyApplicationContextListener Servlet</display-name>
    <servlet-name>MyApplicationContextListener</servlet-name>
    <servlet-class>mydomain.beans.MyApplicationContextListener</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <listener>
    <listener-class>mydomain.beans.MyApplicationContextListener</listener-class>
  </listener>

со следующим кодом:

package mydomain.beans;
import javax.servlet.ServletContextEvent;

public class MyApplicationContextListener {


    public void contextInitialized(ServletContextEvent event) {
        System.out.println("MyApplicationContextListener.contextInitialized started");
    }

    public void contextDestroyed(ServletContextEvent event) {
        System.out.println("MyApplicationContextListener.contextInitialized stopped");
    }

}

Было бы неплохо привести пример, включающий изменения, необходимые в web.xml и / или face-config.xml!

1 Ответ

1 голос
/ 15 февраля 2010

Как насчет использования ServletContextListener? Его метод contextInitialized(..) будет вызван в момент инициализации контекста. Это сопоставлено в web.xml как это:

<listener>
    <listener-class>com.example.MyServletContextListener</listener-class>
</listener>

Кроме того, (не уверен, что это будет работать), вы можете настроить загрузку вашего Face-сервлета при запуске.

<load-on-startup>1</load-on-startup>

Уточнение: Для подхода слушателя ваш слушатель должен реализовать ServletContextListener:

public class MyServletContextListener implements ServletContextListener { .. }
...