Sistemas Distribuídos

Documentos relacionados
Java RMI. RMI Remote Method Invocation. Chamadas Remotas de Procedimentos (RPC) RPC - Implementação

Num sistema de objectos distribuídos, dois conceitos são fundamentais.

Sistemas Distribuídos

Chamadas Remotas de Procedimentos (RPC) O Conceito de Procedimentos. RPC: Programa Distribuído. RPC: Modelo de Execução

APLICAÇÕES EM SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar

15/4/15. Processamento Paralelo Middleware Orientado a Objetos. Sistema operacional é a única infraestrutura para interação. Middleware é adicionado

Sistemas Operacionais II

SISTEMAS DISTRIBUÍDOS

Invocação de Métodos Remotos RMI (Remote Method Invocation)

Objetos Distribuídos - Programação Distribuída Orientado a Objetos. Luiz Affonso Guedes

Sistemas Distribuídos

JavaTM RMI - Remote Method Invocation

Java RMI. Sistemas Distribuídos. Mauro Lopes Carvalho Silva. Professor EBTT DAI Departamento de Informática Campus Monte Castelo

Sistemas Paralelos e Distribuídos /2004 Curso: Matemática /Informática Sistemas Distribuídos /2004 Curso: Ensino da Informática

RMI e RPC. RPC significou um passo muito grande em direcção à

Invocação de Métodos Remotos

INTRODUÇÃO. RPC x RMI

Num sistema de objectos distribuídos, dois conceitos são fundamentais.

Sistemas Distribuídos: Conceitos e Projeto RPC e RMI

COMPUTAÇÃO DISTRIBUÍDA

Programando sistemas distribuídos com objetos distribuídos na rede TCP/IP. Prof. Me. Sérgio Carlos Portari Júnior

Sistemas Distribuídos

Dados em programas são estruturados, enquanto que mensagens carregam informação seqüencial: Linearização x Restauração de dados Requisição

Comunicação. Carlos A. G. Ferraz 25/6/2003. Sistemas Distribuídos 1. Tópicos. Camadas. Transmissão de dados. Marshalling/Unmarshalling.

Sistemas Distribuídos Aula 10

Implementação de um Sistema de Objetos Remoto baseado em Java RMI. Ricardo Couto Antunes da Rocha INF/UFG

Invocação Remota. Prof. Leonardo Barreto Campos. 1/29

Tutorial RMI (Remote Method Invocation) por Alabê Duarte

1 a. Sumário. 1. Conceitos Básicos a. Invocação remota (RPC/RMI) b. Semântica de invocação remota c. Invocação remota de métodos (RMI)

COMUNICAÇÃO INTER-PROCESSOS JAVA RMI e RPC. Prof. Cesar Augusto Tacla

Sistemas de Objectos Distribuídos

Sistemas de Objetos DistribuídosPrimeira Aplicação Java ORB p.1/21

RPC e RMI. Sistemas Distribuídos. Mauro Lopes Carvalho Silva. Professor EBTT DAI Departamento de Informática Campus Monte Castelo

Infra-Estrutura de Software

Java 2 Standard Edition. Fundamentos de. Objetos Remotos. Helder da Rocha

Principais conceitos de CORBA

COMPUTAÇÃO DISTRIBUÍDA

Java RMI Remote Method Invocation

Java RMI. Alcides Calsavara

UFG - Instituto de Informática

Sistemas Distribuídos

COMPUTAÇÃO DISTRIBUÍDA

Java RMI - Remote Method Invocation. Programação com Objetos Distribuídos (C. Geyer) Java-RMI 1

MIDDLEWARE Aplicativos RMI, RPC e eventos Camadas Protocolo Requesição-Respostal Middleware Representação Externa dos Dados Sistemas Operacionais

STD29006 Sistemas Distribuídos

Sistemas Distribuídos

