# @SessionScoped in Verbindung mit @Stateful?



## membersound (14. Feb 2012)

Hallo,

ich habe bisher immer nur mit @RequestScoped, SessionScoped gearbeitet.
Was ich nicht verstehe sind die @Stateful/Stateles Annotations. Bzw vielmehr.

Was verändert sich, wenn ich einer @Named @SessionScoped annotierten Klasse zusätzlich noch @Stateful gebe?

Der SessionScope ist doch schon dafür da, um Sessions zu "teilen" und Daten während der Session clientseitig nicht zu verlieren.
Wozu dann noch statful?

Danke


----------



## Sym (15. Feb 2012)

Stateful und Stateless sind EJB Annotationen und haben (noch) nichts mit CDI Beans zu tun. Du bildest damit den Lebensraum einer Enterprise Bean.

Generell würde ich das Nutzen beider Annotationen an einer Bean nicht empfehlen - auch wenn es hier immer auf die Architektur ankommt.


----------



## membersound (15. Feb 2012)

Aber in welchem Anwendungsfall empfiehlt sich denn dann stateful/stateless?

Intuitiv würd ich Stateless zB bei einer DAO oder einem Crud Service setzen.
Aber Statefull? Wo bringt mir das was?


----------



## Sym (15. Feb 2012)

Immer wenn Du einen Status halten möchtest, nutzt Du eine Stateful Bean. 

Ich würde aber behaupten, dass stateless Beans wesentlich häufiger vorkommen.


----------



## membersound (15. Feb 2012)

Ja und genau für sowas benutze ich bisher immer einfach ne Klasse mit SessionScoped.
Und komme nicht dahinter, wann ich diesen, und wann ich jetzt stateful nutze, und wann sogar beides (letztens noch irgendwo gesehen)...


----------



## Sym (15. Feb 2012)

Du hast Stateful und Stateless an einer Bean gesehen? Das macht imho wenig Sinn und ich weiß nicht, ob das überhaupt funktionieren kann.

Wofür benutzt Du in Deiner CDI Bean denn die Stateless-Annotation?


----------



## membersound (15. Feb 2012)

Nein, ich habe @SessionScoped @Stateful zusammen gesehen.
Und mir fehlt eben die Vorstellung davon wann erstere Annotation ausreicht, und wann letzte dazu kommen muss.
Leider find ich das Beispiel nicht mehr...


----------



## anti-nerd (5. Mrz 2012)

Diese Frage interessiert mich auch sehr, wollte gerade einen neuen Thread deswegen starten, aber dieser hier ist ja noch nicht so alt.
Ich beschäftige mich erst seit kurzem mit EE bzw. mit EJB und frage mich auch, worin die Unterschiede in der Wirkung der Annotationen bestehen.

@SessionScoped führt doch dazu dass die Daten einer Klasse über die Dauer einer Session gültig sind. Jeder Client hat immer seine eigene Session oder nicht? Dadurch verlange ich implizit vom Container, dass jeder Aufrufer sein eigenes Objekt erhält (korrekt?).

Wenn ich nur @Stateful schreibe, sagt das doch erstmal nur aus, dass zu jedem aufrufenden Objekt genau ein Stateful-Sessionbean (genauer ein Proxy) gehört, es hat aber nichts mit der Gültigkeit zu tun. Liege ich da richtig?

Für die anderen beiden Fälle, also @Stateful gemeinsam mit @SessionScoped und @SessionScoped alleine hab ich auch keine Ahnung...wie gesagt, wäre sehr interessant.


----------



## JanHH (11. Mrz 2012)

Naja, durch die neuen DI-Konzepte (seam, CDI) fliessen die "normalen Beans" und die EJBs ein bisschen ineinander und es ist, vor allem als Neuling, nicht so einfach, zu erkennen, welchen Sinn die Benutzung von EJBs haben soll. Dazu muss man sich schon etwas mehr in die Materie einarbeiten. Für kleine einfache Webanwendungen reichen aber in der Regel auch die normalen JSF-managed beans aus.


----------

