2008-10-07 14 views
20

Mam kilka apletów kontekstu serwletów w mojej webappie Java, z których każda zbiera pewne informacje o środowisku.Jak określić kolejność słuchaczy w web.xml

Niektóre z nich zależą od informacji zebranych przez innego słuchacza. Ale nie mogę określić kolejności, w jakiej nasi słuchacze są zarejestrowani i wywoływani, więc muszę skopiować kod.

Rozumiem, że słuchacze są zarejestrowani w kolejności ich zamówień w web.xml, ale to brzmi trochę niejasno dla mnie, zbyt niejasne, aby na nim polegać.

Czy masz wskazówkę, w jaki sposób mogę rozwiązać mój problem?

Odpowiedz

25

Wszystkie kontenery serwletów i kontenery Java EE implementują tę część specyfikacji ściśle. Możesz polegać na tym, że detektory są wywoływane w kolejności podanej w web.xml.

Możesz mieć strukturę danych LEVEL aplikacji (HashMap), która będzie aktualizowana przez każdy filtr/program nasłuchujący, gdy napotka dane z żądań. To pozwoli każdemu słuchaczowi aktualizować tylko to, co niezbędne. Możesz umieścić wspólny kod w bazowym odbiorniku, aby nie było duplikacji kodu.

2

Wygląda na to, że możesz stworzyć aplikację ListenerManager, którą umieścisz jako swojego jedynego słuchacza, i aby zawierała ona innych Słuchaczy. Kiedy nadchodzi wydarzenie, po prostu wywołaj każdego z pozostałych Słuchaczy w żądanej kolejności (prawdopodobnie w kolejności, w jakiej zostały utworzone w konstruktorze ListenerManager).

Niestety, oznacza to zmianę kodu po dodaniu programu Listeners, ale można tego uniknąć, wykorzystując sprytnie pliki właściwości i tworząc kod klasy.

8

Dlaczego jest to niewyraźne? Kolejność w web.xml jest ściśle określona kolejnością, w jakiej są wywoływane, jest to bardzo wyraźnie określone w specyfikacji Java EE. Całkowicie można na nim polegać.

Powiązane problemy