Número: Nome: Página 1 de 7. Duração da prova: 1h30m. Grupo I [7] Considere o seguinte excerto (incompleto) de um programa cliente em SUN RPC:

Sistemas Distribuídos

Exemplo de Aplicação Distribuída Serviço de Nomes Gerente de Segurança. Callbacks. Prof a Ana Cristina B. Kochem Vendramin DAINF / UTFPR

Protocolo Request-Reply

Chamada Remota de Procedimento (RPC)

Tratamento de Exceções

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Notas de Aula 09: Tratamento de exceções

Tratamento de Exceção. Programação Orientada a Objetos Java (Rone Ilídio)

Programação Paralela OO. projeto ProActive www-sop.inria.fr/oasis/proactive/home.html

Linguagem de Programação II Implementação

Comunicação. Parte II

Laboratório de Programação. Aula 12 Java 5COP088. Aula 12 Exceções Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Linguagem de Programação II Implementação

Common Object Request Broker Architecture

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Programação Orientada a Objetos II

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

A ) O cliente terá que implementar uma interface remota. . Definir a interface remota com os métodos que poderão ser acedidos remotamente

TRATAMENTO DE EXCEÇÕES

Computação II Orientação a Objetos

Vamos fazer um pequeno experimento

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

Threads. O que é uma Thread? Paralelismo

Paradigmas de Computação Paralela

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB)

Programação Orientada a Objetos. Aula 1.9 this e static. Prof. Bruno Moreno

Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção.

Sistemas Distribuídos

User Datagram Protocol

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Remote Method Invocation (RMI)

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Arquitecturas Paralelas I Computação Paralela em Larga Escala LESI - 4º Ano. Middleware de Aplicações Paralelas/Distribuídas

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Teste-Tipo de Sistemas Distribuídos RPC, RMI, Web Services Guia de resolução

Sistemas Distribuídos

Grupo I [5,5v] Considere o seguinte código que ilustra uma componente programática de um sistema de RPC, neste caso do SUN-RPC.

Sistemas Operacionais II

Programação por Objectos. Java

Grupo I [7v] b) [0,3] Em que componente do sistema de RPC será utilizado o campo identificador de operação?

Sistemas Distribuídos RPC Remote Procedure Call

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Capítulo V Sistemas de Objectos Distribuídos

Programação Orientada a Objetos SANTOS, Rafael (PLT)

Sistemas Distribuídos

Sistemas Distribuídos RPC x RMI. Edeyson Andrade Gomes

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Sistemas Distribuídos 2013/14

Módulo 13. Socket. Programação Orientada a Objetos Java (Rone Ilídio)

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Transcrição:

Sistemas Distribuídos RPC Remote Procedure Call 1 Fonte: Alcides Calsavara e Thais V. Batista

Chamada de Procedimentos Remotos (RPC) Motivação: comunicação baseada em operações de entrada/saída Ideal: programar um sistema distribuído como se fosse centralizado RPC objetiva permitir chamada de procedimento remoto como se fosse local, ocultando entrada/saída de mensagens 2

Visão geral Um processo A chama um procedimento p de um processo B, entrando em estado de espera O processo B passa a executar o procedimento p, e ao seu término faz um reply para o processo A O processo A volta à sua execução normal após ter recebido o reply 3

Chamadas e mensagens em RPC Máquina do Cliente Máquina do Servidor 2 4 1 empacota 0 desempacota 5 parâmetro parâmetros s desempacota empacota 11 7 resultados resultados 10 8 cliente 6 servidor Kernel Kernel 3 9 transporte de mensagens via rede 4

Stubs Definição: São partes (fragmentos) de códigos que provêm a abistração de uma chamada (local) de procedimento, através de um método, fazendo a ligação deste com o mecanismo de comunicação. O stub é parte do código que faz a chamada remota, é utilizado no cliente e no servidor. Funções dos stubs: Cliente stub (passo 1) intercepta a chamada empacota os parâmetros (marshalling) envia mensagem de request ao servidor (através do núcleo) Servidor stub (passo 2) recebe a mensagem de request (através do núcleo) desempacota os parâmetros (unmarshalling) chama o procedimento, passando os parâmetros empacota o resultado envia mensagem de reply ao cliente (através do núcleo) Cliente stub (passo 3) recebe a mensagem de reply (através do núcleo) desempacota o resultado passa o resultado para o cliente 5

