Vous générez vos EJBs avec XDoclet et les déployez dans JOnAS ? Et vous n’arrivez à pas accéder à l’interface locale ?

Dès que vous faites un appel à la méthode :

MyEJBServiceUtil.getLocalHome();

L’exception suivante est levée :

javax.naming.NameNotFoundException: MyEJBServiceLocal 	at
	com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:95) 	at
	javax.naming.InitialContext.lookup(InitialContext.java:355) 	at
	org.objectweb.carol.jndi.spi.AbsContext.lookup(AbsContext.java:140) 	at
	org.objectweb.carol.jndi.spi.AbsContext.lookup(AbsContext.java:150) 	at
	javax.naming.InitialContext.lookup(InitialContext.java:351) 	at
	org.objectweb.carol.jndi.spi.MultiContext.lookup(MultiContext.java:118) 	at
	javax.naming.InitialContext.lookup(InitialContext.java:351) 	at
	com.company.project.ejb.MyEJBServiceUtil.lookupHome(MyEJBServiceUtil.java:22) 	at
	com.company.project.ejb.MyEJBServiceUtil.getLocalHome(MyEJBServiceUtil.java:64) 	at
	com.company.project.ejb.MyEJBServiceBean.myService(MyEJBServiceBean.java:112) 	at
	org.objectweb.jonas_gen.com.company.project.ejb.JOnASMyEJBService_69323337Remote.myService(JOnASMyEJBService_69323337Remote.java:56) 	at
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 	at
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 	at
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 	at
	java.lang.reflect.Method.invoke(Method.java:585) 	at
	sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294) 	at
	org.objectweb.carol.rmi.jrmp.server.JUnicastServerRef.dispatch(JUnicastServerRef.java:143) 	at
	sun.rmi.transport.Transport$1.run(Transport.java:153) 	at
	java.security.AccessController.doPrivileged(Native Method) 	at
	sun.rmi.transport.Transport.serviceCall(Transport.java:149) 	at
	sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:466) 	at
	sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707) 	at
	java.lang.Thread.run(Thread.java:595)

En fait, JOnAS ne permet pas de configurer la référence JNDI de votre interface locale. Cette référence est obligatoirement égale à la référence JNDI de l’interface distante à laquelle il est ajouté la chaîne de caractère _L. Ainsi, si la référence distante JNDI de votre EJB est MyEJBService, la référence locale est MyEJBService_L.

Donc, pour cet exemple, les tags XDoclet à positionner sont :

/* * @ejb.bean
 *      name="MyEJBService"
 *      type="Stateless"
 *      view-type="local"
 *      jndi-name="MyEJBService"
 *      local-jndi-name="MyEJBService_L"
 * @jonas.bean
 *      ejb-name="MyEJBService"
 *      jndi-name="MyEJBService"
 */

Maintenant, vous êtes capable de récupérer l’interface locale d’un EJB généré avec XDoclet et déployé sous JOnAS.