Unterschied Session Scope / Stateful Session Bean

polarbear

Neues Mitglied
Hallo Gemeinde,

wann wird der Session Scope, wann eine Stateful Session Bean benutzt, um Client-Zustände zu speichern (z.B. Warenkorb).

Wie sind die Scopes (Request, Page, Session, Application) eigentlich unter der Haube von Java EE realisiert?

Dank und Gruß
polarbear
 

oopexpert

Mitglied
Du vergleichst hier Scopes von Variablen mit Session Handling. Das ist aus meiner Sicht nicht ganz symmetrisch. Schließlich versucht Java EE genau von Scopes weiter zu abstrahieren und bzgl. der Kommunikation zwei Fragen zu beantworten: Sollen Anfragen an den Server voneinander unabhängig sein? Soll die Kommunikation synchron oder asynchron laufen? Wie intern in EE mit den Scopes Page, Request, Session und Application umgegangen wird, muss transparent sein.

In Java EE gibt es die Unterscheidung zwischen stateful session und stateless session. Realisiert wird stateless durch stateless session Beans und stateful durch stateful session beans. Wenn man dort einen Vergleich anstrebt, wäre die Abbildung des Request Scope auf stateless und Session Scope auf stateful am naheliegendsten.

Application Scope wäre realisierbar durch stateful oder stateless session beans über static Variablen, wovon ich aber dringend abrate. Der Application Scope sollte sich meiner Meinung nach über den persistenten Zustand des Systems darstellen, weil Dinge, die applikationsweit gültig sein sollen, sind über den Application Server und / oder die DB zu synchronisieren.

Ich würde an dieser Stelle den Page Scope schwer vergleichbar und vereinbar mit Session Handling ansehen.

Wie gesagt: In dem einen Fall sprechen wir über Scope von Variablen, in dem anderen Fall sprechen wir darüber, ob die Client-Server-Kommunikation Request-atomar ist oder Request-übergreifend.

Ergänzung der Vollständigkeit halber: Anfragen an stateful und stateless session beans sind synchron. In Java EE gibt es noch asynchrone Kommunikation: Message Driven Beans.
 

oopexpert

Mitglied
Ein Warenkorb muss nicht unbedingt ein Client-Zustand sein sondern kann auch in der Persistenz repräsentiert werden. Insofern erhält der Warenkorb den Application-Scope. Natürlich dürfen nicht alle deinen Warenkorb dann ansehen. Das ist aber eine Rechte-Problematik, und keine Scope-Problematik.
 
Zuletzt bearbeitet:

oopexpert

Mitglied
Unter der Voraussetzung, dass Du Client-seitig dir den Warenkorb merken möchtest, ist es egal, ob du eine stateful session bean oder eine stateless session beans benutzt.

Wenn du serverseitig nicht perisistent deinen Warenkorb halten möchtest, musst du eine statefull session bean verwenden.

Wenn du serverseitig persistent deinen Warenkorb halten möchtest, ist die Wahl zwischen stateful und stateless davon abhängig, was deine Transaktionale Klammer sein soll. Sollen mehrere Anfragen an den Server innerhalb einer Transaktion stattfinden, musst du stateful beans verwenden, ansonsten reichen stateless beans.

Ich persönlich würde immer stateless session beans bevorzugen und den Warenkorb serverseitig persistent halten. Hängt aber natürlich auch von den Anforderungen ab.
 
Zuletzt bearbeitet:

polarbear

Neues Mitglied
Hallo,

zunächst einmal Danke für die Antworten.

Meine Fragen waren eher akademischer Natur. Grundsätzlich KANN ein Warenkorb-Objekt im Session Scope abgelegt werden. Alternativ bietet sich die Verwendung von SFSB an. Mich interessiert das Für und Wider beider Varianten zunächst ohne Persistenz.

Die Frage nach der Realisierung von Scopes ging in die Richtung, ob diese als Objekte z.B. mittels JavaBeans realisiert werden und in welche Datenstruktur die Key/Value-Paare abgelegt werden. Das Ganze ist für den Entwickler ja ziemlich transparent.

Grüße
polarbear
 

oopexpert

Mitglied
Es stellt sich noch eine weitere Frage: Handelt es sich beim Client um einen Rich-Client oder einen Web-Client? Oder sollen beide bedient werden?

