Erro ao acessar EJB remoto [RESOLVIDO]

8 respostas
J

Olá a todos do forum,

Estou iniciando o desenvolvimento de uma aplicação que utilizará EJB, vale ressaltar que não tenho experiência nesta tecnologia. Quando rodo a aplicação em minha máquina (localhost) no JBoss 4.2.2 a aplicação funciona normalmente, mas está dando um erro quando faço deploy na maquina ao lado para tentar acessar o serviço remotamente. Segue erro abaixo:

Exception in thread "main" javax.naming.CommunicationException: Could not obtain connection to any of these urls: 192.168.201.31:1099 and discovery failed with error: javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out] [Root exception is javax.naming.CommunicationException: Failed to connect to server 192.168.201.31:1099 [Root exception is javax.naming.ServiceUnavailableException: Failed to connect to server 192.168.201.31:1099 [Root exception is java.net.ConnectException: Connection refused: connect]]]
	at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1562)
	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:634)
	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
	at javax.naming.InitialContext.lookup(Unknown Source)
	at livraria.Cliente.main(Cliente.java:19)
Caused by: javax.naming.CommunicationException: Failed to connect to server 192.168.201.31:1099 [Root exception is javax.naming.ServiceUnavailableException: Failed to connect to server 192.168.201.31:1099 [Root exception is java.net.ConnectException: Connection refused: connect]]
	at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:274)
	at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1533)
	... 4 more
Caused by: javax.naming.ServiceUnavailableException: Failed to connect to server 192.168.201.31:1099 [Root exception is java.net.ConnectException: Connection refused: connect]
	at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:248)
	... 5 more
Caused by: java.net.ConnectException: Connection refused: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(Unknown Source)
	at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
	at java.net.PlainSocketImpl.connect(Unknown Source)
	at java.net.SocksSocketImpl.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at org.jnp.interfaces.TimedSocketFactory.createSocket(TimedSocketFactory.java:84)
	at org.jnp.interfaces.TimedSocketFactory.createSocket(TimedSocketFactory.java:77)
	at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:244)
	... 5 more

Será que alguem poderia me ajudar a resolver este problema ??

Obrigado a todos.

8 Respostas

R

Ola, pelo que entendi no relatório acima foi que ele não conseguiu localizar ou estabelecer uma conexão com o servidor onde se encontra a aplicação. Verifica se o IP e a porta estão configuradas corretamente, e se o servidor está permitindo a comunicação nesses endereços no JBoss. :wink:

J

Olá RodyBr blz,

Obrigado pela dica…

Consegui resolver o problema iniciando o JBoss assim:

run -b 0.0.0.0

Falow, e obrigado a todos.

M

Ressuscitado o tópico :)~.

Poxa, o problema não foi solucionado para mim.
Executei o JBOSS com o comando “./run.sh -b 0.0.0.0”.
Quando executo localmente passando o meu ip para o JNDI, ele funciona tranquilo (antes sem o comando citado acima não funcionava).
Agora quando executo em outra maquina na rede, não chego ao resultado esperado.

javax.naming.CommunicationException [Root exception is java.rmi.UnknownHostException: Unknown host: nomedocomputador; nested exception is: java.net.UnknownHostException: nomedocomputador] at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:839) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:686) at javax.naming.InitialContext.lookup(Unknown Source) at br.com.arthur.desktop.session.ExecutaChamadaEJBSessionMain.main(ExecutaChamadaEJBSessionMain.java:13) Caused by: java.rmi.UnknownHostException: Unknown host: nomedocomputador; nested exception is: java.net.UnknownHostException: nomedocomputador at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source) at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source) at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source) at sun.rmi.server.UnicastRef.invoke(Unknown Source) at org.jnp.server.NamingServer_Stub.lookup(Unknown Source) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:726) ... 3 more Caused by: java.net.UnknownHostException: nomedocomputador at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.<init>(Unknown Source) at java.net.Socket.<init>(Unknown Source) at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source) at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source) ... 9 more

alguém ajuda, alguém ajuda?

T

To achando que eh algum problema nas properties do seu lookup, posta ai o codigo de lookup pra gente dar uma olhada.

M

Estou no trabalho e o código está em casa.
Quando chegar em casa faço isso logo.

Muito obrigado cara!

M

Segue aí então:

jndi.properties:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.provider.url=jnp://10.1.1.6:1099 java.naming.factory.url.pkgs=org.jnp.interfaces

Classe cliente:

public class ExecutaChamadaEJBSessionMain { public static void main(String[] args) { try { InitialContext context = new InitialContext(); EJBSessionRemote ejbSessionRemote = (EJBSessionRemote) context.lookup("EstudosEJB_EAR/EJBSessionRemoteBean/remote"); System.out.println(ejbSessionRemote.executaMensagem()); } catch (NamingException e) { e.printStackTrace(); } } }

EJB:

@Stateless public class EJBSessionRemoteBean implements EJBSessionRemote { @Override public String executaMensagem() { return "Sou a mensagem que o EJB retorna."; } }

O meu cliente é um jar.
Com esse jar, eu executo minha requisição para o EJB localmente sem problemas.
Agora não consigo executar em uma máquina remota ao servidor.
Quando executava o jboss apenas pelo “./run.sh”, só reconhecia quando executava na minha própria maquina com o jndi apontando para localhost ou 127.0.0.1.
Com o comando “./run -b 0.0.0.0” consegui executar localmente passando para o jndi o meu ip, porém remoto não funcionou.

Caso alguém saiba aí, obrigado!

T

Tenta usando as properties assim:

Hashtable env = new Hashtable();
                    env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
                    env.put(Context.PROVIDER_URL, [IP DO SEU JBOSS] + ":" + [PORTA JBOSS (geralmente 1099)]);
                    env.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");

Que erro que da exatamente?

M

Mr_Arthur:
Ressuscitado o tópico :)~.

javax.naming.CommunicationException [Root exception is java.rmi.UnknownHostException: Unknown host: nomedocomputador; nested exception is: java.net.UnknownHostException: nomedocomputador] at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:839) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:686) at javax.naming.InitialContext.lookup(Unknown Source) at br.com.arthur.desktop.session.ExecutaChamadaEJBSessionMain.main(ExecutaChamadaEJBSessionMain.java:13) Caused by: java.rmi.UnknownHostException: Unknown host: nomedocomputador; nested exception is: java.net.UnknownHostException: nomedocomputador at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source) at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source) at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source) at sun.rmi.server.UnicastRef.invoke(Unknown Source) at org.jnp.server.NamingServer_Stub.lookup(Unknown Source) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:726) ... 3 more Caused by: java.net.UnknownHostException: nomedocomputador at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.<init>(Unknown Source) at java.net.Socket.<init>(Unknown Source) at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source) at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source) ... 9 more

Galera, consegui! Ahhh finalmente :D~ só aligria.
Seguinte… que tiver passando por esse mesmo erro basta abrir o arquivo “hosts” do seu SO e mapear o host desconhecido.
ipdohost nomedohost

Exemplo:
172.18.17.2 nomedocomputador

Nuss, após isso ví o quão fácil o EJB torna para você essa comunicação remota.
uou, muito simples!

Obrigaado.

Criado 27 de fevereiro de 2008
Ultima resposta 9 de dez. de 2009
Respostas 8
Participantes 4