RMI, duvida cruel!

3 respostas
R

Bom dia feras, temos que desenvolver um RMI aqui na faculdade, meus colegas e eu estamos tentando rodar o interface remota, cliente e servidor em maquinas distintas.

Só conceguimos colocar o cliente em outra maquina, mas o servidor e interface remota está dando um bom trabalho, ja tentamos por ips, nomes, determinamos portas, portas padores, etc… mas nada deu certo.

Como fazer com que o servidor crie objetos da interface remota, sendo que esta está em outra maquina? em que diretorio o stub e skleton devem estar devidamente colocados?

Pensamos em implementar a interface remota. Por isso estou aqui pra saber se vai ser necessario ou não e como fazer.

Agradeço a todos.

3 Respostas

J

No Java 5 eu faço assim:

public interface Servidor extends Remote{
   public String ola(String nome);
}

public class ServidorImpl implements Servidor{
   public String ola(String nome){
      return "olá "+nome;
   }
}

public class Principal{
   public static void main(String[] args){
      try{
         Server stub = (Server) UnicastRemoteObject.exportObject(new ServerImpl(), 0);
         Registry registro = LocateRegistry.createRegistry(2525);

         registry.rebind("Servidor", stub);
	} catch (RemoteException re) {
	   re.printStackTrace();
        }
   }
}

public class Cliente{
   public static void main(String[] args){
      Registry registro = LocateRegistry.getRegistry("localhost", 2525);
      Servidor servidor = (Servidor) registro.lookup("Servidor");
      System.out.println(servidor.ola("Jair"));
   }
}
B

Ola,

Seguindo o exemplo do Jair, também é necessário setar uma propriedade para quando o servidor for exportar os objetos, esta propriedade é a "java.rmi.server.hostname", deve ser adicionada com o host do servidor, por exemplo:

"jairelton":
...
public class Principal{
   public static void main(String[] args){
    //esta propriedade aqui      System.setProperties("java.rmi.server.hostname","ip_ou_nome_da_maquina_do_servidor");
      try{
         Server stub = (Server) UnicastRemoteObject.exportObject(new ServerImpl(), 0);
         Registry registro = LocateRegistry.createRegistry(2525);

         registry.rebind("Servidor", stub);
	} catch (RemoteException re) {
	   re.printStackTrace();
        }
   }
}

public class Cliente{
   public static void main(String[] args){
      Registry registro = LocateRegistry.getRegistry("localhost", 2525);
      Servidor servidor = (Servidor) registro.lookup("Servidor");
      System.out.println(servidor.ola("Jair"));
   }
}
[color="red"][/color]
R

Me foi de grande ajuda.

Pelo que entendi devo ter em outras maquinas as quatro classes( Servidor, ServidorImp, Cliente e Principal ), e que somente em cada maquina estará rodando uma classe distinta ? e que atravez dos ips, ou nomes das maquinas, vou fazer a interação deles?

vlw!!!

Criado 28 de setembro de 2006
Ultima resposta 29 de set. de 2006
Respostas 3
Participantes 3