RMI - Duvida intermediária

2 respostas
T

Olá pessoal, gostaria de saber se o RMI serve para o meu problema atual.

Tenho um servidor e um cliente. Máquinas distintas e se pingam e se comunicam. Ambos são Linux.

Desenvolvi uma aplicação RMI servidor com os seguintes arquivos:

AplicacaoServer.java ( server )
Aplicacao.java (interface)
AplicaoImpl.java (implementação da interface)

Tudo foi compilado e tudo foi rodado, inclusive o RMIREGISTRY e o RMIC gerand o a classe da Implementação SKEL.

Na máquina Cliente existem os arquivos:

Aplicao.java ( Interface )

AplicaoClient.java ( cliente )

AplicaoImpl_Stub.class ( Stub do codigo Implementado )

Quando eu rodo o programa o cliente gera exception sentindo falta do arquivo AplicacaoImpl.class … Se eu copiar o arquivo AplicaoImpl.class tudo funciona normalmente…

Minha duvida: Por que motivos eu preciso desse arquivo sendo que ja estou instanciando no server e se ja tenho a interface no cliente? Nao seria essa uma das facilidades RMI ???

Será que nao é isso que eu quero ainda? Eu gostaria de implementar algumas classes apenas no servidor sem ter que ficar instalando novas versões nos clientes… Alguém da um help ?

Valeu

2 Respostas

Lucas_Castro

Olá Thiago!

O objetivo do RMI é fornecer uma forma de chamada de método remotamente, ou seja, o cliente chama um método, como se estivesse implementado localmente, sendo que este está implementado em outra máquina… tudo de forma transparente.

Para que ocorra essa chamada de método remoto é necessário que haja uma interface comum entre o cliente e o servidor, e é por isso que o arquivo que representa essa interface (o teu Aplicacao.class) deve estar tanto no cliente quanto no servidor, até mesmo porque sua classe AplicaçãoClient deve fazer alguma referência a esta interface. No cliente você não vai implementar as classes, apenas no servidor.

Te ajudei?

Lucas

T

Oi Lucas, muito obrigado por responder !

Na verdade a minha dúvida é exatamente o por que de estar pedindo o método implementado no cliente.

A classe cliente, gera um exception retratando a necessidade da classe implementada. É isso que nao entendi… Já que a interface está lá.
Talvez eu tenha feito algo errado, mas mesmo com os exemplos do tutorial disponibilizado aqui no GUJ nao funciona.

Muito obrigado mesmo assim…

Criado 21 de julho de 2005
Ultima resposta 25 de jul. de 2005
Respostas 2
Participantes 2