Différences : @SessionScoped vs @Stateful et @ApplicationScoped vs @Singleton
Je voudrais savoir, quels sont les principales différences entre :
- javax.de l'entreprise.contexte.SessionScoped et javax.ejb.Stateful
- javax.de l'entreprise.contexte.ApplicationScoped et javax.ejb.Singleton
Je sais qu'un @SessionScoped et un @Stateful permet de créer une nouvelle instance pour chaque client. Je sais aussi que, pour la @ApplicationScoped et @Singleton /@Stateless ils sont partagés entre les clients.
=> Mais quand dois-je envisager de il est préférable de choisir un EJB, ou de l'autre?
OriginalL'auteur Gugelhupf | 2014-06-08
Vous devez vous connecter pour publier un commentaire.
@SessionScoped
désigne un champ d'application tout en@Stateful
est dans un sens, ce que nous appelons aujourd'hui un stéréotype.@Stateful
ajoute un certain nombre de services à un haricot, parmi lesquels transactionnelle de comportement et de passivation.Centrale à
@Stateful
est toutefois son comportement de session, qui chevauche la portée de session.La différence est que la portée de session est liée à la session HTTP, tandis que
@Stateful
est un ouvert de l'utilisateur géré session, avec sa durée de vie géré par un client qui a une référence à la fève de proxy.@Stateful
distance haricots où, à l'origine de la binaire (RMI) comptoir des pièces de Servlets. Où Servlets écouté à distance des requêtes HTTP à partir d'un navigateur,@Stateful
distance haricots écouté à distance RMI demandes des Applets (et, plus tard, Swing clients).Il y avait malheureusement beaucoup d'incohérences entre les deux. Une Servlet est juste un écouteur HTTP, tandis que
@Stateful
haricots automatiquement mis dans beaucoup d'autres fonctionnalités. Une Servlet également partagé la session avec tous les autres Servlets et également partagé la Java EE composant l'espace de noms avec tous les autres Servlets dans une guerre, alors qu'avec le@Stateful
EJB toutes les bean a sa propre session et de la composante de l'espace de noms.Avec l'introduction de locaux haricots en EJB 2 et une forte baisse de Swing/Applet clients à distance de l'EJB de la communication, la fonction de la session, qui est maintenue pendant une
@Stateful
haricot est devenu de moins en moins claires.Je pense qu'il est juste de dire que
@Stateful
n'est tout simplement pas utilisé beaucoup ces jours-ci. Pour une application web de la session HTTP est presque toujours en tête, ce qui signifie l'utilisation de la session de la portée et locales@Stateless
haricots et/ou CDI haricots pour la logique métier.Dans certains cas,
@Stateful
les haricots sont nécessaires pour leur soutien naturel pour le contexte de persistance étendue de JPA, et pour leur passivation caractéristiques (Servlet n'est pas normalisé mécanisme de passivation). Notez que@Stateful
et@SessionScoped
(ou de beaucoup d'autres étendues) peuvent être combinés. L'avantage de combiner entre eux est que le code d'utilisateur n'a plus besoin de gérer la durée de vie, mais le conteneur gère ce.Il y a un peu la même histoire pour
@ApplicationScoped
et@Singleton
, bien que sans l'héritage (@Singleton
est une chose assez nouvelle).@ApplicationScoped
est juste un champ d'application, tout@Singleton
est un type de bean (stéréotype si vous le souhaitez), qui ne vous donne pas seulement de l'application étendue de comportement, mais aussi vous offre transactionnelle comportement nouveau, avec verrouillage automatique (qui peut être réglée via@Lock
) et avec hâte la construction de comportement (via@Startup
).Bien que
@Stateful
et@Singleton
sont par eux-mêmes, assez pratique, la façon actuelle de l'avant dans Java EE semble être à se décomposer ceux qui construisent les stéréotypes dans les séparément utilisable annotations et qui sait, peut-être qu'un jour, ils seront effectives CDI stéréotypes composé de ceux décomposé annotations.sur les stéréotypes que vous pouvez lire en CDI manuel
OriginalL'auteur Arjan Tijms