C'est vrai que l'appel à tes EJB Entity doit être fait via leur interface locale dans ton EJB Session (cela évite des appels réseau).
Pour cela il faut deux choses :
Récupérer tes EJBLocalHome :
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Object o = ctx.lookup(nomJNDIdetonEJBEntity);
Mais le mieux c'est de mettre en place le pattern ejb home factory
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Object o = ctx.lookup(new StringBuffer("java:comp/env/").append(ejbRef).toString());
ou ejbRef est la référence d'un ejb.
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
22
23 public class HomeFactory { public Object getHome(String ejbRef) throws NamingException { if (initialContext != null) { Object nsObject = initialContext.lookup( new StringBuffer("java:comp/env/") .append(ejbRef) .toString()); if (nsObject instanceof EJBLocalHome) { return nsObject; } else { EJBHome ejbHome = (EJBHome) javax.rmi.PortableRemoteObject.narrow( (org.omg.CORBA.Object) nsObject, EJBHome.class); return ejbHome; } } else { throw new NamingException("HomeFactory: no InitialContext"); } } }
Déclarer dans le paramétrage de ton EJB Session, les références locales vers tes EJB Entity.
Partager