Cykliczne zadanie umieszczone w aplikacji webowej

0

Witam,

w swojej aplikacji webowej chciałbym umieścić cykliczne zadanie odświeżania beansów zawierających informacje takie jak np. lista osób online czy wpisy shoutboxa (aktualizowane co np. 1 min). Problem polega na tym, że tomcat chce się wszelakich wątków (co za tym idzie m.in. Timerów) pozbywać:
SEVERE: The web application [/TimerTaskTest] appears to have started a thread named [Timer-1] but has failed to stop it. This is very likely to create a memory leak.
W tym przypadku akurat Task nadal istniał i działał, aczkolwiek coś nie daje mi spokoju.

Jak rozwiązać taki problem?

0

a wątek w jakim Beanie uruchamiasz?? Może masz jakiś wąski Bean który jest zabijany. Wątek sam się nie zatrzyma, GC tego nie zbierze, może stąd ten warn. Myślę, że koniecznie takie coś w ApplicationScoped trzeba uruchamiać.

0

Zamierzam umieścić metodę aktywującą wątek w SerlvetContextListener, problemem jest tu to, że tomcat chce każdy wątek usuwać. Stąd też mój pomysł, że autorzy przewidzieli jakiś sposób na takie rzeczy.

0

A próbowałeś tak jak ja pisałem powyżej w AppScoped beanie to uruchomić?

0

jest sobie taki interfejs jak ServletContextListener. W nim należy uruchomić swój TimerTask i udostępnić funkcjonalność jako usługę dla wszystkich sesji w aplikacji. Uruchamianie wątków z poziomu własnych beanów, albo co gorsze w momencie wysłania specyficznego żądania jest złą praktyką.

0

Ja nie chcę uruchamiać wątku w beanie, tylko wątek aktualizujący (globalne) beansy. Z rozwiązaniem pozostanę w słuchaczu interfejsu ServletContextListener.

1 użytkowników online, w tym zalogowanych: 0, gości: 1