RMI: Separar Cliente e Servidor?

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.

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

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

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 é só brincar. Todos os métodos compartilhados estarão disponíveis como métodos da instancia de MinhaInterface

[quote=“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:

[code]
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 é só brincar. Todos os métodos compartilhados estarão disponíveis como métodos da instancia de MinhaInterface

[/code][/quote]

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???

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: