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.
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
charleston10
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?
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
charleston10
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
robgeek
Sim, o método é invocado e então ele roda no servidor já que é ele quem tem a sua implementação.
C
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
importjava.rmi.Naming;importjava.rmi.RemoteException;importjava.rmi.NotBoundException;importjava.net.MalformedURLException;publicclassMensageiroClient{publicstaticvoidmain(Stringargs[]){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?Mensageirom=(Mensageiro)Naming.lookup("rmi://localhost/MensageiroService");System.out.println(m.lerMensagem());m.enviarMensagem("Hello World!");}...
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
EduSantos
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
evertonsilvagomesjav
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
importjava.rmi.Naming;importjava.rmi.RemoteException;importjava.rmi.NotBoundException;importjava.net.MalformedURLException;publicclassMensageiroClient{publicstaticvoidmain(Stringargs[]){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?Mensageirom=(Mensageiro)Naming.lookup("rmi://localhost/MensageiroService");System.out.println(m.lerMensagem());m.enviarMensagem("Hello World!");}...