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,