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 :

Gardez les références des EJB session spécification 2.0 [EJB2]


Sujet :

Java EE

  1. #1
    Membre confirmé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Points : 475
    Points
    475
    Par défaut Gardez les références des EJB session spécification 2.0
    Hello les gens,
    Sur le net je trouve beaucoup de conseil insistant, pour des raisons de performances, sur le fait de devoir garder en mémoire la référence locale à l'EJB session au lieu de faire une instanciation à chaque appel de méthode.

    En gros je cherche un code pour apprendre à procéder autrement que:
    Appeler un contexte et rechercher une référence locale à l’EJB Session et ne faire ses initialisations qu’une seule fois et garder en mémoire la référence à l’objet contexte , à l’interface LocalHome de mon EJB.

    Un exemple valant mieux que de bôoo discours, voici par exemple une méthode issue d'une classe Facade:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public static ArrayList getCollaborateurs(Integer empno) throws Exception{
    //  Initialisation du contexte d'éxécution
        InitialContext context = new InitialContext();
     
      //chargement de la home locale de l'EJB Session
        GestionEmployesLocalHome gestionEmployesLocalHome =           (GestionEmployesLocalHome)        context.lookup("java:comp/env/ejb/GestionEmployes");
     
     
      //création d'un objet Session :
      GestionEmployesLocal gestionEmployeLocal=  gestionEmployesLocalHome.create();
     
      //emploi de la méthode getCollaborateurs de l'objet Session
      return gestionEmployeLocal.getCollaborateurs(empno);
    }
    Merci pour toutes vos contributions.

  2. #2
    Membre confirmé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Points : 475
    Points
    475
    Par défaut
    Personne ? j'éspère au moins m'être fait comprendre

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    Salut,
    D'abord, juste par curiosité, pourquoi tu ne développes pas des EJB 3.x au lieu de rester encore en 2.x. Les EJBs se sont beaucoup simplifiés depuis, avec un modèle de programmation plus simple et une API plus riche, surtout avec la dernière spec 3.1. Si tu es débutant ou si tu en a le choix, je te conseille de faire la migration.

    Sinon, pour le problème que tu poses, tu peux très bien déclarer une variable d'instance qui serait une référence à ton ejb, initialisée une fois et réutilisée par les différentes méthodes.
    En ejb3, une injection de dépendance suffirait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import javax.ejb.EJB;
    import javax.ejb.Stateless
     
    @Stateless
    public class FacadeBean implements Facade{
         @EJB
         private GestionEmployesLocal gestionEmployeLocal;
     
         public ArrayList<Employee> getCollaborateurs(Integer empno){
                return gestionEmployeLocal.getCollaborateurs(empno);
         }
    }
    Evidemment, là il faudrait faire attention de ne pas injecter un stateful session bean dans un composant stateless (servlet ou stateless session bean).

    En ejb 2.x, si le client est un autre ejb, tu pourrait initialiser la variable d'instance dans la méthode ejbCreate(), et la libérer dans ejbRemove().
    Le code qui se rapprocherait de celui plus simple ci-dessus serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    import javax.ejb.SessionBean
     
    public class FacadeBean implements SessionBean{
     
         private GestionEmployesLocal gestionEmployeLocal;
     
         public ArrayList<Employee> getCollaborateurs(Integer empno){
                return gestionEmployeLocal.getCollaborateurs(empno);
         }
     
         public void ejbCreate(){
            Context cxt = new InitialContext();
            GestionEmployesLocalHome home = GestionEmployesLocalHome)cxt.lookup("java:comp/env/ejb/GestionEmployes");
            this.gestionEmployeLocal = home.create();
         }
     
         public void ejbRemove(){
              gestionEmployeLocal.remove();
         }
    }
    Voilà, je n'ai pas testé le code, mais j'espère que cela correspond à ce que tu cherches.

  4. #4
    Membre confirmé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Points : 475
    Points
    475
    Par défaut
    J'ai trouvé une implémentation du design pattern servicelocator qui devrait faire l'affaire. Merci pour ton aide en tout cas.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/03/2014, 11h53
  2. Réponses: 3
    Dernier message: 16/06/2011, 10h38
  3. [EJB] Les méthodes des ejb stateless ne s'exécutent pas
    Par methodman225 dans le forum Java EE
    Réponses: 3
    Dernier message: 04/08/2010, 11h52
  4. Réponses: 3
    Dernier message: 23/03/2009, 20h34
  5. [EJB3] Quels sont les avantages des EJB 3?
    Par Sun03 dans le forum Java EE
    Réponses: 2
    Dernier message: 03/06/2008, 11h27

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