Duvidas com RMI

7 respostas
antoniosales

Ola a todos,

eu consigo enviar infomação do servidor para cliente. É possivel um cliente rmi enviar uma string contendo um nome para o servidor rmi?

Grato

Antonio

7 Respostas

W

String não tenho certo mas objeto sim, não me recordo muito bem como fazer, pois faz algum tempo que não utilizo RMI, porém tenho certeza que é possivel um cliente enviar um objeto para o servidor, este objeto deve ser serializable.

W

Caro antoniosales,

Não tenho certeza, mais se me lembro é mais ou menos assim, você deve ter a mesma interface do servidor no seu cliente RMI, importante que os pacotes também tenham o mesmo nome, então você faz um lookup no IP do servidor para iniciar esta interface, depois voce faz interface.enviarObject(Object), assim o seu objeto já vai para o servidor, é só fazer o tratamento necessario

antoniosales

Sabendo que tem como, vamos atras do procedimento.

antoniosales

Teria um exemplo para ilustrar essa ideia, ta dificil de encontrar no google.

W

Caro antoniosales,

Da uma olhada neste link,
http://www.guj.com.br/posts/list/122802.java#666323

//variavel RMI
LocateRegistry registry;

//bsucando o servidor, se o serviço esta ativo ou não
registry = LocateRegistry.getRegistry(IPdoServidor, PortaDoServidor);  
   
   //Jogo é uma interface que não será implementada pelo seu cliente, apenas existirá no cliente
   // ele é iniciada através do metodo lookup em uma variavel do tipo Registry, que possui os dados do servidor
   // deve-se passar o nome do objeto RMI em instancia para efetuar a busca
   Jogo jogo;
   jogo = (Jogo) registry.lookup("jogo");  

   //após busca feita é so chamar o metodo da interface
   jogo.cadastrarJogador(jogador);

exemplo adaptado do link que te passei, porém como dito antes, não tenho certeza que seja bem assim, mas se não for é bem parecido

antoniosales

O servidor pega as informações de uma base dados coloca em ArrayList e envia para o cliente

import java.rmi.*;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.ArrayList;

public class Client {

	public static void main(String[] args) throws java.net.UnknownHostException {
            StringBuilder imprimi = new StringBuilder();
            ArrayList<String>  Dadosimpressao = new ArrayList<String>();
               try {
                        
                        Registry registry = LocateRegistry.getRegistry("192.168.0.215", 1099);
                        Interface obj = (Interface) Naming.lookup("rmi://192.168.0.215:1099/ObjetoServer");
                        ArrayList<String>  impressao = new ArrayList<String>();
                        impressao = obj.passArrayList(Dadosimpressao);
                        
                        for(int i=0; i<impressao.size(); i++){
                            imprimi.append(impressao.get(i)).append("\r\n");
                        }
                        System.out.println(imprimi);
                        
               }catch(Exception e) {
                       System.out.println("Ocorreu uma exceção");
                       System.out.println (java.net.InetAddress.getLocalHost() );
                       e.printStackTrace();
               }
        }
}

Aqui é o metodo main do servidor

public static void main(String[] args) throws ClassNotFoundException, SQLException {

         Registry registry = null;

         try {

             registry = LocateRegistry.createRegistry(1099);

            } catch (RemoteException e) {

                 try {
                     registry = LocateRegistry.getRegistry();
                 } catch (RemoteException e2) {

                     System.err.println("Registro não pode ser inicializado");
                     System.exit(0);
                 }
            }

               try {
                       System.setProperty( "java.rmi.server.hostname", "192.168.0.215" );
                       ServerImpl obj = new ServerImpl("ObjetoServer");
                       registry.bind("ObjetoServer", obj);
                       System.out.println("ServidorRMI foi criado e registrado");
               }

               catch(Exception e) {
                       System.out.println("Ocorreu uma exceção no servidor");
                       e.printStackTrace();
               }
        }
W

Caro antoniosales,

A ideia esta certa, porém acredito que no metodo

Naming.lookup("rmi://192.168.0.215:1099/ObjetoServer");

Se me lembro voce deve passar apenas o nome do objeto sem o ip do server, assim

Naming.lookup("ObjetoServer");

se estiver dando algum erro posta o erro ai para tentar te ajudar

Criado 29 de setembro de 2010
Ultima resposta 29 de set. de 2010
Respostas 7
Participantes 2