IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java EE Discussion :

EJB stateless stateful


Sujet :

Java EE

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut EJB stateless stateful
    Bonjour a vous,

    je commence a m'interesser au developpement des EJB, vous avez sans doute vu que @Stateless est sans état : il ne conserve pas une mémoire
    de ce quil a fait précédemment.
    @stateful est le contraire.

    pouvez vous me clarifier d'avantage ce concept avec un exemple concret, ou je me vois contraint d'utiliser une annotation et pas l'autre.

    merci d'avance

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 949
    Points : 1 857
    Points
    1 857
    Par défaut
    Exemple de session bean statefull : le panier d'un site de vente par correspondance. Si l'utilisateur ajoute de nouveaux produits au panier, mieux vaut ne pas oublier tous les produits qu'il y a mis précédemment.

    Exemple de session bean stateless : le catalogue. Un utilisateur peut consulter les fiches produits de plusieurs articles, on a pas besoin quel sont les articles qu'il a vu auparavant pour afficher la fiche du produit en cours.

  3. #3
    Membre VIP Avatar de kalysto
    Profil pro
    Développeur
    Inscrit en
    Mars 2003
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mars 2003
    Messages : 442
    Points : 568
    Points
    568
    Par défaut
    Une autre maniere de voir les choses :

    Quand un client discute avec un EJB stateful, il dialogue toujours avec la même instance.
    Tandis que si c'est un EJB stateless, il n'y aucune garanties que 2 appels consécutifs de méthodes soient traités par la même instance d'EJB.

  4. #4
    Rédacteur
    Avatar de longbeach
    Profil pro
    Architecte de système d’information
    Inscrit en
    Avril 2003
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Avril 2003
    Messages : 943
    Points : 2 370
    Points
    2 370
    Par défaut
    Autre exemple de stateless session bean : authentification.

  5. #5
    Membre régulier
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2002
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 74
    Points : 88
    Points
    88
    Par défaut complement de réponse
    Ce qu'il faut comprendre avec les EJBs, c'est que c'est le conteneur qui gère le cycle de vie de ces objets. Ce qui implique qu'a aucun moment dans ton code tu ne verras un EJB instancié par tes soins.

    Ceci implique plusieurs choses : c'est le conteneur qui décide à quel moment les instances des objet ont besoin d'être en mémoire.
    Ainsi pour un stateless, au moment ou l'ejb est déchargé de la mémoire toutes les variables éventuellement utilisées par les méthodes ne seront pas préservées.
    Lorsque un client demande à accéder à un EJB, si celui ci est en mémoire et non utilisé, il est directement donné à celui ci dans l'etat ou il se trouve.
    Cela se traduit par 2 effets :
    - 2 clients accédant à un même EJB, pourrait potentiellement voir les même valeurs, si le conteneur n'a pas déchargé l'EJB avant que le deuxième client y demande accés.
    -1 clients accédant à un EJB à deux intervalles de temps, risque de ne pas voir les données initialisé dans les variables.

    Pour un statefull, en revanche lors du déchargement de l'EJB de la mémoire une phase de "passivation" est initié, pour sauvegarder l'état de l'EJB.
    L'utilisation des statefull ne dois pas être utilisé à la légère cela va de soit.
    Pour autant si on veut qu'un client accède toujours à son statefull, il faut associer celui ci à sa session. sinon, à chaque fois que le client demande à accéder au satefull le conteneur le retournera un nouvel EJB.

    Dans une architecture SOA, la notion de session devrait pas intervenir, le mieux est d'utiliser que des stateless. C'est mon avis.

    Cordialement

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Les EJB stateful ont un intérêt quand on veut faire des traitements sur plusieurs cycles. On peut paramétrer de manière fine les transactions, le moment où elles seront validées (commit) ou invalidées (+ sous-transaction).

    Les stateless sont quant à eux un simple aller/retour entre le client et le conteneur, avec un paramétrage classique JTA, la transaction est validée à la sortie de la méthode ayant créé la transaction.

    Dans un contexte web, rien n'empêche d'utiliser la session (http) pour stocker les données collectées sur plusieurs cycles et d'utiliser un stateless pour valider un graphe entier.
    Tout peut se discuter

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 52
    Points : 70
    Points
    70
    Par défaut
    Doc officielle : http://download.oracle.com/javaee/5/...bly.html#bnbmc

    stateless : pool d'instance, montée en charge impeccable. (à utiliser par defaut)

    statefull : 1 instance dédiée à un client. passivate lourd donc à utiliser que si on a réellement besoin de garder l'état.

Discussions similaires

  1. EJB Stateful dans EJB Stateless
    Par Danicela dans le forum Java EE
    Réponses: 2
    Dernier message: 01/05/2012, 19h58
  2. [EJB3] Un Ejb Stateless qui se comporte comme unEjb Stateful
    Par clem_alain dans le forum Java EE
    Réponses: 5
    Dernier message: 04/02/2011, 12h00
  3. [EJB] EJB session stateful et HTTPSession
    Par newbeewan dans le forum Java EE
    Réponses: 1
    Dernier message: 02/08/2007, 11h19
  4. [EJB3] [JBoss] javax.ejb.Stateless introuvable
    Par pmartin8 dans le forum Java EE
    Réponses: 2
    Dernier message: 16/04/2007, 15h09
  5. [EJB3] Retour null sur tous mes EJB Stateless.
    Par vinzo dans le forum Java EE
    Réponses: 3
    Dernier message: 06/02/2007, 16h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo