L
ICENCIATURA EM CIÊNCIAS DA COMPUTAÇÃOAGENDA
INTERFACE DE COMUNICAÇÃO
PARALELISMO
INVOCAÇÃO REMOTA DE MÉTODOS
INTRODUÇÃO AO MODELO
ESPECIFICAÇÃO DA INTERFACE DOS SERVIÇOS
ARQUITETURA DO SISTEMA RPC
RMI
29
-10
-2
0
1
2
2
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
INTERFACE DE COMUNICAÇÃO -
PARALELISMO
Existe sincronização no envio e recepção de dados com o modelo de concorrência em termos de
processos e tarefas.
O paralelismo ocorre na programação dos processos que actuam como servidores.
Atendimento em simultâneo de vários clientes, optimizando a execução global da aplicação. Conjugando as primitivas de recepção com os
processos ou com tarefas no interior dos processos.
29
-10
-2
0
1
2
3
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
INTERFACE DE COMUNICAÇÃO -
PARALELISMO
Na recepção múltipla, um processo atende um pedido de cada vez. Neste caso, os restantes
clientes esperam que os pedidos anteriores sejam executados.
Uma forma de introduzir paralelismo no servidor é utilizar vários processos em paralelo;
Obriga a partilha de estruturas de dados entre os processos, como memória partilhada e sincronização.
Programação complicada
Múltiplos pontos de sincronização
29
-10
-2
0
1
2
4
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
INTERFACE DE COMUNICAÇÃO -
PARALELISMO
O modelo multitarefa com vários fios de execução
concorrentes, sincronizando-se no acesso a variáveis partilhadas, trata-se de um modelo mais adequado para a programação de servidores.
Vantagens:
Programação simples
Código identico a um servidor sequencial
Introdução da sincronização no acesso a estruturas de dados partilhadas
Permite explorar situações de bloqueio da tarefa durante o serviço de um pedido (e.g. acesso ao disco)
Partilha de dados e sincronização de várias tarefas
Tira partido de possíveis multiprocessadores na máquina servidor
29
-10
-2
0
1
2
5
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
MODELO DE CHAMADA DE PROCEDIMENTO REMOTO
CLIENTE SERVIDOR
Invocação do Procedimento Remoto
Devolução dos Parâmetros de Resposta
Bloqueia-se
Cliente Bloqueado
Retorna a Execução
Execução do Pedido
29
-10
-2
0
1
2
6
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
P
ROCEDIMENTOS REMOTOS CHAMADA DE PROCEDIMENTO REMOTO
(RPC – Remote Procedure Call)
Permite a transferencia de controlo e dados entre espaços de endereçamento disjuntos quer
residentes na mesma maquina ou em maquinas distintas.
Metodologia de programação distribuida
associada ao modelo Cliente / Servidor com o objectivo de retirar do programador a
discrepancia existente em:
29
-10
-2
0
1
2
7
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
P
ROCEDIMENTOS REMOTOS CHAMADA DE PROCEDIMENTO REMOTO
(RPC – Remote Procedure Call)
Modelos de mensagens
A interface de programação suportada em
mensagens ser intuitiva e a sua ligação ao modelo de programação das linguagens procedimentais ser delicada, por causa da semantica diferente das
interacções.
29
-10
-2
0
1
2
8
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
P
ROCEDIMENTOS REMOTOS CHAMADA DE PROCEDIMENTO REMOTO
(RPC – Remote Procedure Call)
Modelos de mensagens
Mensagens enviadas de forma assincrona; Fluxos paralelos de actividade;
29
-10
-2
0
1
2
9
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
P
ROCEDIMENTOS REMOTOS CHAMADA DE PROCEDIMENTO REMOTO
(RPC – Remote Procedure Call)
Modelos de mensagens
Pouco transparente para o programador
habitual;
Expõe muitos mecanismos de transporte
subjacentes
O endereçamento
Formatação das mensagens
O tratamento da heterogeneidade.
29
-10
-2
0
1
2
10
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
P
ROCEDIMENTOS REMOTOS CHAMADA DE PROCEDIMENTO REMOTO
(RPC – Remote Procedure Call)
Chamada de procedimento
Mecanismo para transferencia de controlo e
dados dentro de um programa
Interacção com o modelo cliente/servidor
Troca de pelo menos duas mensagens
Requisição do serviço
Resposta ao pedido
29
-10
-2
0
1
2
11
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
P
ROCEDIMENTOS REMOTOSLigação Cliente - Servidor
Cliente Serviço de Servidor
Nomes
2 – Localizar o servidor 1 – Registar Serviço
3 –Estabelecimento da Ligação
29
-10
-2
0
1
2
12
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
P
ROCEDIMENTOS REMOTOS CHAMADA DE PROCEDIMENTO REMOTO
(RPC – Remote Procedure Call)
O cliente estabelece a ligação com o servidor –
binding:
Localização do servidor – atraves do serviço de nomes;
Estabelecimento de um canal de transporte;
Autenticação do cliente e/ou servidor.
Estabelecimento de políticas de segurança
Identidade;
Autenticação ;
29
-10
-2
0
1
2
13
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
P
ROCEDIMENTOS REMOTOS Invoca uma operação remota
Envia informação
sobre o mecanismo de transporte da
informação
Identificação do
procedimento remoto Parametros
Espera por uma
mensagem
Valida os dados recebidos Converte os parametros
para o formato interno
Chama o procedimento
apropriado.
Final do procedimento,
resultados colocados numa msg, de acordo com a
estrutura prédefinida e transmitida de volta ao cliente.
Lado Cliente Lado Servidor
29
-10
-2
0
1
2
14
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
P
ROCEDIMENTOS REMOTOS Na lógica, o cliente efectua uma chamada a um procedimento local que se encarrega de iniciar a invocação remota.
A estes procedimentos designam-se por rotinas de
adaptação (sub routines)
29
-10
-2
0
1
2
15
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
P
ROCEDIMENTOS REMOTOSESPECIFICAÇÃO DA INTERFACE DOS SERVIÇOS
29
-10
-2
0
1
2
16
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
LINGUAGE DE DESCRIÇÃO DE
INTERFACES
IDL – Interface Description Language
Apresenta uma sintaxe inspirada nas linguagens tradicionais (C, Pascal, C++).
Acrescenta nelas palavras-chave para definir aspectos específicos do RPC.
Apresenta problemas na passagem de parametros na definição do RPC, quando em máquinas diferentes.
Passagem por valor
Simples pois pode ser reservado espaço fixo em memória
ou por referencia
Mais complexo, pois os espaços de endereçamento
distintos não permitem um funcionamento identico ao que existe num espaço endereçamento único.
29
-10
-2
0
1
2
17
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
E
SPECIFICAÇÃO DA INTERFACE DOS SERVIÇOS As linguagens de especificação de interfaces apresentam-se como versões simplificadas de uma linguagem de programação, visto
necessitarem apenas da parte declarativa das linguagens.
Na sua sintaxe declarativa apresentam:
Forma de especificar os procedimentos
Os parametros
Tipos de dados
Direcção (entrada, saída, bidireccionais)
29
-10
-2
0
1
2
18
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
E
SPECIFICAÇÃO DA INTERFACE DOS SERVIÇOS Dependendo das características do RPC, a
linguagem IDL possui diversas palavras chaves para fornecer indicações na definição dos
serviços:
Identificação do serviço
Versoes
Semantica desejada para execução do procedimento remoto
…
29
-10
-2
0
1
2
19
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
I
MPLEMENTAÇÃORPC
Exercício:
Serviço que permite o acesso remoto a um
conjunto de operações bancárias a executar das dependencias de um banco, da empresa ou casa do cliente, atraves de ligações de teleinformática.
Podem a posterior serem introduzidos requisitos de segurança e fiabilidade.
29
-10
-2
0
1
2
20
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
I
MPLEMENTAÇÃORPC
Resul = criar (long valor, char* nome, char* morada, long* numero) Resul = saldo (long nConta, long* valor);
Resul = depositar (long nConta, long valor); Result = levantar (long nConta, long valor);
Result = transferir (long nContaOrig, long nContaDest, long valor); Result = pedriExtrato (long nConta, long mês, long ano,
struct dadosOperacao* dados, int* nElementos);
Considerar as operações habituais de manipulação de Contas com a sintaxe abaixo.
29
-10
-2
0
1
2
21
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
I
MPLEMENTAÇÃORPC
[
Uuid(00918ª0C-4D50-1C17-9BB3-92C1040B0000), Version(1.0)
]
Interface banco {
Typedef enum { SUCESSO, ERRO,
ERRO_NA_CRIACAO, CONTA_INEXISTENTE, FUNDOS INEXISTENTES } resultado;
Especificação da Interface em IDL. A Microsoft Utiliza a MIDL no sistema RPC, resultante da adaptação do DCE.
Typedef enum {
CRIACAO, SALDO, DEPOSITO,
LEVANTAMENTO, TRANSFERENCIA, EXTRACTO
} tipoOperacao;
29
-10
-2
0
1
2
22
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
I
MPLEMENTAÇÃORPC
Typedef struct{long dia, long mês; long ano; } tipoData;
Typedef struct{
tipoData data;
tipoOperacao operacao; long movimento;
long saldo; } dadosOperacao;
Resultado criar([in] handle_y h, [in] long valor,
[in, string] char nome[], [in, string] char morada[], [out] long *numero);
29
-10
-2
0
1
2
23
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
PROCEDIMENTOS
REMOTOS
ARQUITETURA DO SISTEMA RPC
29
-10
-2
0
1
2
24
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
PROCEDIMENTOS
REMOTOS
RMI – Remote Method Invocation
29
-10
-2
0
1
2
25
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
INTERFACE RMI
Permite a programas escritos em Java chamar certos métodos em servidores remotos.
Permite que objectos Java em hosts diferentes comuniquem-se entre si.
Cada objecto remoto implementa uma interface remota que especifica qual dos seus métodos
podem ser invocados pelos clientes.
Os clientes podem invocar métodos de um objecto remoto quase da mesma forma como invocam
métodos locais.
29
-10
-2
0
1
2
26
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
OBJECTOS
Quando um objecto é passado para um método java ou
retornado, o que realmente é passado uma referencia do objecto – sua localização na memoria da maquina virtual.
Passagem por referência – quando a máquina local
passa um objecto remoto para a maquina remota.
Passagem por valor – trata-se da cópia de um objecto
da maquina local que é passado para a maquina remota
As cópias dos objectos a serem passados para outras
máquinas, são convertidos num stream de bytes atraves de serialização; as máquinas destino,
reconstroem o objecto original a partir dos bytes.
29
-10
-2
0
1
2
27
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
29-10-2012
28
C
OMUNICAÇÃO CLIENTE–
SERVIDOR A camada cliente conversa com o stub;
O stub passa a conversação para a camada de referencia remota;
A camada de referencia remota conversa com a camada de transporte;
Traduz uma referencia local para o stub em uma referencia remota para o objecto no servidor.
A camada de transporte do cliente passa os dados atraves de uma rede para a camada de
transporte do servidor.
29
-10
-2
0
1
2
29
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
C
OMUNICAÇÃO CLIENTE–
SERVIDOR A camada de transporte do servidor comunica-se com a camada de referencia remota, que converte uma referencia enviada pelo cliente em uma
referencia para a máquina local.
A camada de referencia passa a requisição para o skeleton.
Se a chamada ao método retornar um valor, o valor é enviado de volta ao cliente.
29
-10
-2
0
1
2
30
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
C
OMUNICAÇÃO CLIENTE–
SERVIDOR Na inicialização do servidor, é utilizado o métido
bind() da classe naming do pacote java.rmi para ligar um nome ao objecto remoto no registry.
Os cliente recuperam o objecto remoto a partir da
registry, usando url’s como argumento do método
lookup()
Rmi://nome_do_host:porta/nome_do_objecto
Cada entrada no registry tem um nome, URL, e uma referencia para o objecto.
29
-10
-2
0
1
2
31
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
R
MI–
APLICAÇÃO EXEMPLOArquivo Hello.java (interface)
import java.net.*; import java.rmi.*;
public interface Hello extends Remote {
String sayHello() throws
RemoteException; }
29
-10
-2
0
1
2
32
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
R
MI–
APLICAÇÃO EXEMPLOArquivo HelloImpl.java (implementação do objeto remoto)
import java.rmi.*;
import java.rmi.server.*; import java.rmi.registry.*; import java.net.*;
public class HelloImpl extends UnicastRemoteObject implements Hello {
public HelloImpl() throws RemoteException{ super();
}
public String sayHello() { return "HelloWorld!"; }
}
29
-10
-2
0
1
2
33
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
R
MI–
APLICAÇÃO EXEMPLO Arquivo HelloServer.java (servidor) import java.net.*;import java.rmi.*;
import java.rmi.server.*; import java.rmi.registry.*;
public class HelloServer {
public static void main (String args [ ]) {
//Cria e instala o security manager
//System.setSecurityManager(new RMISecurityManager() );
try {
//Cria HelloImpl
HelloImpl obj = new HelloImpl();
Naming.rebind("HelloServer", obj);
System.out.println("Hello Server pronto.");
} catch(Exception e) {
System.out.println("HelloServer erro"+ e.getMessage());
}
} }
29
-10
-2
0
1
2
34
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
R
MI–
APLICAÇÃO EXEMPLO Arquivo HelloClient.java (cliente)import java.net.*; import java.rmi.*;
import java.rmi.registry.*; import java.rmi.server.*;
public class HelloClient {
public static void main(String args[ ]) { //Cria e instala o security manager
// System.setSecurityManager (new RMISecurityManager () ); try {
Hello obj = (Hello)Naming.lookup( "rmi://vip03/HelloServer");
System.out.println(obj.sayHello()); } catch(Exception e) {
System.out.println("HelloClient erro"+ e.getMessage()); }
System.exit(0); }
}
29
-10
-2
0
1
2
35
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
R
MI–
APLICAÇÃO EXEMPLO Para compilar e executar na mesma máquina:
Instalar o Java Development Kit no computador e
inserir c:\jdk1.1\bin na linha PATH do arquivo AUTOEXEC.BAT.
Abrir uma janela do DOS e digitar javac Hello*.java
(nomes dos arquivos com extensão .java que farão parte do aplicativo), para que sejam compilados.
Digitar rmic HelloImpl (nome do arquivo que implementa
o serviço), para que sejam gerados o stub e o skeleton.
Digitar start rmiregistry para executá-lo em background.
Digitar java HelloServer para inicializar o servidor.
Abrir outra janela do DOS e digitar java HelloClient para
executar o cliente.
29
-10
-2
0
1
2
36
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
R
MI-
COMPARAÇÕES RMI - Mais simples do que fazer troca de
mensagens usando sockets porque os detalhes do
estabelecimento das conexões entre os
hosts e a transferência de dados entre eles
são escondidos nas classes RMI.
CORBA (Common
Request Broker
Architecture) é a solução mais geral para objetos distribuídos. CORBA permite que objetos escritos em linguagens diferentes comuniquem-se entre si. Java
"adapta-se" ao CORBA através da Java IDL (Interface Definition
Language) e JOE (Java Oriented Enviroment).
SOCKETS CORBA
29
-10
-2
0
1
2
37
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il
R
MI-
COMPARAÇÕES Envio de objetos.
Portabilidade, pois se
tratando de código totalmente escrito em Java, qualquer
computador que possua uma JVM pode rodar estes programas.
Facilidade de
implementação e manutenção por ser orientado à objetos.
RPC (Remote Procedure
Call) faz quase a mesma coisa que RMI.
Envia apenas tipos de
dados primitivos;
Independente da
linguagem;
Não está bem adaptado
a linguagens O.O.
RMI RPC
29
-10
-2
0
1
2
38
P
rof
.
N
ob
re
- ma
ca
b
a
.ped
ro@
g
ma
il