Sei sulla pagina 1di 9

Sumrio

PR

1. Conceitos Bsicos

UNIVERS IDADE TECNOLGICA FEDERAL DO PARAN

a. Invocao remota (RPC/RMI)


b. Semntica de invocao remota
c. Invocao remota de mtodos (RMI)

COMUNICAO INTER-PROCESSOS
JAVA RMI e RPC

2. Implementaes de RMI/RPC
a.
b.
c.
d.
e.

Prof. Cesar Augusto Tacla


http://www.dainf.ct.utfpr.edu.br/~tacla

11

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

CORBA
JRMI
Referncia a objeto remoto
Formato da mensagem de REQUEST-REPLY
Protocolo REQUEST-REPLY

22

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

Sumrio

Sumrio

1a

CONCEITOS BSICOS

Invocao remota (RPC/RMI)

33

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

44

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

COMUNICAO INTERPROCESSOS DISTRIBUDOS

MIDDLEWARE
RMI (JRMI), RPC, CORBA

Modelos de invocao de operaes remotas baseiam-se nos modelos locais:

Procedural: Chamada de funes chamada remota de funes (RPC)

OO: Invocao de mtodos invocao remota de mtodos (RMI)

 provm transparncia de localizao

Invocao transparente de procedure/mtodo


r
Invoca

funo

odo
ou mt

 Transparente at certo ponto,


semntica invocao remota local

Processo

Processo

APLICAO
APLICAODISTRIBUDA
DISTRIBUDA
sockets

MIDDLEWARE
MIDDLEWARE

Invocar funo ou mtodo


Processo

Processo

PROTOCOLOS
PROTOCOLOS
SIST.
SIST.OPER.
OPER.

PROTOCOLOS
PROTOCOLOS
SIST.
SIST.OPER.
OPER.

HARDWARE
HARDWARE

HARDWARE
HARDWARE

RMI
RPC
CORBA
PLATAFORMA

Quem garante esta transparncia?


Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

55

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

66

Sumrio

SEMNTICA DA INVOCAO REMOTA


Invocaes remotas podem falhar!

1b

Opes de tratamento

Retransmitir Filtrar requests


Request
Duplicados

Semntica de invocao remota (RPC/RMI)

Re-executar ou
retransmitir
resp.

Exceo

OK

UM TIRO

NO

--x--

--x--

0 ou 1

PELO -1

SIM

NO

RE-EXECUTAR

0 ou +

1 ou +

MX 1

SIM

SIM

RETRANSMITIR

0 ou 1

A coluna semntica devem ser interpretada do seguinte modo:


Exceo: ao receber um erro, o mtodo invocado foi executado ... vez(es)
OK
: ao receber um ok, o mtodo invocado foi executado ... vez(es)

pular

77

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

88

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

SEMNTICA DA INVOCAO REMOTA

SEMNTICA DA INVOCAO REMOTA


PELO MENOS UMA (1 ou +)
 Ao receber uma resposta, o invocador sabe que o mtodo remoto foi executado ao
menos uma vez, pois:

UM TIRO
 Ao receber uma resposta, o invocador tem certeza que o mtodo
remoto foi executado somente uma vez
 Ao receber exceo (resposta no chegou, logo timeout), o
invocador no saber se o mtodo foi executado ou no, pois:

 Falha do canal de comunicao


 Request chega, servidor executa o mtodo e envia resposta.
 Resposta no chega, request retransmitido
 Servidor executa o mtodo e envia resposta, ... at que a resposta chegue! (1 ou +)

 Ao receber exceo, o invocador no saber se o mtodo foi executado ou no,


pois:

 Falha do servidor
 Request chega, mas servidor cai antes ou durante a execuo do
mtodo (0)
 Request chega, servidor executa o mtodo e falha em seguida (1)

 Falha do servidor
 Request chega, mas servidor cai antes ou durante a execuo do mtodo,
retransmisses do request, ..., exceo! (0)
 Request chega, servidor executa o mtodo e falha em seguida, retransmisses do
request, ..., exceo! (1)

 Falha no canal de comunicao

 Falha no canal de comunicao

 Request no chega no servidor (0)


 Resposta no chega: servidor executa o mtodo, envia resposta,
