RMI: Separar Cliente e Servidor?

5 respostas
E

OLá Galera, beleza?

É o seguinte tenho um projeto onde tenho um cliente e um servidor rmi no mesmo pacote, mas quando tento separar para colocar em maquinas separadas acotecem varios erros…

Alguem sabe passo a passo o que fazer para separar cliente e servidor?

Muito Obrigado, Ednardo.

5 Respostas

_fs

Você está apontando para o ip e porta corretos?

E

Cara esta sim…mas não entendo bem os procedimentos de separação, podem ser feitos pelo netbeans???

_fs

Não entendi “procedimentos de separação”.

Bom, vou listar aqui o que você necessita para, a partir de uma classe cliente, acessar um método numa pacote servidor:

Pacote servidor:
    - Interface:
        - declara o método a ser chamado pelo cliente. 
        - extende a superclasse Remote.

    - Classe que faz o trabalho todo
        - extende a superclasse UnicastRemoteObject 
        - implementa a interface que você criou
        - ao instanciar um objeto desta classe (neste caso no método main), você tem que vincula-lo ao rmiregistry. Exemplo

        MinhaClasseCompartilhada classe = new MinhaClasseCompartilhada;
        String serverName = "//localhost/MinhaClasseCompartilhada";
        Naming.rebind( serverName, classe );

Classe cliente:
    - para acessar o método da classe server, faça o seguinte:

        String serverName = "//ipdamaquinaAlvo/MinhaClasseCompartilhada";
        MinhaInterface minhaInterface = ( MinhaInterface ) Naming.lookup( serverName );

        - agora é  brincar. Todos os métodos compartilhados estarão disponíveis como métodos da instancia de MinhaInterface
E
"LIPE":
Não entendi "procedimentos de separação".

Bom, vou listar aqui o que você necessita para, a partir de uma classe cliente, acessar um método numa pacote servidor:

Pacote servidor:
    - Interface:
        - declara o método a ser chamado pelo cliente. 
        - extende a superclasse Remote.

    - Classe que faz o trabalho todo
        - extende a superclasse UnicastRemoteObject 
        - implementa a interface que você criou
        - ao instanciar um objeto desta classe (neste caso no método main), você tem que vincula-lo ao rmiregistry. Exemplo

        MinhaClasseCompartilhada classe = new MinhaClasseCompartilhada;
        String serverName = "//localhost/MinhaClasseCompartilhada";
        Naming.rebind( serverName, classe );

Classe cliente:
    - para acessar o método da classe server, faça o seguinte:

        String serverName = "//ipdamaquinaAlvo/MinhaClasseCompartilhada";
        MinhaInterface minhaInterface = ( MinhaInterface ) Naming.lookup( serverName );

        - agora é  brincar. Todos os métodos compartilhados estarão disponíveis como métodos da instancia de MinhaInterface

Blz...é isso mesmo e como que coloco o cliente em um computador e o servidor em outro?? E outra como faço para vincular no rmiregistry???

_fs

A vinculação se da como no exemplo que eu coloquei. Novamente:

MinhaClasseCompartilhada classe = new MinhaClasseCompartilhada; 
String serverName = "//localhost/MinhaClasseCompartilhada"; 
Naming.rebind( serverName, classe );

E para colocar um em cada computador é só distribuir cada pacote normalmente e executa-los, seja la em qual computador for oras.

Para saber mais sobre distribuição, leia o tópico fixo no forum java basico :smiley:

Criado 27 de abril de 2004
Ultima resposta 27 de abr. de 2004
Respostas 5
Participantes 2