Erro no Client ao localizar EJB

4 respostas
lusilva1982

Pessoal, montei um simples exemplo de como utilizar EJB3, porém, no cliente dá erro ao fazer a o lookup.
Estou usando o Jboss 4.2 e fiz o deploy no perfil all.

veja o EJB:

@Local
public interface AcervoLocal{
	public ArrayList<Livro> getListBooks();
}


@Remote
public interface AcervoRemote{
	public ArrayList<Livro> getListBooks();
}

Agora a implementação no SessioBean

@Stateless
public class AcervoBean implements AcervoLocal, AcervoRemote {
	private LivroDAO ldao = new LivroDAO();

	public AcervoBean(){
		super();
	}

	public ArrayList<Livro> getListBooks(){
		return ldao.getListaLivros();
	}

}

Em seguida, montei o jboss.xml no diretório META-INF/

<?xml version="1.0"?>
<jboss
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                            http://www.jboss.org/j2ee/schema/jboss_5_0.xsd"
        version="3.0">
	<enterprise-beans>
    	<session>
         	<ejb-name>Acervo</ejb-name>
         	<jndi-name>Acervo</jndi-name>
      	</session>
   	</enterprise-beans>
</jboss>

Bem, depois disso criei um jar (usando o eclipse a opção EJB JAR) e disponibilizei no \jboss\server\all\deploy
Em seguida, montei o client da seguinte maneira:

public static void main(String[] args){
		try {
			Context context = new InitialContext();
			AcervoBean bean = (AcervoBean) context.lookup("ejb/Acervo");
			
			List l = bean.getListBooks();
			System.out.println("Size: " + (l!=null ? l.size() : 0) );
			
		} catch (NamingException e) {
			e.printStackTrace();
		}
	}

Mas… sem chances, já tentei de diversas maneiras e não localiza de jeito nenhum. Dá essa exceção:

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
	at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
	at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
	at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
	at javax.naming.InitialContext.lookup(InitialContext.java:392)
	at luciano.client.MacacoClient.main(MacacoClient.java:16)

Pelo visto tenho que colocar alguns informações a mais no locator, correto? Alguém pode me ajudar!?

Thank’s

4 Respostas

jgbt

primeira duvida,
se vc esta fazendo o deploy no servidor all, vc esta dando start nele? se vc rodar o run do jboss ele vai iniciar o servidor default por padrao.

outra coisa, no cliente na hora de iniciar o Contexto vc precisa de:

Properties properties = new Properties();
		properties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
		properties.put("java.naming.factory.url.pkgs","=org.jboss.naming:org.jnp.interfaces");
		properties.put("java.naming.provider.url","localhost:1099");
		Context context = new InitialContext(properties);

o jar do jboss client precisa estar no classpath.

[]´s

lusilva1982

Valeu pela ajuda, mas ainda tá dando erro.

Eu configurei pra subir no perfil all, coloquei no meu client o Server Runtime, ou seja, todas as libs necessárias do jboss, mesmo assin continua com essa mensagem de erro.

javax.naming.NameNotFoundException: Acervo not bound
	at org.jnp.server.NamingServer.getBinding(NamingServer.java:529)
	at org.jnp.server.NamingServer.getBinding(NamingServer.java:537)
	at org.jnp.server.NamingServer.getObject(NamingServer.java:543)
	at org.jnp.server.NamingServer.lookup(NamingServer.java:296)
	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 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)
	at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
	at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
	at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
	at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:667)
	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
	at javax.naming.InitialContext.lookup(InitialContext.java:392)
	at luciano.client.MacacoClient.main(MacacoClient.java:21)

Valeu.

jgbt

O erro agora é outro.
Esse erro significa que esse nome “Acervo” não foi encontarado como serviço pelo servidor quando o cliente solicitou.
Vc tem que conferir o log do servidor p/ ver se a sua app ta subindo sem erro.

De uma olhada nesse tutorial que vai te ajudar:

http://www.laliluna.de/ejb-3-tutorial-jboss.html

[]´s

lusilva1982

Olá amigo, vc realmente estava correto, o jboss estava subindo como default, mesmo eu configurando para all.

09:53:04,062 INFO  [EJBContainer] STARTED EJB: monkey.ejb.AcervoBean ejbName: AcervoBean

Bem, foi resolvido “eu acho”! Vou fazer uns testes com o client agora.

Obrigado mais uma vez.
:smiley:

Criado 25 de agosto de 2008
Ultima resposta 26 de ago. de 2008
Respostas 4
Participantes 2