Próbuję wywołać metodę, gdy uruchomi się moje webaplikacja. Celem jest uruchomienie timera, który działa w określonych odstępach czasu. Jak mogę wywołać funkcję helloworld, gdy uruchomi się moja aplikacja internetowa jboss 7.1?metoda wywołania przy uruchomieniu serwera
Odpowiedz
inne niż ContextListeners, można również serwletu w web.xml załadunku na starcie:
<servlet>
<servlet-name>mytask</servlet-name>
<servlet-class>servlets.MyTaskServlet</servlet-class>
...
<load-on-startup>1</load-on-startup>
</servlet>
Aplet ten można uruchomić zadanie przy użyciu co oznacza, że chcesz, patrz na przykład ten link.
Ale nie powinieneś używać tego podejścia, imho.
Użyj sprawdzonego framework/lib, takiego jak quartz lub podobnego narzędzia. Istnieje wiele problemów/problemów związanych z uruchamianiem i synchronizowaniem zadań na serwerach internetowych i lepiej jest używać sprawdzonego narzędzia niż powtarzać błędy, które te narzędzia już napotkały i rozwiązały. Może trochę potrwać, ale pozwoli uniknąć wielu bólów głowy.
Sam Jboss ma kilka narzędzi do tego celu: planowanie i zarządzanie zadaniami. Nigdy nie używane, więc nie polecam.
Użyj ServletContextListener
skonfigurowanego w twoim web.xml
. Napisz kod, który uruchamia timer w metodzie contextInitialized
.
Zapoznaj się z Quartz Scheduler. Możesz użyć CronTrigger, aby strzelać w określonych odstępach czasu. Na przykład, co 5 minut będzie wyglądać następująco:
"0 0/5 * * * ?"
Chodzi o to, aby implementować interfejs Job
który jest zadanie, aby uruchomić, zaplanować go za pomocą SchedulerFactory
/Scheduler
, budować rozpoczęcia Job
i CronTrigger
i to.
Istnieje bardzo wyraźny przykład: here.
Jeśli chcesz uruchomić kod, zanim Twoja aplikacja internetowa obsłuży któregoś z klientów, potrzebujesz ServletContextListener.
Stwórz swoją klasę słuchacza
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) {
}
}
Put klasy w WEB-INF/classes
Umieść < słuchacza> elementu w pliku web.xml.
<listener>
<listener-class>
com.test.MyServletContextListener
</listener-class>
</listener>
Mam nadzieję, że to pomoże.
Czy mogę dodać kod startowy serwera HTTP w kontekścieInformedized method – Hema