obiekty i ich zasięg, bespieczeństwo wątków

0

Witam serdecznie.

Od dłuższego czasu nurtuje mnie pytanie związane właśnie z zasięgiem obiektów i sposobu ich przetrzymywania w jvm oraz ich wzajemnym przenikaniem się.

Na przykład:
do pełnego obrazu problemu dorzućmy server tomcat oraz spring framework.

Jeśli ustawimy w kontenerze zasięg żądania, to bean istnieje do czasu zakończenia się operacji związanych z żądaniem.
Weźmy pod uwagę zasięg session.
Bean oznaczony tym zasięgiem jest dostępny tylko dla klienta, który rozpoczął sesję i istnieje do czasu zakończenia sesji.
Tylko klient może modyfikować zawartość beana.
Bean ten jest trzymany w thread local storage. - tego właśnie nie jestem pewien.

Dochodzą również inne zasięgi.

Gdy dołożymy spring webflow mamy do dyspozycji zasięg flow. Czy to znaczy, że bean jest widoczny tylko dla klientów uczestniczących w przepływie?
Czy gdy z przeglądarki wychodzi żądanie i rozpoczyna przepływ, to każde takie żądanie tworzy osobny wątek w którym są umieszczane obiekty, zmienne ... które powstają dla tego przepływu - umieszczone są w tym samym thread local storage?
Mniej więcej tak bym to sobie wyobrażał ale pewności nie mam.

Jeśli ktoś wie to mógł by się podzielić tą informacją ;)
Pozdrawiam serdecznie

0

podbijam pytanie.

0

W sumie nie rozumiem i nie widze rowniez pytania. Jesli chodzi o to w jaki sposob dzialaja zasiegi (scopes) to wszystko zalezy od kontenera. Np. w Springu Session uzywa HttpSession znane z Servletow, Request uzywa atrybutow HttpServletRequest oraz ma wlasne filtry / listenery ktora startuja scope gdy zaczyna sie request, i konca go (a wiec i usuwaja beany) gdy request jest skonczony - tutaj prawie na bank uzywane jest ThreadLocal w kazdym kontenerze. Jakis WebFlow ma swoj cykl zycia, a wiec jakies metody start / stop, ktore to rowniez inicjalizuja zasieg i go koncza. I to cala magia. Bez specjalnego kodu nie ma zasiegow (no ok, mozesz sam zaprogramowac singletona oraz prototype, czyli zwykle new) i tyle, cala reszta to framework.

0

Co do watkow to najczesciej musisz sam wszystko zalatwiac. Np. taki request jest thread-safe, ale session juz nie. Tak samo application scope - musisz sam zadbac o to zeby bean radzil sobie z wieloma watkami. W EJB mozesz zapodac pare adnotacji / konfiguracji XML... W Spring nie wiem, ale chyba nie ma nic wbudowanego. W CDI rowniez. W Guice rowniez.

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