Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Aula 05 – Comunicação em Sistemas Distribuídos
Java RMI – Parte 2
Prof. Julio Cezar Estrella
jcezar@icmc.usp.br
Créditos
22º Semestre de 2013
Os slides integrantes deste 
material foram construídos a 
partir dos conteúdos 
relacionados às referências 
bibliográficas descritas neste 
documento
Visão Geral da Aula de Hoje 
32º Semestre de 2013
REMOTE 
METHOD 
INVOCATION 
(RMI)
42º Semestre de 2013
 Introdução
2º Semestre de 2013 5
Existem algumas arquiteturas 
destinadas para
chamada remota de métodos:
• RPC ( Remote Procedure Call)
• CORBA ( Common Object Request 
Broker Architeture)
• JAVA RMI ( Remote Method 
Invocation ) 
 Introdução
2º Semestre de 2013 6
RPC
•Serviço muito utilizado em sistemas 
operacionais distribuídos para 
chamada remota de procedimentos.
•Estes procedimentos, 
normalmente, envolvem serviços 
disponibilizados em redes, tais como 
acesso a DNS, gerenciamento 
remoto, etc.
 Introdução
2º Semestre de 2013 7
RPC
• RPC não precisa, necessariamente, 
envolver estruturação em termos de 
objetos.
• Como em CORBA e RMI, existe a 
necessidade de se trabalhar com 
interfaces remotas denominadas 
STUBS. Tanto o cliente quanto o 
servidor necessitam de um Runtime 
para processamento da RPC.
 Introdução
2º Semestre de 2013 8
CORBA
• CORBA é uma arquitetura para 
acesso a objetos distribuídos que 
prima pela independência da 
plataforma.
• A especificação CORBA define, por 
exemplo, tipos de dados que podem 
ser mapeados para várias linguagem 
de programação, como C++, Pascal 
e Java.
 Introdução
2º Semestre de 2013 9
CORBA
• Um ponto-chave em CORBA é a 
utilização de uma IDL (Linguagem de 
Definição de Interface). Várias 
linguagens (inclusive Java) já 
disponibilizam mecanismos para 
mapeamento de IDL.
• CORBA exige uma espécie de “servidor” 
especializado chamado ORB (Object 
Request Broker). Existem alguns ORB´s 
comerciais, tais como VisiBroker e 
Orbix.
 Introdução
2º Semestre de 2013 10
• Arquitetura de acesso a objetos 
distribuídos suportada pela linguagem 
Java. 
• Em termos de complexidade de 
programação e ambiente, é muito 
simples construir aplicações RMI, 
comparando-se com RPC e CORBA.
• Em termos de ambiente, exige somente 
suporte TCP/IP e um serviço de nomes 
de objetos (rmiregistry), disponilizado 
gratuitamente com o JDK/SDK.
 Introdução
2º Semestre de 2013 11
• Na realidade, o RMI é uma interface que 
permite a intercomunicação entre 
objetos Java localizados em diferentes 
hosts. Cada objeto remoto implementa 
uma interface remota que especifica 
quais de seus métodos podem ser 
invocados remotamente pelos clientes.
• Os clientes invocam tais métodos 
exatamente como invocam métodos 
locais.
 Introdução
2º Semestre de 2013 12
• Arquitetura de acesso a objetos 
distribuídos suportada pela linguagem 
Java. 
• Em termos de complexidade de 
programação e ambiente, é muito 
simples construir aplicações RMI, 
comparando-se com RPC e CORBA.
• Em termos de ambiente, exige somente 
suporte TCP/IP e um serviço de nomes 
de objetos (rmiregistry), disponilizado 
gratuitamente com o JDK/SDK.
 Introdução
• Proposta:
– Programação distribuída com a 
mesma sintaxe e semantica usada nos 
programas Java locais;
• Mapeamento de funcionamento de 
objetos Java em uma JVM (Java 
Virtual Machine) para funcionarem 
em ambiente distribuído (múltiplas 
JVM);
2º Semestre de 2013 13
 Arquitetura RMI
• Um objeto ativo em uma máquina 
virtual Java interage com objetos de 
outras máquinas virtuais Java, 
independentemente da localização.
2º Semestre de 2013 14
 Arquitetura RMI