Falhas em RPC O cliente não é capaz de localizar o servidor A mensagem de request do cliente para o servidor é perdida A mensagem de reply do servidor para o cliente é perdida O servidor pára após ter recebido a mensagem de request O cliente pára após ter enviado a mensagem de request 6

Falha do servidor Passos normais: recebe mensagem de request executa procedimento envia mensagem de reply Falha pode ocorrer: após a execução antes da execução Semânticas de chamada: pelo menos um no máximo um exatamente um 7

Implementação de RPC em Java Java RMI Java Remote Method Invocation (RMI) é um protocolo Java para comunicação entre processos Permite objetos Java invocar transparentemente métodos de outros objetos (que podem estar em máquinas diferentes objetos remotos) Java RMI libera o programador de tratar de detalhes como endereçamento e codificação decodificação de mensagens 8

Implementação de RPC em Java RPC Implementação em Java Stubs do lado do cliente: Stubs Stubs do lado do servidor: Skeleton 9

Implementação de RPC em Java Compilador rmic recebe como entrada a descrição dos métodos remotos gera dois arquivos: Stub e Skeleton. 10

Implementação de RPC em Java Localização de Objetos Remotos Seria impraticável se para cada invocação de método remoto fosse necessário incluir o par (máquina,porta) para identificar onde se encontra o objeto que contém o método O RMI oferece um Serviço de Nomes (RMI Registry) que oferece informações sobre a localização de objetos remotos. o rmiregistry executa em um endereço bem conhecido. 11

Implementação de RPC em Java RMI Registry 12

Implementação de RPC em Java O modelo RMI: O servidor define objetos que o cliente pode usar remotamente Os clientes podem invocar métodos nesse objeto remoto como se ele estivesse executando localmente. O RMI esconde o mecanismo subjacente de transporte, via rede, de argumentos dos métodos e valores de retorno. 13

Implementação de RPC em Java O modelo RMI: 14

Implementado RPC em Java através do NetBeans Com o NetBeans fica mais fácil implementar RPC com RMI, visto que o processo de compilação dos objetos e interfaces RMI, que pela linha de comando, seria feita com o comando rmic (para obter stub e skeleton), serão feitos de forma transparente pela interface de desenvolvimento. À seguir, os passos para implementação do RPC com Java RMI através de um exemplo simples. 15

