Dúvida em RMI

10 respostas
C

Gente, estou estudando rmi em java, mas surgiu a seguinte dúvida.

Para eu criar um programa cliente/servidor eu tenho que criar a interface a implentação do servidor junto com o projeto do cliente;
Em todas as vídeos aulas que assisti até agora e também o material do guj ensina assim.

é um pouco estranho eu acho.

Tenho uma rede com vários computadores, quero criar uma aplicação no meu servidor e acionar esse método pelo meu cliente.
Seria inutil eu ter esse comando instalado junto com a aplicação cliente, pois essa função já estaria nele.

Como funciona esse esquema?

10 Respostas

R

Boa tarde.
Acredito que você tenha entendido errado a estrutura geral do RMI. Os materiais que tive acesso na internet não deixam claro isso mesmo.

No computador que vai rodar o servidor:
Interface
Implementação da Interface
Classe que implementa o servidor e registra o serviço.

No computador que rodará o cliente:
Classe que implementa o cliente e invoca os métodos do objeto remoto.

Para mim funcionou certinho deste modo mas não estou conseguindo fazer a comunicação entre os dois computadores por causa do security manager.
Ele não está me deixando acessar o objeto remoto ou algo do tipo enão consigo deixar o servidor no ar.

Espero ter ajudado.

C

Hunm… clareou um pouco.

No computador que rodará o cliente:
Classe que implementa o cliente e invoca os métodos do objeto remoto.

nessa citação acima, eu crio dois projetos distintos?
Um que seria a minha aplicação servidora
e a outra o cliente que vai fazer esse acesso para buscar os comandos.

E então ficaria assim:

projeto1 - servidor:
Interface
Implementação da Interface
Classe que implementa o servidor e registra o serviço.

projeto2 - cliente:
Classe que implementa o cliente e invoca os métodos do objeto remoto.

Você tem algum material que possa me enviar pra eu poder estudar?

R

Confesso que não entendi bem sua pergunta.
Material só os da internet, estou me virando com o tutorial da Oracle:
http://docs.oracle.com/javase/6/docs/technotes/guides/rmi/hello/hello-world.html

A parte que diz:
“Define the remote interface” e “Implement the server” do texto que te passei, coloque no computador que será o servidor.

A parte que diz:
“Implement the client” coloque no computador que será o cliente.

C

Seria assim, pra eu criar essa relação de Cliente/Servidor
eu crio dois programas, um que será usado no computador servidor
e outro nos computadores clientes;

o programa1 é diferente do programa dois é onde terá os códigos da
interfaceServidor
classeServidor

e o programa2 é o cliente que só vai pedir para acionar o metodo do programa1 que é o servidor

mais ou menos isso?

R

Sim, o método é invocado e então ele roda no servidor já que é ele quem tem a sua implementação.

C

Okey, agora entendi.

Surgiu uma outra dúvida, caso eu faça nesse esquema, de criar dois softwares separados, um servidor e outro cliente;

Como eu registro o servidor na aplicação cliente?

No material do guj sobre rmi, segue o seguinte código da aplicação clinte
import java.rmi.Naming;  
import java.rmi.RemoteException;  
import java.rmi.NotBoundException;  
import java.net.MalformedURLException;  
  
public class MensageiroClient {  
  
    public static void main( String args[] ) {  
        try {  

            //O meu problema vai estar aqui, pois aqui vai funcionar somente se essa classe estiver na mesma aplicação do servidor
            //pois como vou registar um objeto sendo que nao esta na mesma aplicacao?
            Mensageiro m = (Mensageiro) Naming.lookup( "rmi://localhost/MensageiroService" ); 
 
            System.out.println( m.lerMensagem() );  
            m.enviarMensagem( "Hello World!" );  
        }  

...
fonte: [url]http://www.guj.com.br/articles/37[/url]

teria alguma aplicação pequena sobre rmi dessa maneira pra passar pra mim, acho que seria mais facil,
nao iria pertubar tanto com minhas indagações
=]

E

Não tenho material nenhum, estou usando o que consigo na internet, tem um vídeo no youtube que talvez te ajude mas no vídeo o cara implementa cliente e servidor no mesmo computador, mas talvez te ajude:

Você não registra o servidor no cliente, você registra apenas o serviço no RMI Registry e o cliente invoca o serviço, que eu saiba é isso. Lembre-se do que eu disse, não sou nenhum entendido do assunto, mas estou tentando e ajudar, se por acaso eu estiver errado em alguma coisa por favor me aponte o erro para que eu possa aprender também.

t+

E
charleston10:
Okey, agora entendi.

Surgiu uma outra dúvida, caso eu faça nesse esquema, de criar dois softwares separados, um servidor e outro cliente;

Como eu registro o servidor na aplicação cliente?

No material do guj sobre rmi, segue o seguinte código da aplicação clinte
import java.rmi.Naming;  
import java.rmi.RemoteException;  
import java.rmi.NotBoundException;  
import java.net.MalformedURLException;  
  
public class MensageiroClient {  
  
    public static void main( String args[] ) {  
        try {  

            //O meu problema vai estar aqui, pois aqui vai funcionar somente se essa classe estiver na mesma aplicação do servidor
            //pois como vou registar um objeto sendo que nao esta na mesma aplicacao?
            Mensageiro m = (Mensageiro) Naming.lookup( "rmi://localhost/MensageiroService" ); 
 
            System.out.println( m.lerMensagem() );  
            m.enviarMensagem( "Hello World!" );  
        }  

...
fonte: [url]http://www.guj.com.br/articles/37[/url]

teria alguma aplicação pequena sobre rmi dessa maneira pra passar pra mim, acho que seria mais facil,
nao iria pertubar tanto com minhas indagações
=]

Qual a solução?

C

Ja consegui aqui…

;]

E

Fala a solução cara? To com o mesmo problema, nao sei como vou chamar a interface no cliente =[

Tem como me ajudar?

Criado 31 de maio de 2012
Ultima resposta 22 de set. de 2012
Respostas 10
Participantes 4