Kiedy używać Stateful session bean nad Stateless session bean?

Stateful session Bean definiuje się następująco:

Stateful Session Beans stan obiektu składa się z wartości jego zmiennych instancji. W sesji stanowej, instancja zmienne reprezentują stan unikalnej sesji klienta-fasoli. Ponieważ klient wchodzi w interakcję ("rozmowy") ze swoją fasolą, stan ten jest często zwany stanem konwersacyjnym.

Sesję bezstanową definiuje się następująco:

Stateless Session Bean stateless session bean nie utrzymuje stan rozmowy z klientem. Gdy klient powołuje się na metody bezpaństwowej fasoli, zmienne instancyjne fasoli mogą zawierać Państwo specyficzne dla tego klienta, ale tylko na czas trwania inwokacja. Po zakończeniu metody stan specyficzny dla klienta nie powinny być zatrzymane. Klienci mogą jednak zmienić stan zmiennych instancji w zbiornikach bezpaństwowych, a stan ten jest utrzymywany over to kolejna inwokacja bezpaństwowca. Z wyjątkiem podczas wywoływania metody Wszystkie instancje bezpaństwowca są równoważny, pozwalający kontenerowi EJB przypisać instancję do dowolnego klient. Czyli stan sesji bezpaństwowej powinien mieć zastosowanie do wszystkich klientów.

Zaleta użycia bezstanowej sesji Bean nad stateful session bean jest następująca:

Ponieważ bezstanowe sesje mogą obsługiwać wielu klientów, mogą oferta lepsza skalowalność dla aplikacji wymagających dużych ilości klientów. Zazwyczaj aplikacja wymaga mniej bezpaństwowej sesji beans niż stateful session beans, aby obsługiwać tę samą liczbę klientów.

Więc pytanie, które przychodzi do głowy, to kiedy należy użyć stateful session beans? Do mojego naiwnego zrozumienia tej sprawy, należy trzymać się, aby używać bezpaństwowej fasoli sesyjnej, jak tylko może.

Jacy by byli kandydaci, w których należy stosować sesję stateful Bean? Dowolne dobre przykłady?

Session Bean

Author: BalusC, 2013-08-01

2 answers

Najpierw musisz zrozumieć, w jaki sposób ziarna są tworzone i obsługiwane na serwerze.

Dla stateless session beans serwer może utrzymywać zmienną ilość wystąpień w Puli. Za każdym razem, gdy klient żąda takiej bezpaństwowej fasoli (np. poprzez metodę), losowa instancja jest wybierana do obsługi tego żądania. Oznacza to, że jeśli klient wykonuje dwa kolejne żądania, możliwe jest, że dwa różne instancje bezstanowej fasoli obsługują żądania. W rzeczywistości nie ma stan konwersacyjny między dwoma żądaniami. Również jeśli klient zniknie, bezpaństwowiec nie zostanie zniszczony i może obsłużyć następne żądanie od innego klienta.

Z drugiej strony stateful session bean jest ściśle powiązany z klientem. Każde wystąpienie jest tworzone i ograniczone do jednego klienta i obsługuje tylko żądania od tego konkretnego klienta. Tak się składa, że jeśli zrobisz dwa kolejne żądania na stateful bean, twoje żądanie będzie obsłużone zawsze z tego samego przykład fasoli. Oznacza to, że można zachować stan konwersacji między żądaniami. Pod koniec cyklu życia klient wywołuje metodę usuń, a fasola jest niszczona/gotowa do zbierania śmieci.

Kiedy używać stateless czy stateful?

To zależy głównie od tego, czy chcesz utrzymać Stan konwersacyjny . Na przykład, jeśli masz metodę, która dodaje dwie liczby i zwraca wynik, używasz bezstanowej fasoli, ponieważ jest to Jednorazowa operacja. Jeśli wywołasz tę metodę po raz drugi z innymi numerami, nie jesteś już zainteresowany wynikiem poprzedniego dodania.

Ale jeśli chcesz, na przykład, policzyć liczbę żądań wykonanych przez Klienta, musisz użyć stateful bean. W tym scenariuszu ważne jest, aby wiedzieć, jak często klient zamawiał metodę bean wcześniej, więc musisz utrzymać stan konwersacji w bean(np. ze zmienną). Jeśli chcesz użyć bezpaństwowej fasoli tutaj, żądanie Klienta będzie serwowane za każdym razem z innej fasoli, która psuje wyniki.

 151
Author: tobiasdenzler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-16 12:18:58

Myślę, że najlepszym przykładem użycia Stateful session bean jest Shopping Cart , w którym przechowujesz wszystkie produkty, które użytkownik chce kupić.

 48
Author: BSeitkazin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-03 10:35:32