Musimy wprowadzić wdzięczny mechanizm zamykania w naszej aplikacji Serwlet.Jak przetwarzać żądania serwletów podczas długiego wyłączania
EDYCJA: Chcemy, aby było to tak proste, jak to tylko możliwe, które obsługiwałoby sygnał zabicia wysyłany za pośrednictwem funkcji systemu operacyjnego. Umożliwiłoby to administratorom systemu korzystanie z wbudowanych narzędzi powłoki (kill lub taskkill w systemie Windows), w przeciwnym razie musieliby zainstalować inne narzędzie, aby "porozmawiać" z serwerem.
Mechanizm działa w dwóch etapach:
- żądanie wyłączenia, blokowania niektórych czynności krytycznych
- grupowego do poprzednio zainicjowane działania krytycznych zakończone; może to potrwać kilka godzin.
Faza # 1 jest zaimplementowana w naszej warstwie DAO. Faza # 2 jest zaimplementowana w naszym ServletContextListener # contextDestroyed metoda
Naszym problemem jest to, że po wywołaniu contextDestroyed kontener Servlet przestaje obsługiwać dalsze żądania HTTP.
EDYCJA: contextDestroyed jest wywoływana, gdy ktoś wywołuje funkcję kill systemu operacyjnego na serwerze.
Chcielibyśmy, aby aplikacja działała w fazie 2, powiadamiając użytkowników, że niektóre czynności są niedostępne.
Dobre pytanie. Jeśli czynności, które mają zostać odrzucone, są implementowane w konkretnych serwletach, zawsze możesz spowodować, że te (i tylko te) zwrócą status w zakresie 4xx, jeśli wyszukiwanie DB sugeruje, że zamykanie jest w toku? –
Niektóre działania są inicjowane przez działania interfejsu użytkownika, a niektóre są inicjowane przez program planujący - dlatego myślę o kontrolowaniu ich w warstwie DAO. –