2010-08-22 3 views
7

Ich betreibe eine Stripes Web App auf Jboss 4.2.3.GA und versuche eine Methode aufzurufen, wenn ich JBoss starte. Ich habe ein ServletContextListener wie so:Warum wird contextInitialized() mehrmals aufgerufen?

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) { 

    } 
} 

und fügte ich einen Eintrag in web.xml wie folgt:

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

aber contextInitialized() wird immer 3 mal aufgerufen, wenn ich meine Server starten. Irgendeine Idee, was das Problem sein könnte? Vielen Dank.

+1

Setzen Sie ein Grund 'System.out.println' an der Spitze Ihrer' contextInitialized' sicher zu sein, die Sie sehen, was Sie denken, Sie sehen. Übrigens habe ich diese Art von Problem gesehen: Ein bekannter Fehler beim Verbinden von Tomcat mit NetBeans zur Verwendung in der Entwicklung führt dazu, dass [Tomcat die Web-App doppelt startet] (https://stackoverflow.com/q/16702011/642706) . –

Antwort

5

Ok, ich habe es herausgefunden. Es wurde 3 Mal aufgerufen, weil ich 3 virtuelle Hosts in meiner jboss-web.xml definiert hatte. Nicht sicher, warum es dieses Verhalten verursacht. Wenn jemand den Grund erklären kann, würde ich es schätzen.

6

Es wird nur eine ServletContext für jede Webanwendung geben. ServletContext wird während der Bereitstellung der Anwendung erstellt (3 virtuelle Hosts bedeutet Bereitstellung auf 3 verschiedenen Hosts mit 3 verschiedenen IP-Adressen). Sobald die ServletContext erstellt wurde, wird sie von allen Servlets und JSP-Dateien in derselben Anwendung verwendet. ServletContext wird auch als Anwendungsbereichsvariablen im Webanwendungsszenario bezeichnet.

Quelle - http://www.javabeat.net/2009/02/servletcontextlistener-example/