Perché contextInitialized () chiamato più volte?
Domanda
Io corro una web app Stripes su Jboss 4.2.3.GA e sto cercando di chiamare un metodo quando inizio JBoss. Ho creato un ServletContextListener in questo modo:
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) {
}
}
e ho aggiunto una voce nel web.xml in questo modo:
<listener>
<listener-class>com.lawless.web.servletContextListeners.TimerContextListener</listener-class>
</listener>
ma contextInitialized () viene sempre chiamato 3 volte quando inizio il mio server. Qualche idea di cosa il problema potrebbe essere? Grazie.
Soluzione
Ok ho capito. E 'stato di essere chiamato 3 volte perché ho avuto 3 host virtuali definiti nel mio jboss-web.xml. Non certo perché esso provoca che il comportamento però. Se qualcuno può spiegare il motivo sarei grato.
Altri suggerimenti
Non ci sarà solo uno ServletContext
per ogni applicazione web. ServletContext
verrà creato durante la distribuzione dell'applicazione (3 host virtuali mezzo la distribuzione a 3 diversi host con 3 diversi indirizzi IP). Una volta creato il ServletContext
, sarà utilizzato da tutti i servlet e file JSP nella stessa applicazione. ServletContext
è anche chiamato come le variabili portata di applicazione nello scenario applicazione web.
Fonte - http://www.javabeat.net/2009/02/servletcontextlistener -example /