87 votes

Quand utiliser le Stateful session bean plutôt que le Stateless session bean ?

Un haricot de session à état est défini comme suit :

Stateful Session Beans L'état d'un objet est constitué des valeurs suivantes de ses variables d'instance. Dans un haricot de session avec état, les variables d'instance représentent l'état d'une session unique client-bean. Parce que Parce que le client interagit ("parle") avec son bean, cet état est souvent appelé l'état conversationnel.

Un haricot de session sans état est défini comme suit :

Haricots de session apatrides Un haricot de session apatrides ne maintient pas un état conversationnel avec le client. Lorsqu'un client invoque les méthodes d'un bean sans état, les variables d'instance du bean peuvent contenir un état spécifique à ce client, mais seulement pour la durée de l'invocation. l'invocation. Lorsque la méthode est terminée, l'état spécifique au client ne doit pas être conservé. Les clients peuvent toutefois modifier l'état des variables d'instance dans les beans sans état mis en commun, et cet état est conservé Cet état est conservé jusqu'à la prochaine invocation du haricot apatride mis en commun. À l'exception de l'invocation d'une méthode, toutes les instances d'un haricot sans état sont équivalentes, ce qui permet au conteneur EJB d'attribuer une instance à n'importe quel client. client. C'est-à-dire que l'état d'un bean de session sans état doit s'appliquer à tous les clients.

L'avantage d'utiliser un bean de session sans état par rapport à un bean de session avec état est le suivant :

Parce que les beans de session apatrides peuvent supporter plusieurs cl offrir une meilleure évolutivité pour les applications qui nécessitent un grand nombre de clients. grand nombre de clients. En général, une application nécessite moins de beans de session sans état que de beans de session avec état. que de beans de session avec état pour prendre en charge le même nombre de clients. clients.

La question qui vient à l'esprit est donc de savoir quand il faut utiliser des session beans avec état ? Selon ma compréhension naïve de la question, il faut s'en tenir à l'utilisation d'un haricot de session sans état.

Quels seraient les candidats dans lesquels on devrait utiliser un bean de session avec état ? De bons exemples ?

Haricot de session

160voto

tobiasdenzler Points 1590

Tout d'abord, vous devez comprendre comment les beans sont créés et gérés sur le serveur.

Pour haricots de session apatrides le serveur peut maintenir un nombre variable d'instances dans un pool. Chaque fois qu'un client demande un tel haricot sans état (par exemple par une méthode), une instance aléatoire est choisie pour répondre à cette demande. Cela signifie que si le client fait deux demandes successives, il est possible que deux instances différentes du haricot sans état répondent aux demandes. En fait, il n'y a pas d'état conversationnel entre les deux demandes. De même, si le client disparaît, le haricot sans état n'est pas détruit et peut répondre à la prochaine demande d'un autre client.

D'autre part, un haricot de session avec état est étroitement lié au client. Chaque instance est créée et liée à un seul client et ne sert que les demandes de ce client particulier. Ainsi, si vous effectuez deux requêtes successives sur un haricot à état, votre requête sera toujours servie par la même instance du haricot. Cela signifie que vous pouvez maintenir un état conversationnel entre les requêtes. À la fin du cycle de vie, le client appelle une méthode de suppression et le bean est détruit/prêt pour la collecte des déchets.

Quand utiliser un système sans état ou avec état ?

Cela dépend principalement de la question de savoir si vous voulez maintenir la état conversationnel . Par exemple, si vous avez une méthode qui additionne deux nombres et renvoie le résultat, vous utilisez un haricot apatride car il s'agit d'une opération unique. Si vous appelez cette méthode une deuxième fois avec d'autres nombres, vous n'êtes plus intéressé par le résultat de la précédente addition.

Mais si vous voulez, par exemple, compter le nombre de requêtes effectuées par un client, vous devez utiliser un haricot à état. Dans ce scénario, il est important de savoir combien de fois le client a demandé la méthode du bean auparavant, vous devez donc maintenir un état conversationnel dans le bean (par exemple avec une variable). Si vous utilisiez un bean sans état ici, la requête du client serait servie à chaque fois par un bean différent, ce qui perturberait vos résultats.

58voto

BSeitkazin Points 1600

Je pense que le meilleur exemple d'utilisation d'un Haricot de session avec état est pour un Panier d'achat où vous stockez tous les produits que l'utilisateur veut acheter.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X