Pytanie jest nieco dłuższe, ponieważ jest pojęciowe. Mam nadzieję, że nie jest to źle czytane :)Kontroler (Spring Managed Bean) Zakres pytań: Singleton, Request lub Session?
Pracuję w aplikacji sieciowej MVC/Tiles o krytycznym poziomie wydajności (typowo 10 000 użytkowników). Załadujemy ekran pracownika aktualizacji, w którym ładujemy ekran szczegółów pracownika (powiązany z obiektem biznesowym pracownika) w celu aktualizacji za pomocą MultiActionController. Na tym ekranie jest wiele zakładek, ale tylko tab1 ma dane aktualizacyjne. Pozostałe karty są tylko do odczytu, w zasadzie w celach informacyjnych.
Nie trzeba dodawać, że zdecydowaliśmy się załadować te karty tylko do odczytu w leniwy sposób, tj. Po aktywowaniu każdej karty wywołujemy wywołanie ajaxowe (jednorazowe) w celu pobrania danych z serwera. Nie ładujemy wszystkiego za pomocą metody ładowania widoku aktualizacji. Pamiętaj: to jednorazowe dane przeznaczone tylko do odczytu.
Teraz mam dylemat. Zrobiłem kolejny kontroler multiaction, nazwany "AjaxController" do obsługi tych wywołań ajaxowych. Teraz moje pytania:
- Jaki powinien być najlepszy zakres dla tego kontrolera?
Myśli: jeśli zgłoszę żądanie, wówczas 10 000 użytkowników może utworzyć 10 000 wystąpień tego problemu: problem z pamięcią. Jeśli ustawię sesję na zakres, wtedy jedna zostanie utworzona na sesję użytkownika. Oznacza to, że gdy 10 000 użytkowników zaloguje się do aplikacji, niezależnie od tego, czy zastosują metody AjaxController, każdy z nich będzie posiadał komponent bean.
- Czy zatem najlepszym rozwiązaniem jest ten kontroler?
Myśli: Pojedyncza fasola powstanie podczas wiosennych butów, a to samo wystąpienie będzie dostępne w całym tekście. Brzmi dobrze.
- Czy metody obsługi (takie jak fetchTab7DataInJsonFormat) powinny być statyczne i dołączone do klasy?
Myśli: w takim przypadku, czy havign statyczne metody semantycznie mogą być sprzeczne z zakresem? Na przykład: czy scope = "session"/"request" + sensowne są metody statyczne? Pytam, ponieważ nawet jeśli każda sesja użytkownika ma własny komponent AjaxController, metody obsługi są w rzeczywistości dołączane do klasy, a nie do instancji. Ponadto, czy zakres = "singleton" + metody statycznego programu obsługi mają sens?
- Czy mogę ręcznie wprowadzić wzorzec projektu singleton do kontrolera AjaxController?
Myśli: Co zrobić, jeśli kontroluję tworzenie: w zasadzie zrobić singleton GoF. Więc co może zrobić specyfikacja zakresu? Sesja zakresu/żądanie z pewnością nie może utworzyć wielu instancji, czy mogą?
- Jeśli, niezależnie od mechanizmu (specyfikacja komponentu/wzorzec projektowy/metody statyczne), udaje mi się mieć jedno wystąpienie kontrolera Ajax: Czy te metody STATIC muszą zostać zsynchronizowane? Myślę, że nie, ponieważ nawet jeśli metody obsługi STATIC mogą rozmawiać z usługami (które rozmawiają z DB/WS/MQ itp.), Które wymagają czasu, myślę, że każdy wątek żądania wchodzący do metod statycznych zostanie zwrócony przez ich identyfikator wątku, prawda? Nie jest tak, że użytkownik 1 wprowadza metodę statyczną, a następnie użytkownik 2 wprowadza statyczną metodę, zanim użytkownik 1 został zwrócony, a następnie obydwoje otrzymają nieczytelne dane? Jest to prawdopodobnie głupie, ale chcę być tego pewien.
Jestem zdezorientowany. Zasadniczo chcę dokładnie jednego wystąpienia komponentu bean kontrolera obsługującego wszystkie żądania dla wszystkich klientów.
Uwaga krytyczna: Fasola AjaxController nie jest INJECTED nigdzie indziej, istnieje pojedynczo. Jego metody są trafione poprzez wywołania ajaxowe.
Ogromny błąd z mojej strony. LazyLoadController IS AjaxController. Myślałem o jednym nazwisku, gdy zaczynałem pisać pytania, a następnie w trakcie pytań powracałem do innego imienia. Przepraszam, zredagowałem ten post. Tak, masz odpowiedni przypadek. W rzeczywistości mam warstwę usługi, która dokładnie to robi, a ten AjaxController działa jedynie jako program do obsługi żądań i obsługi odpowiedzi. Niektóre z moich wątpliwości pozostają w odniesieniu do scenariuszy konfliktu. Obecnie mój AjaxController jest singleton i ma statyczne metody przetwarzania żądań i interakcji z warstwą usługi. Coś nie tak z tymi ustawieniami? – SpringConfused
Rozumiem. Zaktualizowano moją odpowiedź z wyjaśnieniem, dlaczego statyczne metody są złe. –