Warum ist contextInitialized () mehrmals aufgerufen?
Frage
Ich bin mit einer Stripes Web-App auf Jboss 4.2.3.GA und ich versuche, eine Methode aufrufen, wenn ich JBoss starten. Ich habe einen ServletContextListener etwa so:
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 zu starten. Jede Idee, was das Problem sein könnte? Danke.
Lösung
Ok ich es herausgefunden. Es wurde 3 mal aufgerufen wird, weil ich drei virtuelle Hosts in meinem Jboss-web.xml definiert hatte. wenn auch nicht sicher, warum es dieses Verhalten verursacht. Wenn jemand den Grund erklären kann, würde ich es zu schätzen wissen.
Andere Tipps
Es wird nur ein ServletContext
für jede Web-Anwendung sein. ServletContext
wird erstellt, wenn die Anwendung den Einsatz (3 Virtual Hosts Mittel mit 3 verschiedenen IP-Adressen zu 3 verschiedenen Hosts bereitstellen). Sobald die ServletContext
erstellt wird, wird es von allen Servlets und JSP-Dateien in der gleichen Anwendung verwendet. ServletContext
wird auch als der Anwendungsbereich Variablen in der Web-Anwendung Szenario genannt.
Quelle - http://www.javabeat.net/2009/02/servletcontextlistener -Beispiel /