mas resposta no chega no cliente ou chega depois do timeout (1)

 Request no chega no servidor, retransmisses do request, ..., exceo! (0)


 Resposta no chega: servidor executa o mtodo, envia resposta, mas resposta no
chega no cliente, retransmisso do request, servidor executa mtodo, envia resposta,
mas resposta no chega ... exceo! (1 ou +)

99

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

SEMNTICA DA INVOCAO REMOTA

10
10

Sumrio

NO MXIMO UMA (0 ou 1)
 Ao receber uma resposta, o invocador sabe que o mtodo foi executado
uma s vez, pois:

1c

 Falha do canal de comunicao


Request chega no servidor
Servidor executa o mtodo
Servidor envia resposta.
Resposta no chega...
Retransmisso do request
Servidor detecta que o request j foi executado e retorna a resposta com
resultado anterior
 Se a resposta chegar no cliente
 Mtodo ter sido executado uma s vez
 Se no
 Aps um certo nmero de retransmisses, uma exceo ser gerada







Remote Method Invocation (RMI)

 Ao receber exceo, o invocador sabe que o mtodo no foi executado ou


foi executado somente uma vez
 Semntica utilizada em JRMI e CORBA
Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

11
11

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

12
12

REMOTE METHOD INVOCATION: RMI

INTERFACE REMOTA

Objeto
remoto

objeto

local

Invocao
remota
B

C
local E
remote

local

dados

Invocao
remota

mtodos

mtodos

(Coulouris et al., 2001)

Invocao remota de mtodos = RMI


Objeto remoto: pode ser invocado a distncia (ex. B)
f
Re

c ia
n
er

m
re

dados
dados

aa
ot

Mtodo 1
Mtodo 2
Mtodo 3

Interface remota de B

separao entre interface e implementao


13
13

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

14
14

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

EXEMPLO DE DECLARAO INTERFACE

LIMITES DA INTERFACE REMOTA

IDL (CORBA)
 c-like

module banco {

Limites de uma interface


(em relao ao processamento local)

enum TipoConta{
CORRENTE,
POUPANCA
};
struct Conta {
string id;
string senha;
TipoConta tc;
};

Mtodo 1
Mtodo 2
Mtodo 3

 No permite acessar diretamente variveis de outros mdulos


tipos

 No possvel fazer passagem de argumentos por referncia


 para modificar os argumentos na origem

interface Operacao {
long getSaldo(in Conta conta);
void retirar(in Conta conta, in long valor);
void depositar(in Conta conta, in long valor);
void transferir(in Conta orig, in Conta dest, in long valor);
};

Interface remota de B

 Ponteiros no podem ser utilizados como argumentos de chamadas

};
15
15

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

16
16

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

TRANSPARNCIA

TRANSPARNCIA DA API

As implementaes de RMI preocupam-se:


 Com os limites das interfaces
 Com a semntica das invocaes
 Com a transparncia das invocaes
 Faz-las similares s invocaes locais: sintaticamente e
semanticamente (difcil!)

H autores que dizem que a sintaxe das invocaes remotas deve


ser distinta das invocaes locais para expressar claramente suas
diferenas ao programador.
O

 Semntica:
 Da invocao local: exatamente uma vez
 Da invocao remota: vrias possibilidades

programador de uma aplicao distribuda deve levar em conta:


falhas de comunicao,
indisponibilidade do servio e, tambm,
ter conscincia que os mtodos de um objeto remoto podem ser
acessados de forma concorrente levando aos problemas de race
condition e falta de vivacidade.

 Tempo de execuo de uma invocao remota maior


 A gama de excees tambm maior: falhas de comunicao,
do servidor e problemas de concorrncia!

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

17
17

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

18
18

Sumrio

Sumrio

2a

IMPLEMENTAES DE RMI/RPC

CORBA

19
19

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

CORBA

CORBA

20
20

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

CORBA

