EJB 3 - NameNotFoundException em Bean cadastrado

6 respostas
luciano2

Ola pessoal, comecei a dois dias meus estudos sobre EJB3 e confesso que as facilidades dele me deixaram surpreso,
depois de muitos tempo dando manutenções em sistemas utilizando tecnologia antiga finalmente vou poder utilizar o EJB3.

Comecei os estudos utilizando o tutorial abaixo

https://sites.google.com/a/thedevinfo.com/thedevinfo/Home/jboss/jboss-application-server/ejb3-session-bean-tutorial-using-jboss-and-eclipse

Mas no momento de acessar o ejb remoto o seguinte erro acontece

javax.naming.NameNotFoundException: ServicoImpl not bound at org.jnp.server.NamingServer.getBinding(NamingServer.java:771) at org.jnp.server.NamingServer.getBinding(NamingServer.java:779) at org.jnp.server.NamingServer.getObject(NamingServer.java:785) at org.jnp.server.NamingServer.lookup(NamingServer.java:396)

Esse nome está sendo listado entre os nomes JNDI na inicialização do JBoss, mas eu não consigo acessa-lo no meu cliente.

Alguém sabe oque pode estar errado?

6 Respostas

maior_abandonado

poste seu bean e a respectiva interface, você está definindo o nome nele? como o nome aparece ao iniciar o jboss? ao subir o jboss da algum erro? você consegue acessar da máquina local pelo nome? você consegue pingar o endereço do servidor a partir do cliente? está usando anotação ou xml? se for xml poste ele também.

luciano2

Estou usando anotação

@Local
@LocalBinding(jndiBinding="ServicoLocal")
public interface ServicoLocal extends Servico{

}

@Remote
@RemoteBinding(jndiBinding="ServicoRemote")
public interface ServicoRemote extends Servico{

}

public interface Servico {
	Usuario getUsuario(String nome);   
	void persistirUsuario(Usuario usuario);
}

@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class ServicoImpl implements ServicoLocal,ServicoRemote{

}

Quando faço o deploy no Jboss ele não dá nenhum erro e me mostra jndi:ServicoRemote

e o meu código cliente é:

Properties props = new Properties();
props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.factory.url.pkgs",	"org.jboss.naming");
props.setProperty("java.naming.provider.url", "127.0.0.1:1099");

InitialContext ctx = new InitialContext(props);
ServicoRemote servico = (ServicoRemote) ctx.lookup("ServicoRemote/remote");

Tentei acessar através de "ServicoRemote/remote" e "ServicoImpl/remote", mas todos dois lançam NameNotFoundException.
Eu li que não é necessário o ejb-jar.xml com o EJB3, então o erro não é por minha aplicação estar sem esse arquivo, ou é?

maior_abandonado

troque ctx.lookup(“ServicoRemote/remote”) por ctx.lookup(“ServicoRemote”).

uma dica que eu te daria, seria ao invés de usar a anotação RemoteBinding, especificar o nome do ejb direto na anotação Stateless, no atributo name ou mappedName, não me lembro agora…

você está tentando acessar o seu ejb remoto da sua própria máquina né? pode parecer meio obvio, mas ja veio gente aqui reclamar que de uma máquina cliente não conseguia acessar o ejb remoto no servidor mas manteve a url do servidor com 127.0.0.1 …

maior_abandonado

faz um certo tempo que eu mechi com ejb, se bem me lembro não é necessário esse xml não…

luciano2

Estou tentando acessar na minha máquina mesmo.

Tentei só ServicoRemote, mas também não funcionou vou tentar colocar o nome direto no @Stateless e depois respondo se deu certo.

Já busquei o dia todo na internet e nada. Tem um monte de receita de bolo que não funcionam, dei uma olhada no livro da Oreilly e a receita de bolo é a mesma.

Deve ter algo no meu ambiente que pode estar errado. Estou usando o JBoss 5 será tem alguma imcompatibilidade?

maior_abandonado

ja fiz esse teste no 5.1 e funcionou, inclusive com a anotação @EJB no caso da interface local (que em versões pouco anteriores o jboss não tinha compatibilidade).

Criado 8 de julho de 2011
Ultima resposta 11 de jul. de 2011
Respostas 6
Participantes 2