Unterschiede : @SessionScoped vs @Stateful und @ApplicationScoped vs @Singleton
Ich würde gerne wissen, was sind die wichtigsten Unterschiede zwischen :
- javax.enterprise.Kontext.SessionScoped und javax.ejb.Stateful
- javax.enterprise.Kontext.ApplicationScoped und javax.ejb.Singleton
Ich weiß, dass eine @SessionScoped und ein @Stateful ermöglicht das erstellen einer neuen Instanz für jeden client. Ich weiß auch, dass für die @ApplicationScoped und @Singleton /@Stateless Sie freigegeben werden, zwischen den clients.
=> Aber , als sollte ich in Betracht ziehen es ist besser, wählen Sie ein EJB, oder die anderen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
@SessionScoped
bezeichnet einen Bereich, während@Stateful
ist in einer Art und Weise, was wir jetzt nennen, ein Stereotyp.@Stateful
fügt eine Reihe ein-services zu einer Bohne, unter denen das transaktionale Verhalten und Passivierung.Zentrale
@Stateful
ist jedoch die Sitzung von Verhalten, das in der Tat zu überschneidungen mit der Gültigkeitsbereich einer session.Der Unterschied ist, dass der session-scope ist gebunden an die HTTP-Sitzung, während
@Stateful
ist eine offene user-Sitzung verwaltet, die mit Ihrer Lebenszeit verwaltet von einem client, der eine Referenz auf die bean-proxy.@Stateful
remote-Bohnen, wo ursprünglich die binäre (RMI) gegen Teile von Servlets. Wo Servlets hörte remote-HTTP-requests von einem browser@Stateful
remote-Bohnen hörte remote RMI-Anforderungen überwacht, die von Applets (und später Swing-clients).Gab es leider viele Widersprüche zwischen den beiden. Ein Servlet, das war nur ein HTTP-listener, während
@Stateful
Bohnen automatisch wieder in eine Menge anderer features. Ein Servlet auch die gemeinsame Sitzung mit allen anderen Servlets und teilten auch die Java-EE-Komponente Namensraum mit allen anderen Servlets in einem Krieg, während mit der@Stateful
EJB jeder einzelnen bean hat seine eigene session und namespace-Komponente.Mit der Einführung von lokalen beans in EJB 2 und einem drastischen Rückgang der Swing - /Applet-clients für die remote-EJB-Kommunikation, der Funktion von der Sitzung verwaltet, die für eine
@Stateful
bean geworden ist, ist weniger klar.Ich denke, es ist fair zu sagen, dass
@Stateful
einfach nicht, dass viel in diesen Tagen. Für eine web-Anwendung die HTTP-Sitzung ist fast immer was, was bedeutet, dass mit dem session-scope und lokale@Stateless
Bohnen und/oder CDI-beans für die Geschäftslogik.In einigen Fällen
@Stateful
Bohnen sind notwendig für Ihre Natürliche Unterstützung für die erweiterten Persistenz-Kontext von JPA und für Ihre Passivierung Funktionen (Servlet nicht über einen standardisierten Mechanismus der Passivierung). Beachten Sie, dass@Stateful
und@SessionScoped
(oder viele andere Bereiche) können kombiniert werden. Der Vorteil der Kombination ist, dass ein Benutzer-code muss nicht mehr um die Lebensdauer zu verwalten, aber der container verwaltet.Es gibt eine etwas ähnliche Geschichte für
@ApplicationScoped
und@Singleton
, allerdings ohne die legacy (@Singleton
ist eine ziemlich neue Sache).@ApplicationScoped
ist nur ein Rahmen, während@Singleton
ist ein bean-Typ (Klischee, wenn Sie möchten), die nicht nur geben Sie application scoped Verhalten, sondern bietet Ihnen auch mit Transaktions-Verhalten wieder, mit automatischer Verriegelung (kann abgestimmt werden über@Lock
) und mit eifrigen Bau-Verhalten (über@Startup
).Obwohl
@Stateful
und@Singleton
sind selbst ziemlich praktisch, den aktuellen Weg zu Java EE scheint es zu sein, zerlegen Sie diese build-in-Stereotypen in separat nutzbarer Anmerkungen und wer weiß, vielleicht eines Tages werden Sie die tatsächliche CDI-Stereotypen, die aus diesen zerlegt Anmerkungen.