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

JSF Java Discussion :

Session Bean et JSF


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Août 2002
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 143
    Par défaut Session Bean et JSF
    Bonjour,

    En tant que débutant sur JEE je me pose quelques questions :

    En effet je souhaite garder des informations de session sur un utilisateur, un exemple simple l'utilisateur tape son nom dans une page jsf ce nom est conservé durant toute la session. Appellons cet EJB SessionEJB.

    Donc si j'ai bien compris les Stateless ne garde pas d'informations entre deux appels, donc j'opte pour les Statefull qui si j'ai toujours bien compris garde des informations entre plusieurs appels d'un objet (lien 1-1 avec un controller par exemple).

    De plus j'ai un managed bean que j'appelle Controller à qui j'injecte mon SessionEJB que je met en @RequestScoped, et je rajoute une fonction doSetNom dans mon controller qui appelle le setNom de mon SessionEJB et qui renvoie sur la page d'accueil qui elle affiche le getNom de mon controller (qui appelle le getNom de mon EJB)

    Jusque là je pensais que si une page JSF appellais mon doSetNom de mon controller et que je me balladais un peu de pages en pages et que je revenais sur ma page d'accueil, il y aurait encore marqué le nom de l'utilisateur !
    Mais non, donc je décide de changer le scope de mon controller en SessionScoped, et la bingo ça marche ! Sauf que cela marche un peu trop bien.. En effet même si je change mon EJB en Stateless ça marche encore aussi !
    Normalement en Stateless il n'aurait pas du conserver ces informations non ?

    Désolé pour le roman mais j'ai peur de m'embrouiller un peu

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Par défaut
    Pour commencer, tu as 3 parties dans ton projet tel que tu nous le présentes :
    IHM --> controller --> EJB

    Pourquoi conserver tes infos au niveau des EJB alors que le controller peut le faire (balise SessionScoped)?
    Peut-être veux-tu les enregistrer dans une base de données.

    Dans tous les cas, restes avec un EJB Stateless et un controller en SessionScoped.

    Normalement en Stateless il n'aurait pas du conserver ces informations non ?
    Rien à voir, sans faire attention tu as stocké le nom dans le controller (balise SessionScoped). L'appel à l'EJB est fait une seul fois : à l'exécution de la méthode doSetNom(). Donc tu n'allais pas chercher, à priori, l'info au niveau de ton EJB.

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Août 2002
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 143
    Par défaut
    Citation Envoyé par scorplayer Voir le message
    Dans tous les cas, restes avec un EJB Stateless et un controller en SessionScoped
    Ouais mais du coup est ce que c'est possible d'avoir un controller en RequestScoped qui traite des requetes, et un autre en SessionScoped qui gère les infos de session ?
    En gros est ce que l'on peut faire de l'injection de ressources à un controller pour accèder à un autre controller ?

    Citation Envoyé par scorplayer Voir le message
    Rien à voir, sans faire attention tu as stocké le nom dans le controller (balise SessionScoped). L'appel à l'EJB est fait une seul fois : à l'exécution de la méthode doSetNom(). Donc tu n'allais pas chercher, à priori, l'info au niveau de ton EJB.
    Pourtant je vais bien chercher l'info au niveau de mon EJB, car je fais un petit System.out.println dans mon getNom de mon EJB session et je passe bien par là à chaque appel du controller. C'est ça que tu voulais dire par "l'appel à l'EJB est fait une seul fois" ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Par défaut
    Ouais mais du coup est ce que c'est possible d'avoir un controller en RequestScoped qui traite des requetes, et un autre en SessionScoped qui gère les infos de session ?
    Oui tu peux

    En gros est ce que l'on peut faire de l'injection de ressources à un controller pour accèder à un autre controller ?
    Il est possible d'accéder à un autre controller. Tu veux récupérer les infos dans le controller Session à partir du controller Request c'est ça?

    Pourtant je vais bien chercher l'info au niveau de mon EJB, car je fais un petit System.out.println dans mon getNom de mon EJB session et je passe bien par là à chaque appel du controller.
    Si tu veux garder des infos en session, inutile d'aller les chercher à chaque fois dans ton EJB. Donc quand l'utilisateur rentre son nom, enregistre le dans ton controller Session.

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Août 2002
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 143
    Par défaut
    Tu veux récupérer les infos dans le controller Session à partir du controller Request c'est ça?
    Oui c'est ce que je souhaite faire

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Par défaut
    Voila le code pour accéder à un controller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FacesContext facesContext = FacesContext.getCurrentInstance();
    TonController controller = (TonController) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "nomController");
    Avec "nomController" le nom de ton controller défini dans le fichier faces-config.xml

    Tout fonctionne?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. les Beans et jsf
    Par anisj1m dans le forum JSF
    Réponses: 19
    Dernier message: 25/10/2007, 12h13
  2. [EJB Session] webservice et stateful session bean
    Par batotoba dans le forum Java EE
    Réponses: 4
    Dernier message: 16/07/2007, 23h22
  3. problème d'injection (?) d'un session bean EJB3 dans une servlet
    Par toomsounet dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 11/03/2007, 01h26
  4. Acces a un session bean
    Par seddik_saber dans le forum JSF
    Réponses: 1
    Dernier message: 27/11/2006, 15h00
  5. [EJB3] 'Passivation' d'un Stateful Session Bean
    Par metalpetsFR dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 03/07/2006, 22h50

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