sessioncoped managed bean vs stateful ejb

Jeśli mam @ManagedBean to @SessionScoped, to po co miałbym używać @Stateful EJB? Używałem go wcześniej do wózków zakupowych i utrzymywania stanu konwersacji, ale ponieważ zarządzana fasola będzie przechowywana podczas sesji użytkownika, mogę tam przechowywać stan, a następnie zadzwonić do SLSB dla logiki biznesowej. Zgadza się? Jeśli tak, to stateful ejbs zostanie pozostawiony dla bardziej konkretnych aplikacji, takich jak kiedy potrzebujesz transakcji itp.

Author: Tiny, 2011-01-30

1 answers

Bardzo często bezpaństwowe fasole sesyjne mogą być używane do wielu problemów biznesowych.

Stateful niekoniecznie oznacza, że jedynie Serwer Remote zachowuje stan, chociaż jest to z pewnością jedna z opcji. Zdalny klient Swing może najpierw wysłać kilka danych do stateful session bean, trzymać się stub, a następnie wysłać kilka poleceń, które działają na tych danych. Dzięki temu klient nie musi wysyłać tych samych (dużych) danych za każdym razem czas.

W przypadku zdalnego użycia, rzeczywiście odzwierciedla użycie sesji HTTP, gdy używane są klienty internetowe (przeglądarki). Główną różnicą jest to, że sesja jest przypadkowa, podczas gdy w przypadku sesji HTTP sesja jest zakresem współdzielonym przez wiele fasoli. Ponieważ sesja HTTP opiera się na plikach cookie, a Pliki cookie są globalne dla domeny dla całej przeglądarki, sesja HTTP nie może bezpośrednio obsługiwać wielu sesji z tego samego klienta (np. na kartę lub na okno). To jest trywialne ze stateful session beans.

Jednak...

Zdalne klienty Swing rozmawiające ze zdalnymi EJB-ami nie są tak powszechne.

W kontekście, który opisałeś w swoim pytaniu, zazwyczaj używasz lokalnych EJB i przechowujesz większość stanu w sesji HTTP (uważaj na udostępnianie!) i obecnie w zakresie widzenia lub zakresu rozmowy.

Więc wreszcie, kiedy używać stateful session beans w tym scenariuszu?

Jednym z ważnych przypadków użycia jest extended persistence context in JPA. Zwykle w przypadku menedżera jednostek o zasięgu transakcji, gdy jednostka przekroczy granicę transakcji wywołania metody EJB, zostanie ona odłączona. Jeśli chcesz (optymistycznie) zablokować obiekt między interakcjami użytkownika, jest to niepożądane. Zgubisz zamek.

Z rozszerzonym kontekstem trwałości, encja pozostaje dołączona, a blokady są ważne po powrocie z wywołania do sesji stateful. Jest to bardzo przydatne dla funkcji podglądu, aby zapewnić, że nikt inny nie dokonał wszelkie zmiany w encji po zakończeniu podglądu. Lub rzeczywiście do koszyka, w którym chcesz zapewnić, że przez jakiś czas przedmiot nie może być sprzedany nikomu innemu, podczas gdy w Koszyku.

 13
Author: Arjan Tijms,
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
2011-01-30 15:57:06