Sto provando a chiamare un metodo quando inizia la mia applicazione web. Lo scopo è quello di avviare un timer che funziona a intervalli definiti. come chiamo una funzione helloworld all'avvio dell'applicazione jboss 7.1 web?metodo di chiamata all'avvio del server
risposta
altri poi ContextListeners, si può anche avere un servlet in web.xml carico all'avvio:
<servlet>
<servlet-name>mytask</servlet-name>
<servlet-class>servlets.MyTaskServlet</servlet-class>
...
<load-on-startup>1</load-on-startup>
</servlet>
Questo servlet può iniziare la vostra attività utilizzando qualsiasi mezzo che si desidera, si veda ad esempio questo link.
Ma non dovresti usare questo approccio, imho.
Utilizzare un framework provato/lib come quartz o uno strumento simile. Ci sono un sacco di problemi/problemi nell'esecuzione e nella sincronizzazione delle attività nei server Web ed è meglio utilizzare uno strumento collaudato piuttosto che ripetere gli errori che questi strumenti hanno già incontrato e risolto. Potrebbe volerci un po 'di tempo per cogliere ma eviterà molti mal di testa.
Jboss stesso ha alcuni strumenti a tale scopo: pianificazione e gestione delle attività. Mai usato così non posso raccomandare.
Utilizzare un ServletContextListener
configurato nel proprio web.xml
. Scrivi il codice che avvia il timer nel metodo contextInitialized
.
Check out Quartz Scheduler. È possibile utilizzare un CronTrigger per sparare a intervalli definiti. Per esempio, ogni 5 minuti sarebbe simile a questa:
"0 0/5 * * * ?"
L'idea è quella di implementare l'interfaccia Job
, che è il compito di eseguire, pianificare usando il SchedulerFactory
/Scheduler
, costruire l'inizio Job
e CronTrigger
e esso.
C'è un esempio molto chiaro here.
Se si desidera eseguire del codice prima che l'app Web soddisfi i propri client, è necessario un ServletContextListener.
Creare la classe ascoltatore
import javax.servlet.*;
public class MyServletContextListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent e) {
//Call your function from the event object here
}
public void contextDestroyed(ServletContextEvent e) {
}
}
Mettere la classe in WEB-INF/classes
Mettere un < ascoltatore> elemento nel file web.xml.
<listener>
<listener-class>
com.test.MyServletContextListener
</listener-class>
</listener>
Spero che questo aiuti.
posso aggiungere il codice di avvio del server HTTP all'interno del contestoModo inizializzato – Hema