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.
No Java 5 eu faço assim:
[code]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"));
}
}[/code]
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:
[quote=“jairelton”]
[code]
…
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”));
}
}[/code][/quote][color=“red”][/color]
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!!!