CORBA (OMG: http://www.omg.org)

 OMG: Object Management Group


 http://www.omg.org
 CORBA = Common Object Request Broker Architecture

Invocaes remotas

CORBA uma especificao (OMG) de um padro para um ambiente


heterogneo de computao orientado a objetos distribudos.

Heterogeneidade
 Programas escritos em linguagens e/ou paradigmas diferentes
 orientado a objetos ou procedurais
 C, Java, C++

Parte desta especificao define a IDL, Interface Definition


Language. Toda implementao CORBA padro deve suportar IDL, ou
seja, implementar todas as capacidades definidas na IDL utilizando
uma linguagem e uma plataforma especficas.

 Processos rodam em plataformas diferentes

21
21

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

FUNCIONAMENTO CORBA

Interface IDL
<<realizes>>

Sumrio

2b

<<realizes>>
<<realizes>>

CLIENTE

22
22

SERVIDOR

JRMI
STUB

SKELETON
IIOP

ORB

request

(un)marshall

ORB
(un)marshall

Internet Inter-ORB Protocol

IIOP: Internet Inter-ORB Protocol


ORB=Object Request Broker
Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

23
23

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

24
24

JRMI

SUPORTE PARA JRMI


Pacote java.rmi

JRMI: Java Remote Method Invocation

 API para implementao de objetos clientes, servidores e


interfaces
 API para utilizar os servios de runtime

objetos distribudos em Java


Transparncia





Servios de runtime

Utiliza mesma sintaxe da invocao local


Verificao de tipos de dados idntica a local
No h necessidade de aprender uma IDL especfica (como em CORBA)
Faz garbage collection distribudo

 Registro de objetos remotos (permite localiz-los)

Ferramentas
 JRMI: Primeira apario: JDK 1.1
 At JDK 1.4: compilador rmic para gerar stubs
 Aps: Stubs podem ser gerados automaticamente pela JVM (a partir
de JDK 1.5)

Porm...
 H conscincia (da parte do programador) que a invocao de um
mtodo remoto, pois ele deve:
 tratar RemoteExceptions
 implementar a interface Remote
25
25

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

IMPLEMENTAO RMI
A: CLIENTE
dados

B1: SERV

A tem referncia de B1

26
26

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

MENSAGEM REQUEST-REPLY
Mensagem de invocao requer referncia ao objeto
remoto

B2: SERV

dados

mtodos

mtodos

return

return

invoca
Skeleton &
Dispatcher para
a classe de B

STUB B1

Invoca b1.met()
Stub monta request
(marshall)

request
Mdulo de
referncia

dados

mtodos

Interface
remota
da classe B

reply

request

reply

Mdulo de
comunicao

Mdulo de
comunicao

Request/reply

REFERNCIA A OBJETO REMOTO

 Quando um objeto invoca um mtodo de um objeto remoto


 Referncias tambm podem ser passadas como argumentos ou
como respostas de mtodos remotos

Hora e
data de
criao

Nmero
seqencial

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

28
28

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

MDULO DE REFERNCIA A OBJ REMOTO

 Uma entrada para cada stub


local:
Ex. no lado do cliente

 No espao de nomes
 No tempo (referncias antigas)

porta

Bytes (marshalled)

 Uma entrada para cada objeto


remoto do processo

Referncia nica no sistema distribudo

IP

Int ou mtodo

argumentos

Dois tipos de entrada na


tabela:

Quando utilizada:

32 bits

Ver adiante

Id do mtodo

JRMP
27
27

32 bits

int

Referncia ao obj. remoto

Mdulo de
referncia

Request/reply

32 bits

Int (0=request 1=reply)

Mapeia ref.
remota<->local

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

32 bits

Tipo de mensagem
Id do request

<ref. remota de B1>, <ref.


local de B1> referncia
local se refere a um stub

Ex. no lado do servidor


<ref. remota de B1>, <ref.
local de B1>
<ref. remota de B2>, <ref.
local de B2>

Interface

29
29

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

30
30

BINDER

FUNCIONAMENTO TPICO

Cenrio
 Objeto A necessita de um servio de B, mas no conhece a
referncia remota, somente o nome de B
 O objeto A pergunta a quem?

m
bt
2. O

CLIENTE

re
ref.

REGISTRO

ta
mo

3. Comunica-se direto
com o obj. servidor

1. registra objetos

SERVIDOR

31
31

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

Funcionamento tpico
A:Cliente

rmiregistry:Binder

32
32

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

EXEMPLO HELLO WORLD

B:Servidor

DEFINIO DA INTERFACE DO SERVIO

Cria stub
locate rmiregistry

Locate rmiregistry
rebind(Alo, stub )
Lookup(Alo)

import java.rmi.Remote;
import java.rmi.RemoteException;

stub

public interface AloInt extends Remote {


String digaAlo() throws RemoteException;
}

stub.digaAlo()

Executa o
mtodo
"Alo, mundo!"

33
33

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

EXEMPLO HELLO WORLD


IMPLEMENTAO DO SERVIO

EXEMPLO HELLO WORLD


IMPLEMENTAO DO CLIENTE

public class AloImpl implements AloInt {


public String digaAlo() {
return "Alo, mundo!";
}

public class AloCli {


public static void main(String[] args) {
// se host = null, pega o host local no getRegistry
String host = (args.length < 1) ? null : args[0];
try {
// localiza o registro
Registry registry = LocateRegistry.getRegistry(host);

public static void main(String args[]) {


try {
AloImpl alo = new AloImpl();
// Exporta o objeto remoto colocando-o em listening para receber
// request numa porta anonima TCP - retorna o stub do objeto servidor
AloInt aloStub = (AloInt)UnicastRemoteObject.exportObject(alo, 0);

// localiza o servio registrado como Alo


AloInt stub = (AloInt) registry.lookup("Alo");

// Tenta localizar o rmiregistry no host local e na porta default (1099)


// Caso nao encontre, retorna erro: RemoteException
Registry registro = LocateRegistry.getRegistry();

// faz invocacao remota do digaAlo()


String resposta = stub.digaAlo();
System.out.println("* Resposta: " + resposta);
} catch (Exception e) {
System.err.println("! Erro no cliente: " + e.toString());
e.printStackTrace();
}

// Registra o OBJ servidor: nome "Alo" e interface aloStub


// Se Alo ja estiver associado a outro objeto remoto, ocorre uma excecao
registro.rebind("Alo", aloStub);
} catch (Exception e) {
System.out.println("! Erro no servidor: " + e.getMessage());
}

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

34
34

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

35
35

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

36
36

EXERCCIO 1: Hello em JRMI


Visitar http://www.dainf.ct.utfpr.edu.br/~tacla/JAVARepositorio/JRMI/JRMIHello2/
Observar no diretrio build s h arquivos .class




AloImpl: servidor
AloInt: interface remota
AloCli: cliente que utiliza o servio

O stub e skeleton so automaticamente gerados em tempo de execuo

EXERCCIO 1: Hello em JRMI


PASSO 1: DOWNLOAD
1. Crie um projeto NetBeans num diretrio <home> qualquer
2. Faa o download dos arquivos .java em <home>/src/
3. Compile o projeto
( possvel baixar todo o projeto, inclusive os .class. Neste caso
no necessrio recompilar)

Passo 1: Download e compilao


1. Crie um projeto NetBeans num diretrio <home> qualquer
2. Faa o download dos arquivos .java em <home>/src/
3. Compile o projeto
( possvel baixar todo o projeto, inclusive os .class. Neste caso no
necessrio recompilar)

37
37

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

EXERCCIO 1: Hello em JRMI


PASSO 2: RODAR O RMIREGISTRY




 Linux
 echo $CLASSPATH (verifica classpath atual)
 export CLASSPATH=$CLASSPATH:<home>/build/classes/
 Windows
 set classpath (verifica classpath atual)
 set classpath=%classpath%;<home>/build/classes/

Isto necessrio, pois o rmiregistry precisa saber onde encontrar os


arquivos .class
RMI REGISTRY um servio TCP que aguarda solicitaes na porta
bem conhecida 1099

39
39

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

EXERCCIO 1: Hello em JRMI


Para setar o classpath do faa:

Incluir o diretrio <home>/build/classes/ no classpath (ver slide


seguinte)
Executar o command prompt e nele fazer start (2x)
Executar o rmiregistry a partir de qualquer ponto da rvore de
diretrios

Observaes


PASSO 3: EXECUTAR

40
40

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

EXERCCIO 1: Hello em JRMI

EXERCCIO 2: CALCULADORA
Utilizando o JRMIHello2 como exemplo faa um servio
remoto que implemente a seguinte interface:

Executar AloImpl (servidor)






 Em um dos command prompt aberto pelo start


 Posicionar-se no <home>/build/classes/
 Executar java AloImpl

Executar AloCli (cliente)

double Somar(double a, double b)


double Subtrair(double a, double b)
double dividir(double a, double b)
Double multi(double a, double b)

retorna a + b
retorna a b
retorna a/b
retorn a*b

Faa um cliente que:

 Em um dos command prompt aberto pelo start


 Posicionar-se em <home>/build/classes/
 Executar java AloCli <ip rmiRegistry>
 O argumento a localizao do RMI Registry. No precisa ser
colocado se estiver rodando na mesma mquina

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

38
38

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

 Localize o servio no registro


 Invoque os quatro mtodos acima

41
41

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

42
42

PRTICA: QUADRO BRANCO


PASSO 1: EXECUTAR

PRTICA: QUADRO BRANCO


PASSO 3: OBSERVAR OS PONTOS ABAIXO

 BAIXAR O CDIGO DE

 Os objetos que so passados por valor (ObjetoGrafico) devem ser


serializveis (equivale ao marshalling no Java)

http://www.dainf.ct.utfpr.edu.br/~tacla/JAVARepositorio/JRMI/JRMIQuadroBranco/

 Editor grfico estilo quadro branco compartilhado por vrios usurios


(Coulouris, 2001). A implementao no possui interface grfica, porm
tem todo o esqueleto!

 Download de classes pela JVM


 Quando um cliente recebe uma resposta contendo um objeto
passado por valor
 Quando uma referncia remota aponta para um proxy que no
existe localmente

 Ao executar o cliente, o usurio pode fazer


 java Cliente escrever para desenhar um retngulo
 java Cliente ler
para ler todas as formas desenhadas
 java Cliente ler <n>
para ler todas as formas desenhadas a partir
da verso n (n um inteiro)

 Dinamicidade
 Mudar o cdigo do ObjetoGrfico e mostrar que funciona

 O servidor mantm o estado do desenho:


 Cliente pode buscar formas desenhadas fazendo polling no servidor
 O servidor guarda um nmero de verso junto com cada forma (evita
que um cliente recupere formas j recuperadas)

43
43

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

EXERCCIO 3
Implementar uma interface grfica nos clientes do
quadro branco (vide slides anteriores) de maneira que
todos possam editar um desenho de forma cooperativa.

EXERCCIO 4
Implementar o avaliador de respostas de questionrios
(o mesmo feito em UDP e TCP) com JRMI

45
45

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

44
44

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

46
46

RESUMO DE RMI
RMI
 Cada objeto do SD tem uma referncia remota e uma interface
remota que especifica quais operaes podem ser invocadas
remotamente.

RPC

 Invocaes de mtodos locais possuem semntica de execuo


exatamente uma vez

Remote Procedure Call

 RMI somente garante no mximo uma vez


 Os componentes do middleware components (proxies, skeletons e
dispatchers) escondem do programador os detalhes de marshalling,
envio de mensagens e localizao dos objetos.

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

47
47

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

48
48

RPC
Remote Procedure Call

IMPLEMENTAO RPC

A: CLIENTE

 Chamada de procedures remotas


programa

Procedure
1

Similar RMI
Permite cadeia de invocaes

return
return

Uma implementao de RPC tambm implementa uma


ou mais semnticas de invocao

STUB PROC 1.

STUP PROC 2

STUB PROC 1
DISPATCHER

request

reply

Mdulo de
comunicao

Mais simples que RMI


 no tem o mdulo de referncia a objeto remoto

Request/reply
49
49

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

CONCLUSO
CORBA x JRMI
 Use Corba se o sistema distribudo tiver programas escritos em
linguagens ou paradigmas diferentes
 Use Corba se futuramente o sistema interoperar com outros
sistemas escritos em linguagens ou paradigmas diferentes
 Se tudo for e ser Java, use JRMI

Java oferece vrias formas de realizar distribuio


 Sockets: menor abstrao, mensagens ou stream
 CORBA: abstrao invocao
 JRMI: abstrao maior, objetos

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

invoca

SKELETON

PROXY

Invoca procedure 1

 Talvez
 Pelo menos uma
 No mximo uma

Procedure
2

51
51

Sistemas Distribudos/UTFPR Prof. Cesar Augusto Tacla

reply

request

Mdulo de
comunicao
Request/reply
50
50

Potrebbero piacerti anche