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 :

[EJB3_Stateful]Problème sauvegarde de l'état


Sujet :

Java EE

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 6
    Points : 4
    Points
    4
    Par défaut [EJB3_Stateful]Problème sauvegarde de l'état
    Bonsoir,
    Je travaille actuellement sur un projet J2EE ( mysql, EJB, JSP)
    J'utilise dans mon projet un EJB3 de type stateful qui est utilisé pour la sauvegarde de l'état de connexion et des informations relatives à l'utilisateur( login ,password, nom, prenom, ...)
    Mon projet comporte une page JSP relative à la connexion, dans cette page, je fait lookup à cet EJB.
    Comment je peux récupérer le même EJB ( qui contient les données de l'utilisateur courant) à partir d'une autre page JSP ?

    Merci de m'aider sur ce point bloquant.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 70
    Points : 83
    Points
    83
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      <%!
         public MyEJBIntertace getMySessionBean(HttpServletRequest request){
            MyEJBIntertace resp = request.getSession().getAttribut("SESSION_BEANS");
            if(resp==null){
                InitContext cxt = new InitContex(prop);
                resp = (MyEJBIntertace)cxt.lookup("ejb/MyEJB/remote");
                request.getSession().setAttribut("SESSION_BEANS",resp);
            }
            return resp;
         }
      %>
    et il te suffira d'appeler cette méthode pour récupérer ton EJB.

    Je tiens à préciser que cette façon de faire est "anti-pattern" car le pattern MVC veut que les jsp ne contiennent que la logique de présentation.
    Le bonne méthode serait de récupérer ton EJB à partir de ton contrôleur.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci pour ta réponse, je vais l'essayer et te fournir mon feedback.
    Sinon, j'ai trouvé une autre solution et je ne sais pas si elle la bonne,
    J'utilise un EJB 3.1 singleton au lieu du EJB stateful et dans chaque page JSP, je fait un lookup sur le même EJB, cette méthode me retourne l'EJB avec les données inscrites sans aucune perte d'état.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 70
    Points : 83
    Points
    83
    Par défaut
    Citation Envoyé par lordsm11 Voir le message
    Merci pour ta réponse, je vais l'essayer et te fournir mon feedback.
    Sinon, j'ai trouvé une autre solution et je ne sais pas si elle la bonne,
    J'utilise un EJB 3.1 singleton au lieu du EJB stateful et dans chaque page JSP, je fait un lookup sur le même EJB, cette méthode me retourne l'EJB avec les données inscrites sans aucune perte d'état.
    Oui cela marche mais il y a juste un petit problème. Le singleton comme son nom l'indique est unique par jvm et non par utilisateur.
    Conséquence : si deux utilisateurs différents utilisent au même moment tes jsp (deux sessions différentes) ils auront tous la même instance et unique de singleton (donc mêmes informations).
    Du coup la phrase :
    Citation Envoyé par lordsm11 Voir le message
    de l'état de connexion et des informations relatives à l'utilisateur( login ,password, nom, prenom, ...)
    perd son sens car le singleton sera partagé par tous les utilisateurs de ton appli.

    Est ce vraiment ce que tu veux faire ? je croix que non.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Oui, c'est vrai ( quand j'accéde à l'application à partir d'un autre PC sur le réseau local, je retrouve l'état sauvegardé), donc l'EJB singleton n'est pas la bonne solution pour mon problème. Merci pour cette indication.

    Retournons à la solution avec un EJB stateful et en ce qui concerne ta réponse :

    <%!
    public MyEJBIntertace getMySessionBean(HttpServletRequest request){
    MyEJBIntertace resp = request.getSession().getAttribut("SESSION_BEANS");
    if(resp==null){
    InitContext cxt = new InitContex(prop);
    resp = (MyEJBIntertace)cxt.lookup("ejb/MyEJB/remote");
    request.getSession().setAttribut("SESSION_BEANS",resp);
    }
    return resp;
    }
    %>

    Je me retrouve devant un pointeur nul en appelant l'EJB à partir de session.getAttribute("SESSION_BEANS");
    Merci de m'aider pour résoudre ce problème

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 70
    Points : 83
    Points
    83
    Par défaut
    Citation Envoyé par lordsm11 Voir le message
    Oui, c'est vrai ( quand j'accéde à l'application à partir d'un autre PC sur le réseau local, je retrouve l'état sauvegardé), donc l'EJB singleton n'est pas la bonne solution pour mon problème. Merci pour cette indication.

    Retournons à la solution avec un EJB stateful et en ce qui concerne ta réponse :

    <%!
    public MyEJBIntertace getMySessionBean(HttpServletRequest request){
    MyEJBIntertace resp = request.getSession().getAttribut("SESSION_BEANS");
    if(resp==null){
    InitContext cxt = new InitContex(prop);
    resp = (MyEJBIntertace)cxt.lookup("ejb/MyEJB/remote");
    request.getSession().setAttribut("SESSION_BEANS",resp);
    }
    return resp;
    }
    %>

    Je me retrouve devant un pointeur nul en appelant l'EJB à partir de session.getAttribute("SESSION_BEANS");
    Merci de m'aider pour résoudre ce problème
    Non ne doit plus appeler directement session.getAttribute("SESSION_BEANS"); mais passer par la méthode que je t'ai proposée.

    NB : remplacer ejb/MyEJB/remote par la bonne valeur

Discussions similaires

  1. Problème sauvegarder l'état d'une listview
    Par remix59 dans le forum Composants graphiques
    Réponses: 1
    Dernier message: 24/02/2014, 15h55
  2. [Access] Problème d'impression des états
    Par cuicui08 dans le forum IHM
    Réponses: 2
    Dernier message: 06/03/2006, 18h38
  3. Réponses: 2
    Dernier message: 19/02/2006, 17h10
  4. [MS SQL Serveur 2000] Problème sauvegarde restauration
    Par m-mas dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/11/2005, 13h25
  5. problème avec graphique dans état access
    Par petitmic dans le forum Access
    Réponses: 5
    Dernier message: 07/09/2005, 15h55

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