Wie funktioniert @SessionScoped mit EJB? Ist CDI nur für Web-Tier?

9

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?

    
Piotr Nowicki 22.11.2011, 22:00
quelle

1 Antwort

3

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.

    
Gonzalo Garcia Lasurtegui 22.11.2011, 22:29
quelle