2º Semestre de 2013 15
 Interface para métodos 
remotos
2º Semestre de 2013 16
 Interface para métodos 
remotos
2º Semestre de 2013 17
• O primeiro passo para disponibilizar 
métodos que possam ser invocados 
remotamente consiste na preparação 
de uma interface remota com tais 
métodos.
• A construção desta interface pode ser 
feita com base na extensão da interface 
Remote do pacote java.rmi.
 Interface para métodos 
remotos
2º Semestre de 2013 18
• A arquitetura RMI suporta duas classes 
implementando a mesma interface:
– A primeira, que implementa o serviço e é 
interpretada no servidor
– A segunda, que age como um mecanismo de 
proxy e é interpretada no cliente
 Interface para métodos 
remotos
2º Semestre de 2013 19
• Um cliente faz chamadas de métodos 
ao objeto proxy, RMI envia a requisição 
à JVM remota, que executa o método.
 Interface para métodos 
remotos
2º Semestre de 2013 20
• Valores retornados pelo serviço remoto 
são enviados, inicialmente, ao objeto 
proxy, que os repassa para a aplicação 
cliente.
• Vários servidores podem implementar 
de maneira diferente a mesma interface 
de acesso ao serviço.
 Interface para métodos 
remotos
2º Semestre de 2013 21
• Cada classe que queira disponibilizar tal 
método remoto precisa implementar a 
interface especificada anteriormente. 
• Além disto, a classe precisa extender a 
classe UnicastRemoteObject, que é 
uma especialização de um servidor 
remoto ( classe RemoteServer).
Arquitetura RMI
• A arquitetura RMI oferece três camadas entre os objetos 
cliente e servidor: 
– A camada de stub/skeleton oferece as interfaces 
que os objetos da aplicação usam para interagir entre 
si; 
– A camada de referência remota é o middleware 
entre a camada de stub/skeleton e o protocolo de 
transporte. É nesta camada que são criadas e 
gerenciadas as referências remotas aos objetos; 
– A camada do protocolo de transporte oferece o 
protocolo de dados binários que envia as solicitações 
aos objetos remotos pela rede.
2º Semestre de 2013 22
ESTRUTURA 
(RMI)
232º Semestre de 2013
 Estrutura RMI
• Interface Remota
• Implementação dos serviços
• Criação de cliente RMI
• Criação de Servidor RMI
2º Semestre de 2013 24
 Interface Remota
• Mesmas especificações de uma 
interface comum
• Interface deve estender a interface 
Remote
• Todo método da interface deverá 
declarar que a exceção 
RemoteException
2º Semestre de 2013 25
 Conceitos RMI
 Interface remota
 Exemplo:
import java.rmi.*; 
public interface Count extends Remote { 
void set(int val) throws 
RemoteException;
int get() throws RemoteException;
} 
2º Semestre de 2013 26
 Implementaçao de serviços
• É preciso incluir as funcionalidades para que um 
objeto dessa classe possa ser acessado remotamente 
como um servidor.
• As funcionalidades de um servidor remoto são 
especificadas na classe abstrata RemoteServer, do 
pacote java.rmi.server.
• Uma subclasse concreta de RemoteServer oferecida 
no mesmo pacote é UnicastRemoteObject, que 
permite representar um objeto que tem uma única 
implementação em um servidor.
2º Semestre de 2013 27
 Conceitos RMI
• Implementação de serviços 
(Exemplo)
import java.rmi.*; 
import java.rmi.server.UnicastRemoteObject; 
public class CountImpl extends UnicastRemoteObject 
implements Count { 
private int sum; 
 public CountImpl() throws RemoteException { super(); }
 public void set(int val) throws RemoteException { sum = 
val; }
public int get() throws RemoteException { return sum; } 
} 
2º Semestre de 2013 28
 Criação de Cliente RMI
• O cliente RMI requer obtenção de 
uma referência remota para o 
objeto que implementa o serviço.
• Referência ocorre através do 
cadastro realizado pelo servidor. A 
operação com o objeto remoto é 
indistingüível da operação com um 
objeto local.
2º Semestre de 2013 29
 Stubs e Skels
