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

JPA Java Discussion :

Appel EJB Session par EJB Session et instance EntityManager


Sujet :

JPA Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 169
    Points : 65
    Points
    65
    Par défaut Appel EJB Session par EJB Session et instance EntityManager
    Bonjour à tous,
    Voici ma situation :
    Un EJB Session ClientFacade appelle la méthode Lire_Categorie_Id() de l'EJB Session CategorieFacade. Lors de cet appel l'instance de l'EntityManager enCat est nulle alors que par ailleurs lorsque la méthode Liste_Categories() est appelée par la servlet tout fonctionne bien.
    Voici le code en question :

    ClientFacade :
    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
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public void Maj_Client(Integer id, String identite, String adresse, String login, String pwd, Integer credits, Integer id_categorie) throws Exception {
            Client clientE = null;
            Categorie categorieE = null;
            CategorieFacade categorieF = null;
            try {
                clientE = Lire_Client_Id(id);
                categorieF = new CategorieFacade();
                categorieE = categorieF.Lire_Categorie_Id(id_categorie);            
                clientE.setCategorie(categorieE);
                clientE.setAdresseClient(adresse);
                . . .            
                em.merge(clientE);
            } catch (Exception e) {
                throw e;
            }
        }
    CategorieFacade :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public Categorie Lire_Categorie_Id(int id_categorie) throws Exception {
         try {
                return emCat.find(Categorie.class, id_categorie);
         } catch (Exception e) {
                throw e;
          }
    }
    J'ai "résolu" le problème ou plutôt contourné le problème en passant la référence de l'EM du client à Lire_Categorie_Id() comme suit :
    Categoriefacade :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public Categorie Lire_Categorie_Id(int id_categorie, EntityManager emClient) throws Exception {
            try {
                return emClient.find(Categorie.class, id_categorie);
            } catch (Exception e) {
                throw e;
            }
    }
    ClientFacade :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void Maj_Client(Integer id, String identite, String adresse, ...    
         . . .
        categorieF = new CategorieFacade();
        categorieE = categorieF.Lire_Categorie_Id(id_categorie, em);            
         . . .
    Ma question est : est-ce bien orthodoxe ? Et si non quel autre moyen ai-je de résoudre ce petit problème ?
    Merci d'avance,

  2. #2
    Membre émérite
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Points : 2 814
    Points
    2 814
    Par défaut
    Plop,

    Je pense que le problème vient du fait que tu crées toi-même l'EJB en l'instanciant, et donc sans passer par le conteur. C'est le conteur d'EJB qui est chargé de l'instanciation de ceux-ci, et pas toi. Dans ta classe ClientFacade, ajoute ton CategorieFacade en variable d'instance et annote la avec @EJB.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 169
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par olivier.pitton Voir le message
    Plop,

    Je pense que le problème vient du fait que tu crées toi-même l'EJB en l'instanciant, et donc sans passer par le conteur. C'est le conteur d'EJB qui est chargé de l'instanciation de ceux-ci, et pas toi. Dans ta classe ClientFacade, ajoute ton CategorieFacade en variable d'instance et annote la avec @EJB.
    Bonjour,
    Effectivement tu avais raison.
    Merci pour ton aide.
    Alain

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/06/2014, 16h57
  2. Différence entre EJB et "objets en session"
    Par zaitsev dans le forum Langage
    Réponses: 4
    Dernier message: 15/02/2012, 13h11
  3. Recupérer l'instance d'une session par son id
    Par Mazer dans le forum ASP.NET
    Réponses: 1
    Dernier message: 24/06/2008, 19h56
  4. Gestion session par default WSAD
    Par mlequim dans le forum Websphere
    Réponses: 3
    Dernier message: 17/11/2005, 15h16
  5. [JNDI] Appel distant d'un EJB
    Par Righetto Dominique dans le forum Java EE
    Réponses: 4
    Dernier message: 27/01/2005, 17h05

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