Você está na página 1de 28

Sistemas Distribudos

Prof Ma. Tatiana Pereira Filgueiras


Comunicao
Request/Response
Remote Procedure Call - RPC
Chamada de procedimentos que esto em
outras mquinas
Transparncia
O procedimento no pode identificar se ele
est sendo executado no mesmo
processo ou em outro;
O cliente no sabe a localizao do
servidor;
Os objetos no sabem se os eventos so
locais ou remotos.
Middleware
Stub Server
Cliente Stub

Procedure Procedure

Sistema Operacional Sistema Operacional


Remote Procedure Call - RPC
O procedimento cliente chama localmente o stub cliente;
Stub cliente constroi a mensagem e chama o SO local;
O SO local envia a mensagem ao SO remoto;
O SO Remoto entrega a mensagem ao stub servidor;
O stub servidor desempacota os parametros e chama o
procedimento servidor;
O servidor realiza o trabalho retornando o resultado ao stub;
O stub servidor empacota o resultado em uma mensagem e
chama o SO local;
O SO do servidor envia a mensagem ao SO do cliente;
O SO do cliente entrega a mensagem ao stub cliente;
O stub cliente desempacota o resultado e o retorna ao cliente.
Arquiteturas para Chamada Remota
RPC ( Remote Procedure Call)

RMI ( Remote Method Invocation )

CORBA ( Common Object Request Broker


Architeture)
Invocao de Mtodos Remotos
Invocaes Remota e Local
Chamada Remota de Mtodos
C lie n te S e rv id o r re m o to

c la s s ...{
S trin g h e llo (){
PROCESSO C h a m a d a re m o ta ...
}
}
Remote Method Invocation
Conceito RPC extendido para objetos
Um objeto pode chamar um mtodo (no
apenas um procedimento) em um objeto
remoto
Como em RPC, detalhes so escondidos
do programador (empacotamento
(marshalling), envio de mensagens,
retransmisso da requisio aps um
timeout)
Modelo de Camadas do RMI

Cliente Servidor

Stubs Stubs

Sistema Camada de Referncia Camada de Referncia


Remota Remota
RMI
Camada de Transporte
Camadas
Camada de Transporte
Configura e gerencia as conexes com
endereos remotos;
Monitora a "vivacidade" da conexo;
Ouve as chamadas recebidas;
Efetua a manuteno de uma tabela de
objetos remotos;
Configura uma conexo para uma
chamada recebida;
Localiza o destino da chamada remota e
passa a ligao a este.
Camadas
Remote Reference Layer (Camada de
Referencia Remota)
Define e suporta a semntica de invocao da
camada RMIconnection
Fornece uma RemoteRefobject que
representa o link para o objeto do
servio remoto.
Camadas
Stubs
Inicia uma chamada para o objeto remoto
(atravs da camada de referncia remota );
Empacota argumentos para um fluxo (obtido a
partir da camada de referncia remota);
Desempacota o valor de retorno ou exceo
de um fluxo;
Informa a camada de referncia remota que a
chamada for concluda.
Implementao

Client Server

Interface Implementao

RMI
Service
Implementao
Interface
Mtodos
Implementao da Interface
Uma, que implementa o servio e
interpretada no servidor;
Outra, que age como um mecanismo de
proxy e interpretada no cliente.
Implementao
Exemplo
Suponha que se queira deixar um mtodo chamado hello(),
que devolve uma String, disponibilizado para chamada
remota.

import java.rmi.*;

public interface HelloWorld extends Remote {


public String hello() throws RemoteException;
}
Exemplo
Cada classe que queira disponibilizar tal
mtodo remoto precisa implementar a
interface especificada anteriormente.
Implementao do Server
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;

public class HelloServer implements HelloWorld {


public HelloServer() {}
public String hello() throws RemoteException {
System.out.println("Executando hello()");
return "Hello!!!";
}
/*Continua*/
/* Continuao */
public static void main(String[] args) {
try {
// Instancia o objeto servidor e a sua stub
HelloServer server = new HelloServer();
HelloWorld stub = (HelloWorld) UnicastRemoteObject.exportObject(server,
0);
// Registra a stub no RMI Registry para que ela seja obtida pelos clientes
Registry registry = LocateRegistry.getRegistry();
registry.bind("Hello", stub);//cria o stub
System.out.println("Servidor pronto");
} catch (Exception ex) {
ex.printStackTrace();
}
}
Implementao do Cliente
O primeiro passo para implementar um
cliente obter o stub do servidor remoto;

A localizao do stub feita com o mtodo


lookup(endereo);

Este mtodo devolve uma referncia


remota do objeto.
Implementao do Cliente
import java.rmi.registry.*;
public class HelloClient {
public static void main(String[] args) {
String host = (args.length < 1) ? null : args[0];
try { // Obtm uma referncia para o registro do RMI
Registry registry = LocateRegistry.getRegistry(host);
// Obtm a stub do servidor
HelloWorld stub= (HelloWorld) registry.lookup("Hello");
// Chama o mtodo do servidor e imprime a mensagem
String msg = stub.hello();
System.out.println("Mensagem do Servidor: " + msg);

} catch (Exception ex) { ex.printStackTrace(); } } }


Compilao e Execuo
Toda a compilao e execuo necessita de um
ambiente dado pela seguinte seqncia:
1. Compilar o arquivo .java
2. Ativar o controlador de registros
rmiregistry -J-Djava.rmi.server.codebase=file:/caminho_das_classes/
exemplo:
rmiregistry -J-Djava.rmi.server.codebase=file:/C:/Users/Tatiana/Desktop/JAVARMI/

3. Executar o Servidor
java HelloServer
4. Executar o cliente
java HelloClient localhost
Dvidas

?
Exerccios
Calculadora Remota
A partir da interface abaixo, crie cliente e
servidor RMI
import java.rmi.*;
import java.rmi.server.*;
import java.net.*;

public interface Calculator extends Remote {


public long add(long a, long b) throws RemoteException;
public long sub(long a, long b) throws RemoteException;
public long mul(long a, long b) throws RemoteException;
public long div(long a, long b) throws RemoteException; }