Escolar Documentos
Profissional Documentos
Cultura Documentos
Fundamentos de
Objetos Remotos
Helder da Rocha
www.argonavis.com.br
Objetos remotos abstraem toda a complexidade da Objetos Proxies comunicao em rede remotos locais
Estende o paradigma OO alm do domnio local Torna a rede transparente
Cliente Rede
Java
Java RMI JRMP
As duas solues diferem principalmente na forma de implementao Em ambas, um programa cliente poder chamar um mtodo em um objeto remoto da mesma maneira como faz com um mtodo de um objeto local
Java
RMI-IIOP RMI-JRMP JRMP
IIOP
RMI sobre IIOP permite programao Java RMI e comunicao em CORBA, viabilizando integrao entre Java e outras linguagens sem a necessidade de aprender OMG IDL
Arquitetura RMI
Uma aplicao distribuda com RMI tem acesso transparente ao objeto remoto atravs de sua Interface Remota
A "Interface Remota" uma interface que estende java.rmi.Remote A partir da Interface Remota e implementao do objeto remoto o sistema gera objetos (proxies) que realizam todas as tarefas necessrias para viabilizar a comunicao em rede
Objeto remoto RMIClient
Comunicao aparente
HelloImpl
Skeleton HelloImpl_Skel
Isto deve ser feito para cada objeto que ser acessvel atravs da rede.
import java.rmi.*; public interface Mensagem extends Remote { public String getMensagem() throws RemoteException; public void setMensagem(String msg) throws RemoteException; }
10
11
3. Estabelecer um servidor
Crie uma classe que
a) Crie uma instncia do objeto a ser servido e b) Registre-a (bind ou rebind) no servio de nomes.
import java.rmi.*; public class MensagemServer { public static void main(String[] args) throws RemoteException { Mensagem mens = new MensagemImpl(); Naming.rebind("mensagens", mens); System.out.println("Servidor no ar. "+ " Nome do objeto servido: '" + "mensagens" +"'"); } }
12
13
e um arquivo skeleton
MensagemImpl_skel.class
para cada objeto remoto (neste caso, apenas um) RMIC = RMI Compiler
Use opo -keep se quiser manter cdigo-fonte Execute o rmic sobre as implementaes do objeto remoto j compiladas:
> rmic MensagemImpl
14
15
16
No Unix
> rmiregistry &
Neste exemplo ser preciso iniciar o RMIRegistry no diretrio onde esto os stubs e interface Remote
Isto para que o RMIRegistry veja o mesmo CLASSPATH que o resto da aplicao Em aplicaes RMI reais isto no necessrio, mas preciso definir a propriedade java.rmi.server.codebase contendo os caminhos onde se pode localizar o cdigo
17
Neste exemplo ser preciso iniciar o servidor no diretrio onde esto os stubs e interface Remote
Isto para que o RMIRegistry veja o mesmo CLASSPATH que o resto da aplicao Em aplicaes RMI reais isto no necessrio, mas preciso definir a propriedade java.rmi.server.codebase contendo os caminhos onde se pode localizar o cdigo
18
Exerccio
Implemente os exemplos mostrados, inventando uma mensagem diferente para seu objeto remoto. Use o seu cliente para acessar os objetos remotos registrados nas mquinas de seus colegas.
19
Resumo
java.rmi.Remote
extends interface Mensagem extends Remote{ void getMensagem() throws RemoteException; }
Mensagem.java
java.rmi.server.UnicastRemoteObject
implements extends Mensagem.java
2
MensagemImpl.java MensagemImpl_Skel MensagemImpl_Stub
MensagemServer.java
Stub
Skel
3 6
Java compiler
RMIC
MensagemClient
lookup()
RMIRegistry
bind()
MensagemImpl_Stub
JRMP
MensagemImpl_Skel
20
argonavis.com.br
21