Почему contextInitialized () вызывается несколько раз? - PullRequest
9 голосов
/ 23 августа 2010

Я запускаю веб-приложение Stripes на Jboss 4.2.3.GA и пытаюсь вызвать метод при запуске JBoss.Я создал ServletContextListener следующим образом:

public class TimerContextListener implements ServletContextListener {

    @Inject
    private TimerManager timerManager;

    public void contextInitialized(ServletContextEvent servletcontextevent) {
        ((Injector) servletcontextevent.getServletContext().getAttribute(GuiceServletContextListener.KEY)).injectMembers(this);
        timerManager.stopAllTimers();
        timerManager.startTimer();
    }

    public void contextDestroyed(ServletContextEvent servletcontextevent) {

    }
}

и добавил запись в web.xml примерно так:

<listener>
        <listener-class>com.lawless.web.servletContextListeners.TimerContextListener</listener-class>
    </listener>

, но contextInitialized () вызывается 3 раза, когда я запускаю свойсервер.Есть идеи, в чем проблема?Спасибо.

Ответы [ 2 ]

7 голосов
/ 23 августа 2010

Хорошо, я понял это. Он вызывался 3 раза, потому что в моем jboss-web.xml было определено 3 виртуальных хоста. Не уверен, почему это вызывает такое поведение, хотя. Если кто-нибудь может объяснить причину, я был бы признателен.

6 голосов
/ 20 июня 2012

Для каждого веб-приложения будет только один ServletContext.ServletContext будет создано при развертывании приложения (3 виртуальных хоста означают развертывание на 3 разных хостах с 3 разными IP-адресами).После создания ServletContext он будет использоваться всеми сервлетами и файлами JSP в одном приложении.ServletContext также называется переменными области приложения в сценарии веб-приложения.

Источник - http://www.javabeat.net/2009/02/servletcontextlistener-example/

...