Bom dia,
eu tenho um módulo ejb onde eu criei um stateless session bean (usei a anotação @Stateless) que implementa uma interface anotada com @Local. Se eu de outro ejb do mesmo módulo chamar esse ejb através de uma anotação @EJB beleza. Tudo funciona as mil maravilhas. Porém eu criei nesse módulo uma classe simples (POJO) onde eu quero ter uma referência desse session bean para executar alguns serviços. Para isso eu fiz um lookup seguindo as especificações desse link: https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html#POJOLocalEJB
Porém não consigo, sempre no momento do lookup eu recebo o erro de NameNotFoundException. Eu já tentei colocar o nome JNDI de várias formas, entre elas:
(lembrando que meu bean se chama MeuEjbBean e minha interface se chama IMeuEjbLocal)
[i]java:comp/env/MeuEjbBean
java:comp/env/IMeuEjbLocal
java:comp/env/nome.do.pacote.MeuEjbBean
java:comp/env/nome.do.pacote.IMeuEjbLocal
java:comp/env/ejb/MeuEjbBean
java:comp/env/ejb/IMeuEjbLocal (interface)
java:comp/env/ejb/nome.do.pacote.MeuEjbBean
java:comp/env/ejb/nome.do.pacote.IMeuEjbLocal
MeuEjbBean
IMeuEjbLocal
nome.do.pacote.MeuEjbBean
nome.do.pacote.IMeuEjbLocal
MeuEjbBean/local
IMeuEjbLocal/local
nome.do.pacote.MeuEjbBean/local
nome.do.pacote.IMeuEjbLocal/local[/i]
Não funcionou com nenhuma dessas formas, sempre o mesmo erro. Também tentei colocar um nome usando a anotação @Stateless(name=“blablabla”, beanInterface=FooLocal.class) e trocar todos os exemplos acima por “blablabla”, mas também não rolou.
Uma coisa curiosa é que se eu mudo a interface para @Remote ao invés de @Local, funciona na boa! O lookup rola de primeira usando o JNDI assim:
“nome.do.pacote.IMeuEjbLocal”
O que pode estar errado ou qual a forma correta de se fazer?
OBS: Não, eu não tenho um ejb-jar.xml pois eu uso EJB 3 e nunca precisei criar esse arquivo, tanto que como Remote o lookup ocorre!
OBS2: Uso EJB3 e Glassfish.
grato.
Danilo G. Magrini