Passos: Implementado RPC em Java através do NetBeans - passos 1. Crie, em um novo projeto, no NetBeans, o pacote RPC_RMI e nele, a classe RPC_RMI_Servidor.java 2. Defina a interface do servidor, estendendo a interface java.rmi.remote, bem como a declaração dos métodos a serem invocados pelo cliente, via RPC: interface RPC_RMI_ServidorInterface extends Remote{ //*** Declaração dos métodos implementados em RPC_RMI_ServidorInterfaceImpl public double somar(double a, double b) throws RemoteException; public double multi(double a, double b) throws RemoteException; public String frase(string frase) throws RemoteException; //***************************************************************** 16

Implementado RPC em Java através do NetBeans - passos Passos: 3. Crie a classe que implementa os métodos a serem invocados via RPC: @Override public String frase(string frase) throws RemoteException{ return("servidor retornou sua frase: "+ frase); //*************************************************************** class RPC_RMI_ServidorInterfaceImpl extends UnicastRemoteObject implements RPC_RMI_ServidorInterface{ public RPC_RMI_ServidorInterfaceImpl() throws RemoteException{ // construtor padrão // *** Criação dos métodos públicos a serem utilizados tanto pelo @Override public double somar(double a, double b) throws RemoteException{ return(a + b); @Override public double multi(double a, double b) throws RemoteException{ return(a * b); 17

Passos: Implementado RPC em Java através do NetBeans - passos 4. Escreva o superclasse do servidor que implementa a interface, inicializado, antes, o registro do RMI (rmiregistry): //Classe principal, registrada com o RMI server public class RPC_RMI_Servidor { public static void main(string[] args) { //inicia o rmiregisgtry, essencial para aplicações RPC com RMI try { java.rmi.registry.locateregistry.createregistry(1099); System.out.println("RMI registry iniciado!"); catch (Exception e) { System.out.println("Exception starting RMI registry:"); e.printstacktrace(); //fim da inicialização 18

Passos: Implementado RPC em Java através do NetBeans - passos try { 4. Escreva o superclasse do servidor que implementa a interface, inicializado, antes, o registro do RMI (rmiregistry) - continuação: /* instancia a interface remota para ser utilizada * localmente ou pelo RPC */ RPC_RMI_ServidorInterface csi = new RPC_RMI_ServidorInterfaceImpl(); //**************************************************** //Referencia o Registro do RMI (RMI Registry) Registry registry = LocateRegistry.getRegistry(); registry.rebind("calculadoraserverinterfaceimpl", csi); //*********************************************** //captura a ID/IP do servidor InetAddress hostaddress = InetAddress.getLocalHost(); System.out.println("Servidor Calculadora " + csi + " registrado e pronto para aceitar solicitações."); System.out.println("IP do Servidor: "+ hostaddress); catch (Exception ex) { System.out.println("Houve um erro: " + ex.getmessage()); 19

Passos: Implementado RPC em Java através do NetBeans - passos 5. Crie, no atual projeto e no pacote RPC_RMI, a classe RPC_RMI_Cliente.java: public class RPC_RMI_Cliente { public static void main(string[] args) { try { //referenciando o IP do servidor Registry registry = LocateRegistry.getRegistry("localhost"); //instanciando a interface remota RMI RPC_RMI_ServidorInterface c = (RPC_RMI_ServidorInterface) registry.lookup("rpc_rmi_servidorinterfaceimpl"); //RPC_RMI_ServidorInterfaceImpl: ID do RMI registry System.out.println("O objeto servidor " + c + " foi encontrado com sucesso.\n"); System.out.println("A soma de 2 + 5 (chamada pelo cliente, via RPC) é: " + c.somar(2, 5)); System.out.println("A multiplicação de 2 * 5 (chamada pelo cliente, via RPC) é: "+ c.multi(2,5)); System.out.println(c.frase("Calculadora Cliente com RPC através do RMI")); catch(exception ex){ System.out.println(ex); 20

Passos: Implementado RPC em Java através do NetBeans - passos 6. Compile e execute o programa servidor (o rmiregistry tem de estar executando. O mesmo já está, pois inicializamos rmregristry no próprio código fonte do servidor, evitando ter de chamá-lo via linha de comando) 7. Execute o cliente OBS: Para ter acesso completo ao código, bem como as bibliotecas utilizadas, solicite projeto 21 do NetBeans ao professor.

Implementado RPC em Java através do NetBeans - Trabalho Definições: Cada grupo deverá criar (não copiar de terceiros) uma aplicação, utilizando interface gráfica, que permita a comunicação e troca de mensagens entre cliente e servidor (ex: chat, quiz, sistema de correção de provas, etc), utilizando Sockets ou RPC, em Java. A aplicação de cada grupo deverá ser totalmente diferente da aplicação dos outros grupos. Cada parte de código, dicas, métodos, etc que forem de terceiros deverão ser referenciados, via cometário, indicando exatamente a URL onde tal código se encontre, sob pena de ter seu trabalho anulado. Lembrem-se que a sua aplicação deverá ser desenvolvida ineiramente em Java. 22