Buscar

RPC-RMI


Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 5 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Continue navegando


Prévia do material em texto

1
Chamadas Remotas de 
Procedimentos (RPC)
• Chamada Remota de Procedimento (RPC) 
ou Chamada de Função ou Chamada de 
Subrotina
• Método de transferência de controle de 
parte de um processo para outra parte
• Procedimentos => permite a divisão do 
programas em vários pedaços
O Conceito de Procedimentos
main
proc1
proc5
proc2 proc3 proc4
proc6 proc8proc7
- Um programa convencional consiste de um ou mais procedimentos, geralmente organi-
zados em uma hierarquia de chamadas.
- Uma seta de um procedimento n para um procedimento m significa uma chamada de n
para m
RPC: Programa Distribuído
- A divisão ocorre entre o programa principal e o procedimento 4.
- Um protocolo de comunicação é necessário para implementar a chamada remota.
main
proc1
proc5
proc2 proc3 proc4
proc6 proc8proc7
Computador 1 Computador 2
RPC: Modelo de Execução
 P rograma Principal P rocedimento A
 na máquina 1 na máquina 2
 (cliente) (servidor)
 chamada remota
 proc. A
 Saída R esposta
• O processo cliente fica bloqueado durante a 
execução do procedimento remoto!
RPC
• Objetivo: Tornar mais fácil a implementação de Aplicações Distribuídas
• Esconde o código de chamadas a rede em procedimentos chamados 
stubs
– Stubs -> procedimentos que contêm o código de chamadas a rede.
– Com stubs o RPC protege os programas de aplicação (cliente e 
servidor) de preocupações com detalhes como sockets.
– O RPC inclui uma especificação para formato padrão dos dados 
(visando interoperabilidade), e nos stubs acontece a conversão dos 
dados
• No RPC da Sun o padrão para a representação dos dados é o 
XDR (eXternal Data Representation Standard)
– Os stubs são gerados automaticamente por algum compilador. 
Exemplo: O RPCGen da Sun
Passos de uma Chamada Remota 
de Procedimentos
transporte de mensagens via rede
Cliente
Empacota 
Parâmetros
Desempacota 
Resultado
Máquina do Cliente
Stub do Cliente
KERNEL
Servidor
Empacota 
Resultados
Desempacota 
Parâmetros
Máquina do Servidor
Stub do Servidor
KERNELtransporte de mensagens via rede
2
Chamadas Remotas de 
Procedimentos (RPC)
• Idéia do modelo é estender o conceito de chamada de 
procedimento convencional para ambientes distribuídos.
– a ênfase é em distribuição e não em concorrência!
– objetivo é simplificar a programação distribuída, 
tornando-a semelhante à programação convencional!
• Remote Procedure Call (RPC): subrotina chamada pode 
ser função ou procedimento
• Procedimentos => permitem a divisão do programas em 
vários pedaços que podem executar em máquinas 
arbitrárias.
Semântica de Chamadas 
Remotas
• Ao contrário do que acontece em chamadas convencionais, 
uma das máquinas envolvidas pode falhar e a outra 
permanecer ativa...
• Sistema pode garantir que a execução da rotina chamada 
ocorre:
– exatamente uma vez 
• difícil!!
– no mínimo uma vez
• operações devem ser idempotentes!
– no máximo uma vez
• Sistema deve retornar indicações no caso de máquina 
servidora falhar!
RPC - Implementação
• O código das chamadas a rede é escondido em 
procedimentos chamados stubs
– Stubs -> procedimentos que contêm o código de 
chamadas a rede.
– Com stubs o RPC protege os programas de aplicação 
(cliente e servidor) de preocupações com detalhes como 
sockets.
• Cabe aos stubs a passagem de parâmetros entre 
procedimentos.
– Máquinas diferentes podem usar representações 
diferentes de dados como inteiros, caracteres, etc.
– O que fazer com dados complexos, como listas, etc?
RMI
Remote Method Invocation
Java RMI
• Java Remote Method Invocation (RMI) é um 
protocolo Java para comunicação entre processos
• Permite objetos Java invocar transparentemente
métodos de outros objetos (que podem estar em
máquinas diferentes – objetos remotos) 
• Java RMI libera o programador de tratar de 
detalhes como endereçamento e codificação/ 
decodificação de mensagens
Chamadas Remotas de 
Procedimentos (RPC)
• RMI consiste em chamada remota de 
procedimentos em Java (onde as operações são 
representadas por métodos)
• Chamada Remota de Procedimento (RPC) ou 
Invocação Remota de Método (RMI) ou Chamada 
Remota de Função 
• Método de transferência de controle de parte de 
um processo para outra parte
• Modelo de RPC é derivado da Chamada de 
Procedimentos Convencionais
3
RPC - Implementação
• Stubs do lado do cliente: Stubs
• Stubs do lado do servidor: Skeleton
Servidor
Skeleton
Referência Remota
Protocolo deREDE
Cliente
Stubs
Referência Remota
Protocolo deREDE
Compilador rmic
• O compilador rmic
– recebe como entrada a descrição dos métodos remotos
– gera dois arquivos: Stub e Skeleton.
rmic
Skeleton
(servidor)
Stub
(cliente)
Descrição dos
Métodos remotos
Localização de Objetos Remotos
• Seria impraticável se para cada invocação
de método remoto fosse necessário incluir o 
par (máquina,porta) para identificar onde se 
encontra o objeto que contém o método
• RMI oferece um Serviço de Nomes (RMI 
Registry) que oferece informações sobre a 
localização de objetos remotos. 
– o rmiregistry executa em um endereço
bem conhecido.
RMI Registry
(nome,ender)
Naming.lookup(“uri://sol.dimap.ufrn.br/servobjA”)
ref_obj
rmi registryCliente
Servidor
Naming.bind(“servobjA”, 
ref_obj);
ref_obj:metodo()
Programação com RMI
• O modelo RMI: 
– O servidor define objetos que o cliente pode
usar remotamente
– Os clientes podem invocar métodos nesse
objeto remoto como se ele estivesse executando
localmente. 
– RMI esconde o mecanismo subjacente de 
transporte, via rede, de argumentos dos 
métodos e valores de retorno. 
Programação com RMI
• Defina uma interface que declara os métodos
remotos
• O programa servidor
– deve incluir uma class that implementa essa
interface.
– deve criar um objeto remoto e registrá-lo no serviço de 
nomes (rmi register)
• O programa cliente
– deve perguntar ao serviço de nomes pela referência do 
objeto remoto.
– deve invocar o método sobre o objeto remoto
4
Interface
• Similar a classe
• Não há implementação, apenas declaração
de métodos
• Tudo é público
• É uma API que pode ser implementada por
uma classe
public interface HelloWorld{
public string hello();
}
public interface BDados{
public string ler();
public void escreve(string);
}
Servidor
Interface com métodos remotos
• A interface definida pelo servidor deve
declarar que os métodos da interface serão
invocados por clientes remotos
– A interface deve estender a interface Java 
Remote que o pacote java.rmi oferece
import java.rmi.*
public interface HelloWorld extends Remote{
public string hello() throws RemoteException;
}
Indica que 
a interface 
é remota
Necessária para 
Sinalizar erros da 
Chamada remota
Servidor
Implementação da Classe
• Criar uma classe que implementa a interface. A 
classe deve estender
UnicastRemoteObject*
• O código main() deve:
– Criar um objeto remoto
– Registrar esse objeto no serviço de Nomes
• A classe precisa definir um construtor para
RemoteException !
• A classe será usada pelo compilador rmic para
criar o código do stub e do skeleton.
Servidor 
Implementação da Classe
import java.rmi.*
import java.rmi.server.*
public class HelloWorldImpl extends UnicastRemoteObject
implements HelloWorld{
public HelloWorldImpl() throws RemoteException
{ …. }
public string hello() {
return “==== Hello World!!!==== “;
}
public static void main (String args[]) {
try {
// criando o objeto remoto
HelloWorldImpl obj = new HelloWorldImpl();
// registrando esse objeto no serviço de nomes
Naming.bind(“HelloWorldServer”, obj);
} catch (RemoteException e) { 
System.out.println(“ERRO”)
}
}
}
Gerando Stubs e Skeletons
• Compile a interface remota e a implementação:
> javac HelloWorld.java HelloWorldImpl.java
• Use rmic para gerar HelloWorldImpl_stub.class,
HelloWorldImpl_skel.class
> rmic HelloWorldImpl
Cliente
• O cliente precisa obter, do serviço de 
nomes,a referência para o objeto remoto
• O serviço de nomes usa URLs para
identificar objetos remotos.
5
Cliente
Implementação
import java.rmi.*
try {
// recuperando o objeto remoto via o servidor de nomes
Object obj= Naming.lookup(“uri://pontanegra.dimap.ufrn.br
“ /HelloWorldServer);
// invocando o método hello do servidor remoto
mensagem = obj:hello()
} catch (RemoteException e) { 
…
}
Executando...
• Inicialmente deve-se executar o servidor de 
Nomes
start rmiregistry
• Em seguida deve-se executar o servidor:
java HelloWorld
Passos do RMI
• 1. Defina a interface do servidor (estendendo a 
interface java.rmi.remote) 
• 2. Escreva o código do servidor que implementa a 
interface (herdando da classe
java.rmi.UnicastRemoteObject)
• 3. Compile o servidor
– Use o compilador javac para produzir o arquivo .class
– Execute o compilador rmic para obter o stub e skeleton 
• 4. Execute o programa servidor (o rmiregister tem 
de estar executando antes)
• 5. Execute o cliente
RMI
Interface Remota
Implementaçao
stub skeleton
Desenvolvimento
Execução
Cliente Servidorstub skeletonrede
RMI
• Implementa uma idéia “elementar” de 
Sistema baseado em Middleware
RMI