Escolar Documentos
Profissional Documentos
Cultura Documentos
Motivação
● Você desenvolve um programa cujos objetos
trocam mensagens entre si
● Funciona muito bem se o programa executa
em um único processo
● O que acontece se você subdividir seu
programa em múltiplos objetos?
– O objeto1 pode invocar objeto2.metodoA()?
– Por que?
– Solução:
● RMI: Invocação de método remoto (baseado em
objetos)
Camadas de middleware
Applications
remoteobject
Data
remote
interface
m1 m4
{
Implement. m5
m2
dos métodos m6
m3
correct lost
Execute
function request
Reply
Request Channel
Execute fails
during
Execute, crash reply
Crash before Reply
reply
Request Client
machine
Execute
fails
crash
Crash before
before
Reply receiving
execution
reply
client server
remote
object A proxy for B skeleton
object B
Request & dispatcher
for B’s class
Reply
MIDDLEWARE
Proxy em skeleton em invocação de
métodos remotos
Process P1 (“client”) Process P2 (“server”)
client server
remote
object A proxy for B skeleton
object B
Request & dispatcher
for B’s class
Reply
client server
remote
object A proxy for B skeleton
object B
Request & dispatcher
for B’s class
Reply
Request
Reply
client stub server stub
procedure procedure
client service
procedure Communication Communication procedure
module module dispatcher
Stubs
● Stubs são gerados automaticamente a partir
de especificações de interfaces
– Ocultam detalhes de (un)marshalling dos
programadores
● Stubs clientes realizam marshalling em msgs
de requisisção e unmarshalling em respostas
● Stubs servidores realizam unmarshalling em
msgs de requisisção e marshalling em
respostas
Processo de geração de stubs
Compiler / Linker
gcc
Server
.o, .exe Program
.c Server Server .c
Stub Source
.h
Interface Stub Common RPC
RPC
Specification Generator Header LIBRARY
LIBRARY
e.g., in SUN XDR e.g., rpcgen
Client Client .c
Stub Source
Client .c
.o, .exe Program
Event service
object of interest subscriber
1. notification
2. notification notification
3. notification
Binder e ativador
● Binder: um serviço separado que mantém
uma tabela que mapeia nomes em referências
de objetos remotos
– Usado por servidores p/ registrar seus objs
remotos por nome. Java RMI Registry, Corba
Naming
● Ativação de objetos remotos
– Um obj remoto está ativo qdo está disponível p/
invocação dentro de um processo em execução
– Um obj passivo consiste de:
● Implementação de métodos
● Seus estados em formato marshalled
Binder e ativador
● Ativação
– Cria uma instância de classe de um obj passivo e
inicializa sua variáveis, sob demanda
– Ativador é responsável por:
● Registrar obj passivos no binder
● Iniciar processos de servidor de nomes e seus obj
remotos
● Manter os locais dos servidores p/ obj remotos já
ativados
– Exemplo:
● Ativador = Inetd
● Objeto/serviço passivo = FTP
Outros serviços
● Objeto persistente: um obj que “sobrevive” a
invocações simultâneas de um processo
– Persistência em Java (JPA), PerDIS, Khazana
● Se um obj migra, pode ser uma boa solução
ter uma referência de obj remoto (IP, porta,...)
– Serviço de localização: mapeia uma referência de
obj remoto p/ sua localização atual
– Permite a migração de obj entre hosts, sem alterar
referência de obj remoto
– Exemplo:
● Akamai é um serviço de localização p/ objetos Web.
Migra obj Web por meio do serviço de localização DNS
Exercícios
● Descreva um cenário no qual um cliente pode
receber uma resposta de um chamada
previamente realizada
● Descreva meios pelos quais protocolos
requisição-resposta mascaram a
heterogeneidade de sistemas operacionais e
tecnologias de redes de computadores
Exercícios
● Uma interface Eleição fornece dois métodos
remotos:
– Voto: este método tem dois parâmetros em que o
cliente fornece o nome do candidato e o nº título
(garante que o eleitor vota apenas 1 vez)
– Resultado: também dois parâmetros no qual o
servidor fornece ao cliente o nome do candidato e
a quantidade de votos
● Quais desses parâmetros são de entrada e
quais são de saída?