Wenn es nur Web-Clients gibt, dann skaliert wahrscheinlich die Ablage der Informationen in dem Session Scope der Web-Server-Komponente. Frameworks wie Struts bieten Unterstützung bei der Nutzung der unterschiedlichen Scopes.

Bei einem Rich-Client stellt sich die Frage kaum. Entweder man benutzt Frameworks wie Spring und oder gleich vollwertige Application-Server, die dann vollständig von den "Scopes" des Servlet-Containers abstrahieren und ihre eigenen Schnittstellen definieren, um Daten zwischenzuspeichern. Insofern wären bei der Nutzung von Rich-Clients die Mechanismen des Application-Servers zu nutzen, also SFSB von EJB oder Spring-Mechanismen.

Werden beide Client-Arten verwendet würde ich natürlich ebenfalls SFSB verwenden, damit die Logik der Warenkorbverarbeitung von beiden Client-Arten genutzt werden kann.
 

Chebura

Mitglied
Hallo, mir stellt sich die selbe Frage.
Das Problem von dem Scope, wie ich finde davon abhängig, ob man in dem System angemeldet ist:
Man geht z.b auf amazon.
Man ist nicht angemeldet/nicht eingelogt:
1. Artikel ist Warenkorb
2. Im neuen Tab und dem selben Browser-Fenster==>Man sieht den eben bestellten Artikel.
3. Im neuen Fenster des selben Browsers sieht man eben bestellten Artikel.
4. Im anderen Browser sieht man den eben bestellten Artikel nicht.

Welche Rückschlüsse kann man draus ziehen?
Meiner meinen nach, wenn man nach dem MVC geht dann haben wir:
Auf der View: @SessionScoped + @Named
Im Controller: @stateful //Annahme: der Warenkorb-Inhalt wird nicht persistiert
Im Model: gewöhnliche Entity....

Man ist angemeldet:
1. Artikel in den Warenkorb
2. Im neuen Tab des selben Browser-Fensters sieht man, dass man eingelogt ist und den eben bestellten Artikel.
3. Man öffnet neues Fenster vom selben Browser und sieht wieder, dass man eingelogt ist, und den bestellten Artikel.
4. Man logt sich im neuen Fenster eines anderen Browsers ein und man den selben Warenkorb wie in 1;2;3.

Welche Rückschlüsse kann man draus ziehen?
Wenn ich mich anmelde, wird der Warenkorbinhalt persistiert, denn bei dem Punkt 4 im "nicht eingelogten"-Zustand sieht man den Warenkorbinhalt von anderen Browsern nicht.

Nach dem MVC würde ich das genauso machen.
Nur beim Controller würde ich eben die Artikeln speichern lassen, wenn ich angemeldet bin.