2º Semestre de 2013 30
• O cliente, quando invoca 
remotamente um método, não 
conversa diretamente com o objeto 
remoto, mas com uma 
implementação da interface remota 
chamada stub, que é enviada ao 
cliente. O stub, por sua vez, passa a 
invocação para a camada de 
referência remota.
• Esta invocação é passada para um 
skel (esqueleto) , que se comunica 
com o programa servidor. 
 Programação do Cliente
2º Semestre de 2013 31
• O primeiro passo de implementação 
de um cliente que quer invocar 
remotamentemétodo é obter o stub 
do servidor remoto. A localização 
deste stub é feita com o método 
lookup (endereço).
• Este método devolve uma referência 
remota do objeto, através do envio 
do stub. 
 Definição Servidor
• Criar uma instância do objeto que 
implementa o serviço 
• Disponibilizar o serviço através do 
mecanismo de registro
2º Semestre de 2013 32
EXECUÇÃO 
(RMI)
332º Semestre de 2013
 Execução
• A execução da aplicação cliente-servidor em 
RMI requer:
– execução da aplicação cliente, execução da 
aplicação servidor, a execução do serviço de 
registro de RMI. 
2º Semestre de 2013 34
 Execução
• Compilar os arquivos .java
– Javac *.java
• Compilar RMI
– rmic <Classe que implementa serviços>
• Registrar RMI
– rmiregistry & // unix
– start rmiregistry // dos
2º Semestre de 2013 35
 Execução do Servidor
2º Semestre de 2013 36
• O primeiro passo antes de executar o 
servidor é ativar uma espécie de 
servidor de nomes de servidores que 
atendem solicitações de métodos 
remotos. Isto é feito chamando-se o 
programa rmiregistry. Este programa 
pode estar ouvindo portas específicas, 
como por exemplo:
 % rmiregistry 2048 &
• Uma vez que este programa está 
executando, pode-se chamar o 
interpretador java para o arquivo 
servidor.class . 
 Execução
2º Semestre de 2013 37
• Quando se passa um parâmetro para 
um método remoto, pode ocorrer 
duas situações:
– Tipos primitivos: RMI faz uma 
cópia do parâmetro e a envia para 
o servidor
– Objetos: RMI utiliza o mecanismo 
de serialização para enviar uma 
cópia do objeto para o servidor 
 Esquema da Chamada RMI
2º Semestre de 2013 38
Endereço servidor
Registry
Servidor_Stub.class
Servidor_Skel.class
Servidor..class
cliente
Stub
lookup(.../Servidor)
Servidor está aqui
Solicitação de stub
Stub
sayHello()
“Oi cliente”
 Execução
Servidor de
Objetos
Gerente de objetos e
Serviço de nomes
(rmiregistry)
Cliente
objeto
stub cliente
skeleton
2. requisita objeto
1. cria e registra
objeto
3. retorna
referência
criados pelo
compilador de
stubs (rmic)
4. comunicação
2º Semestre de 2013 39
Dúvidas
402º Semestre de 2013
Referências
• http://www.dca.fee.unicamp.br/
cursos/PooJava/objdist/javarmi.html
• http://java.sun.com/products/jdk/rmi/
reference/docs/index.html
• http://www.portaljava.com/home/
modules.php?
name=Content&pa=showpage&pid=
8
2º Semestre de 2013 41
Próxima Aula...
• Comunicação Indireta
422º Semestre de 2013
	Slide 1
	Slide 2
	Slide 3
	Slide 4
	Slide 5
	Slide 6
	Slide 7
	Slide 8
	Slide 9
	Slide 10
	Slide 11
	Slide 12
	Slide 13
	Slide 14
	Slide 15
	Slide 16
	Slide 17
	Slide 18
	Slide 19
	Slide 20
	Slide 21
	Slide 22
	Slide 23
	Slide 24
	Slide 25
	Slide 26
	Slide 27
	Slide 28
	Slide 29
	Slide 30
	Slide 31
	Slide 32
	Slide 33
	Slide 34
	Slide 35
	Slide 36
	Slide 37
	Slide 38
	Slide 39
	Slide 40
	Slide 41
	Slide 42

Mais conteúdos dessa disciplina