Wie ist die Sitzung definiert in @SessionScoped
CDI Bean?
Ist diese Annotation nur gültig, wenn sie aus einem Servlet-Container aufgerufen wird, in dem die Sitzung in Form von HttpSession
? Definiert ist?
Wenn nicht, wie kann ein EJB mit @Inject @SessionScoped MyBean myBean
wissen, was die Sitzung wirklich ist? Ich meine, die Methoden dieses EJB könnten von einem eigenständigen Client, RESTful WS oder einer anderen Ansicht aufgerufen worden sein.
Was soll in diesem Fall passieren? Sollte die Anmerkung keine Bedeutung haben, sollte sie eine neue MyBean
-Instanz für jede Anfrage einfügen oder sollte sie dieselbe Instanz für alle Anfragen beibehalten?
Entnommen aus der @SessionScoped-Spezifikation
Der Sitzungsumfang ist aktiv:
während der service () -Methode eines beliebigen Servlets in der Webanwendung, während der doFilter () - Methode eines beliebigen Servlet-Filters und wenn der Container ruft einen beliebigen HttpSessionListener, AsyncListener oder ServletRequestListener.
Kurz gesagt, ja. Es ist an die HttpSession gebunden. Auch:
Der Sitzungskontext wird zwischen allen auftretenden Servlet-Anfragen geteilt in derselben HTTP-Sitzung. Der Sitzungskontext wird zerstört, wenn der HTTPSession läuft ab, nachdem alle HttpSessionListeners waren aufgerufen, und am Ende jeder Anfrage, in der Invalidate () war aufgerufen, nachdem alle Filter und ServletRequestListeners waren genannt.