Was meint ihr dazu?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Unterschied zwischen HttpSession und Stateful Session Bean Allgemeines EE 3
K Unterschied zwischen JSP & Servlet gegenüber REST mittels JAX-RS Allgemeines EE 1
A Unterschied CDI und managedBeans Allgemeines EE 1
R Unterschied Instantiierung einer normalen und einer EJB-Klasse Allgemeines EE 1
F Unterschied Design Pattern / Architektur Pattern? Allgemeines EE 4
S Unterschied zwischen Tomcat und Application Server? Allgemeines EE 3
G Unterschied MVC - 3tier-Architektur Allgemeines EE 7
B unterschied servlet und bean Allgemeines EE 2
R Unterschied zwischen DAO und DTO - Beispiel? Allgemeines EE 7
E JSP, JSF und Servlet - wo ist der Unterschied? Allgemeines EE 8
D Unterschied zw. synchronen/asynchronen web services Allgemeines EE 1
F Unterschied EJB und JavaBeans? Allgemeines EE 9
M Unterschied zwischen Servlet und Bean/EJB Allgemeines EE 2
V Unterschied zwischen Applicationserver und Servletcontainer Allgemeines EE 4
T Zwei Buttons in derselben FORM rufen unterschied. Servlets a Allgemeines EE 10
A (EJB)Session abhängige Parameter in POJO lesen Allgemeines EE 3
O JSF / Primefaces Session handling Allgemeines EE 1
I Session löschen in Bean (Session Beans) Allgemeines EE 1
J Hello World mit Stateless Session Bean - Was mache ich falsch? Allgemeines EE 2
H Shared Session in Webmodulen Allgemeines EE 2
R Wie eine stateful session bean erneut "aufgreifen" Allgemeines EE 22
F Session zerstören Allgemeines EE 12
A Im PhaseListener auf Stateful Session Bean zugreifen Allgemeines EE 6
G Session Allgemeines EE 6
E Session Problem Allgemeines EE 9
G Session neu!? Allgemeines EE 7
M Fehler bei Javamail Session mit Glassfish 3 Allgemeines EE 3
Java.getSkill() verbindung / connection in session speichern Allgemeines EE 4
D Frage zum Statefull Session Beans Lebenszyklus Allgemeines EE 3
MQue Session - Cookie Allgemeines EE 27
MQue Session Exception Allgemeines EE 5
M j_security_check Login und Session-ID Allgemeines EE 2
S Session in eine andere Anwendung übergeben Allgemeines EE 2
F Session abgelaufen und direkter Aufruf Allgemeines EE 10
Y myFaces und Hibernate Session Handling Allgemeines EE 7
S tomcat session timeout - und was danach? Allgemeines EE 1
Q Form Based Authentication - Session Attribute ? Allgemeines EE 2
A Session Bean mit Local-Interface nutzen Allgemeines EE 3
G Session Cookies Allgemeines EE 2
Q Session Tracking - Wie macht mans richtig! Allgemeines EE 3
B Session Daten pro User merken Allgemeines EE 9
H [JSP JSF] Session Timeout und Redirekt zur Startseite Allgemeines EE 5
I Session-Attribute von Client zugänglich? Allgemeines EE 6
G session token Allgemeines EE 3
K tomcat: session-unabhängiges speichern Allgemeines EE 3
S Struts und Session Allgemeines EE 2
J Tomcat mit eigener Session-Implementierung Allgemeines EE 15
Y JSF - Session Handling Firefox Allgemeines EE 3
Y JSF - Session invalidate bei outpulink möglich? Allgemeines EE 4
R Session Tracking & Cookies Allgemeines EE 3
B Variablen ausserhalb der session ? Allgemeines EE 2
T Zugriff auf Session-Objekte in JSP Allgemeines EE 2
W Session tracking mit URL rewrite - Session weg! Allgemeines EE 4
G Neue Session bei der Verwendung von Frames Allgemeines EE 3
RaoulDuke EJB 3.0 - Exceptions aus Methoden einer Session Bean Allgemeines EE 2
T Session-Problem Allgemeines EE 2
Z Session aufräumen Allgemeines EE 2
G Session Problem Allgemeines EE 5
G JBoss - Session / Entity Allgemeines EE 8
S Bild in Session Allgemeines EE 2
F Session Bean -> Daten aus dem Servlet holen Allgemeines EE 11
P Struts Form Bean vs. Session Variable Allgemeines EE 6
A JSF - Daten in Session speichern Allgemeines EE 2
R Formulareingaben gezielt aus Session löschen Allgemeines EE 4
W Session nach Browserschließung erhalten im Tomcat Allgemeines EE 4
R Vernünftige Session-Verwaltung mit Struts Allgemeines EE 4
Q Tomcat/java-Session-Problem Allgemeines EE 9
L Zwei Browserfenster mit unterschiedlicher session - geht das Allgemeines EE 3
flashfactor Logging in einem Session-Bean Allgemeines EE 2
H JSP, Session und Java-Bean Allgemeines EE 4
P Session Problem Allgemeines EE 17
flashfactor Frage zu Session-Lebensdauer Allgemeines EE 3
J xdoclet session facade + value object Allgemeines EE 2
M Session Bean vers. Entity Bean Allgemeines EE 3
G ResultSet in Session speichern Allgemeines EE 4
P Session Attribute an Klasse übergeben Allgemeines EE 13
G Mit Session-IDs richtig umgehen Allgemeines EE 3
C Mail von einer Session Bean aus senden Allgemeines EE 2
P Session NullPointerException Allgemeines EE 17
H daten in session speichern Allgemeines EE 8
G list in session schreiben Allgemeines EE 4
P String-Array an session Variable übergeben Allgemeines EE 3
P Session Beans importieren Allgemeines EE 2
F Problem mit Session (Weitergabe an andere JSPs) Allgemeines EE 2
OnDemand Wann welcher Scope aus welchem Paket? Allgemeines EE 10

Ähnliche Java Themen

Neue Themen


Oben