Você está na página 1de 5

1

Chamadas Remotas de
Procedimentos (RPC)
Chamada Remota de Procedimento (RPC)
ou Chamada de Funo ou Chamada de
Subrotina
Mtodo de transferncia de controle de
parte de um processo para outra parte
Procedimentos => permite a diviso do
programas em vrios pedaos
O Conceito de Procedimentos
main
proc1
proc5
proc2 proc3 proc4
proc6
proc8
proc7
- 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 Distribudo
- A di viso ocorre entre o programa principal e o procedimento 4.
- Um protocolo de comunicao necessrio para implementar a chamada remota.
main
proc1
proc5
proc2 proc3 proc4
proc6
proc8
proc7
Computador 1 Computador 2
RPC: Modelo de Execuo
Programa Principal Procedimento A
na mquina 1 na mquina 2
(cliente) (servidor)
chamada remota
proc. A
Sada Resposta
O processo cliente fica bloqueado durante a
execuo do procedimento remoto!
RPC
Objetivo: Tornar mais fcil aimplementao deAplicaes Distribudas
Esconde o cdigo de chamadas a rede emprocedimentos chamados
stubs
Stubs ->procedimentos quecontmo cdigo dechamadas arede.
Comstubs o RPC protege os programas de aplicao (cliente e
servidor) depreocupaes comdetalhes como sockets.
O RPC inclui uma especificao para formato padro dos dados
(visando interoperabilidade), e nos stubs acontece a converso dos
dados
No RPC da Sun o padro para a representao dos dados o
XDR (eXternal Data Representation Standard)
Os stubs so gerados automaticamente por algum compilador.
Exemplo: O RPCGendaSun
Passos de uma Chamada Remota
de Procedimentos
transporte de mensagens via rede
Cliente
Empacota
Parmetros
Desempacota
Resultado
Mquina do Cliente
Stub do Cliente
KERNEL
Servidor
Empacota
Resultados
Desempacota
Parmetros
Mquina do Servidor
Stub do Servidor
KERNEL transporte de mensagens via rede
2
Chamadas Remotas de
Procedimentos (RPC)
Idia do modelo estender o conceito de chamada de
procedimento convencional para ambientes distribudos.
a nfase emdistribuio e no emconcorrncia!
objetivo simplificar a programao distribuda,
tornando-a semelhante programao convencional!
Remote Procedure Call (RPC): subrotina chamada pode
ser funo ou procedimento
Procedimentos =>permitema diviso do programas em
vrios pedaos que podem executar em mquinas
arbitrrias.
Semntica de Chamadas
Remotas
Ao contrrio do que acontece emchamadas convencionais,
uma das mquinas envolvidas pode falhar e a outra
permanecer ativa...
Sistema pode garantir que a execuo da rotina chamada
ocorre:
exatamente uma vez
difcil!!
no mnimo uma vez
operaes devemser idempotentes!
no mximo uma vez
Sistema deve retornar indicaes no caso de mquina
servidora falhar!
RPC - Implementao
O cdigo das chamadas a rede escondido em
procedimentos chamados stubs
Stubs -> procedimentos que contm o cdigo de
chamadas a rede.
Comstubs o RPC protege os programas de aplicao
(cliente e servidor) de preocupaes comdetalhes como
sockets.
Cabe aos stubs a passagem de parmetros entre
procedimentos.
Mquinas diferentes podem usar representaes
diferentes de dados como inteiros, caracteres, etc.
O que fazer comdados complexos, como listas, etc?
RMI
Remote Method Invocation
Java RMI
J ava Remote Method Invocation (RMI) um
protocoloJ ava paracomunicaoentreprocessos
Permite objetos J ava invocar transparentemente
mtodos de outros objetos (que podemestar em
mquinasdiferentes objetosremotos)
J ava RMI libera o programador de tratar de
detalhes como endereamento e codificao/
decodificaode mensagens
Chamadas Remotas de
Procedimentos (RPC)
RMI consiste em chamada remota de
procedimentos em J ava (onde as operaes so
representadas por mtodos)
Chamada Remota de Procedimento (RPC) ou
Invocao Remota de Mtodo (RMI) ou Chamada
Remota de Funo
Mtodo de transferncia de controle de parte de
um processo para outra parte
Modelo de RPC derivado da Chamada de
Procedimentos Convencionais
3
RPC - Implementao
Stubsdo lado do cliente: Stubs
Stubsdo lado do servidor: Skeleton
Servidor
Skeleton
Referncia Remota
Protocolo deREDE
Cliente
Stubs
Referncia Remota
Protocolo deREDE
Compilador rmic
O compilador rmic
recebecomoentradaa descriodos mtodosremotos
geradoisarquivos: Stub e Skeleton.
rmic
Skeleton
(servidor)
Stub
(cliente)
Descrio dos
Mtodos remotos
Localizao de Objetos Remotos
Seria impraticvel se para cada invocao
de mtodoremotofosse necessrioincluir o
par (mquina,porta) paraidentificar ondese
encontrao objetoquecontmo mtodo
RMI oferece um Servio de Nomes (RMI
Registry) que oferece informaes sobre a
localizaode objetosremotos.
o rmiregistry executa em um endereo
bemconhecido.
RMI Registry
(nome,ender)
Naming.lookup(uri://sol.dimap.ufrn.br/servobjA)
ref_obj
rmi registry Cliente
Servidor
Nami ng. bi nd( ser vobj A,
r ef _obj ) ;
ref_obj:metodo()
Programao com RMI
O modeloRMI:
O servidor define objetos que o cliente pode
usar remotamente
Os clientes podem invocar mtodos nesse
objetoremotocomose eleestivesseexecutando
localmente.
RMI esconde o mecanismo subjacente de
transporte, via rede, de argumentos dos
mtodose valoresde retorno.
Programao com RMI
Definaumainterface quedeclaraos mtodos
remotos
O programaservidor
deve incluir uma class that implementa essa
interface.
devecriar umobjeto remoto e registr-lo no servio de
nomes(rmi register)
O programacliente
deveperguntar ao servio de nomes pelarefernciado
objetoremoto.
deve invocar o mtodo sobre o objeto remoto
4
Interface
Similar a classe
No h implementao, apenas declarao
de mtodos
Tudo pblico
umaAPI quepodeser implementadapor
umaclasse
public interface HelloWorld{
public string hello();
}
public interface BDados{
public string ler();
public void escreve(string);
}
Servidor
Interface com mtodos remotos
A interface definida pelo servidor deve
declarar que os mtodos da interface sero
invocadospor clientesremotos
A interface deve estender a interface J ava
Remote queo pacotejava.rmi oferece
import java.rmi.*
public interface HelloWorld extends Remote{
public string hello() throws RemoteException;
}
Indicaque
ainterface
remota
Necessriapara
Sinalizar errosda
Chamadaremota
Servidor
Implementao da Classe
Criar uma classe que implementa a interface. A
classe deve estender
UnicastRemoteObject
*
O cdigomain() deve:
Criar um objetoremoto
Registrar esseobjetono serviode Nomes
A classe precisa definir um construtor para
RemoteException !
A classe ser usada pelo compilador rmic para
criar o cdigodo stub e do skeleton.
Servidor
Implementao 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 servio de nomes
Naming.bind(HelloWorldServer, obj);
} catch (RemoteException e) {
System.out.println(ERRO)
}
}
}
Gerando Stubs e Skeletons
Compile a interface remotae a implementao:
> javac HelloWorld.java HelloWorldImpl.java
Use rmic para gerar HelloWorldImpl_stub.class,
HelloWorldImpl_skel.class
> rmic HelloWorldImpl
Cliente
O cliente precisa obter, do servio de
nomes, a refernciaparao objetoremoto
O servio de nomes usa URLs para
identificar objetosremotos.
5
Cliente
Implementao
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 mtodo hello do servidor remoto
mensagem = obj:hello()
} catch (RemoteException e) {

}
Executando...
Inicialmentedeve-se executar o servidor de
Nomes
start rmiregistry
Emseguidadeve-se executar o servidor:
java HelloWorld
Passos do RMI
1. Defina a interface do servidor (estendendo a
interface java.rmi.remote)
2. Escrevao cdigodo servidor queimplementaa
interface (herdando da classe
java.rmi.UnicastRemoteObject)
3. Compile o servidor
Use o compilador javac paraproduzir o arquivo.class
Execute o compilador rmic paraobter o stub e skeleton
4. Execute o programaservidor (o rmiregister tem
de estar executandoantes)
5. Execute o cliente
RMI
Interface Remota
Implementaao
stub skeleton
Desenvolvimento
Execuo
Cliente Servidor stub skeleton
rede
RMI
Implementa uma idia elementar de
Sistema baseado em Middleware
RMI

Você também pode gostar