Ola a todos,
É o seguinte não estou conseguindo fazer um acesso atraves de RMI, seguir esse tutorial: http://www.devmedia.com.br/articles/viewcomp.asp?comp=4493, quando executo os arquivo no mesmo diretorio e no mesmo computador não da erro.
O problema é quando envio o arquivo HelloImpl.class e Hello.class para o servidor, (eu tenho todas as permissões no servidor), lá o processo é executado, mas no cliente aparece o seguinte erro:
java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:
java.net.ConnectException: Connection refused: connect
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 java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source)
at $Proxy0.sayHello(Unknown Source)
at remoto.HelloClient.main(HelloClient.java:20)
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 sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source)
... 8 more
Abaixo segue os codigos:
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
public class HelloImpl extends UnicastRemoteObject implements Hello{
private String nome;
public HelloImpl(String s) throws java.rmi.RemoteException {
super();
nome = s;
}
public String sayHello() throws RemoteException {
return "Estamos funcionando !!!";
}
public static void main(String[] args) {
//System.setSecurityManager(new RMISecurityManager());
Registry registry = null;
/* inicia rmi */
try {
/* tenta iniciar o registro */
registry = LocateRegistry.createRegistry(1099);
} catch (RemoteException e) {
/* se não conseguiu criar vê se está rodando */
try {
registry = LocateRegistry.getRegistry();
} catch (RemoteException e2) {
/* não conseguiu nem criar e nem há rodando, sai do programa */
System.err.println("Registro não pode ser inicializado");
System.exit(0);
}
}
try {
HelloImpl obj = new HelloImpl("HelloServer");
Naming.rebind("HelloServer", (Remote) obj);
System.out.println("HelloImpl foi criado e registrado");
}
catch(Exception e) {
System.out.println("Ocorreu uma exceção no servidor");
e.printStackTrace();
}
}
}
public interface Hello extends java.rmi.Remote {
String sayHello() throws java.rmi.RemoteException;
}
import java.rmi.*;
public class HelloClient{
public HelloClient(){
}
public static void main(String[] args) {
String mensagem = "";
try {
Hello obj = (Hello) Naming.lookup("rmi://192.168.0.215:1099/HelloServer" );
mensagem = obj.sayHello();
System.out.println(mensagem);
}catch(Exception e) {
System.out.println("Ocorreu uma exceção");
e.printStackTrace();
}
}
}
Agradeço antecipadamente quem puder me ajudar.
Antonio