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:
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:
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:
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:
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,