Stanowy bean sesji jest definiowany w następujący sposób:
Stanowe fasole sesji Stan obiektu składa się z wartości jego zmiennych instancji. W komponencie bean stanowym sesji zmienne instancji reprezentują stan unikalnej sesji komponentu bean klienta. Ponieważ klient oddziałuje („rozmawia”) ze swoim ziarnem, ten stan jest często nazywany stanem konwersacji.
Bezstanowy komponent bean sesji jest definiowany w następujący sposób:
Bezstanowe komponenty bean sesji Bezstanowe komponenty bean sesji nie utrzymują stanu konwersacji z klientem. Gdy klient wywołuje metody bezstanowego komponentu bean, zmienne instancji komponentu bean mogą zawierać stan specyficzny dla tego klienta, ale tylko na czas trwania wywołania. Po zakończeniu metody nie należy zachowywać stanu specyficznego dla klienta. Klienci mogą jednak zmieniać stan zmiennych instancji w puli bezstanowych komponentów bean i ten stan jest przenoszony do następnego wywołania puli bezstanowych komponentów bean. Z wyjątkiem wywołań metody wszystkie wystąpienia bezstanowego komponentu bean są równoważne, co umożliwia kontenerowi EJB przypisanie instancji do dowolnego klienta. Oznacza to, że stan bezstanowego komponentu bean sesji powinien dotyczyć wszystkich klientów.
Zalety używania bezstanowego komponentu bean sesji w porównaniu ze stanowym komponentem bean sesji są następujące:
Ponieważ bezstanowe komponenty bean sesji mogą obsługiwać wielu klientów, mogą oferować lepszą skalowalność dla aplikacji wymagających dużej liczby klientów. Zwykle aplikacja wymaga mniejszej liczby bezstanowych komponentów bean sesji niż stanowych komponentów bean sesji do obsługi tej samej liczby klientów.
Nasuwa się więc pytanie, kiedy należy używać stanowych beanów sesyjnych? Zgodnie z moim naiwnym rozumieniem tej sprawy, należy trzymać się bezpaństwowej fasoli sesyjnej, jak tylko może.
Jacy byliby kandydaci, w których należałoby używać fasoli stanowej sesji? Jakieś dobre przykłady?