Prévia do material em texto
Aula 05 – Comunicação em Sistemas Distribuídos Java RMI – Parte 2 Prof. Julio Cezar Estrella jcezar@icmc.usp.br Créditos 22º Semestre de 2013 Os slides integrantes deste material foram construídos a partir dos conteúdos relacionados às referências bibliográficas descritas neste documento Visão Geral da Aula de Hoje 32º Semestre de 2013 REMOTE METHOD INVOCATION (RMI) 42º Semestre de 2013 Introdução 2º Semestre de 2013 5 Existem algumas arquiteturas destinadas para chamada remota de métodos: • RPC ( Remote Procedure Call) • CORBA ( Common Object Request Broker Architeture) • JAVA RMI ( Remote Method Invocation ) Introdução 2º Semestre de 2013 6 RPC •Serviço muito utilizado em sistemas operacionais distribuídos para chamada remota de procedimentos. •Estes procedimentos, normalmente, envolvem serviços disponibilizados em redes, tais como acesso a DNS, gerenciamento remoto, etc. Introdução 2º Semestre de 2013 7 RPC • RPC não precisa, necessariamente, envolver estruturação em termos de objetos. • Como em CORBA e RMI, existe a necessidade de se trabalhar com interfaces remotas denominadas STUBS. Tanto o cliente quanto o servidor necessitam de um Runtime para processamento da RPC. Introdução 2º Semestre de 2013 8 CORBA • CORBA é uma arquitetura para acesso a objetos distribuídos que prima pela independência da plataforma. • A especificação CORBA define, por exemplo, tipos de dados que podem ser mapeados para várias linguagem de programação, como C++, Pascal e Java. Introdução 2º Semestre de 2013 9 CORBA • Um ponto-chave em CORBA é a utilização de uma IDL (Linguagem de Definição de Interface). Várias linguagens (inclusive Java) já disponibilizam mecanismos para mapeamento de IDL. • CORBA exige uma espécie de “servidor” especializado chamado ORB (Object Request Broker). Existem alguns ORB´s comerciais, tais como VisiBroker e Orbix. Introdução 2º Semestre de 2013 10 • Arquitetura de acesso a objetos distribuídos suportada pela linguagem Java. • Em termos de complexidade de programação e ambiente, é muito simples construir aplicações RMI, comparando-se com RPC e CORBA. • Em termos de ambiente, exige somente suporte TCP/IP e um serviço de nomes de objetos (rmiregistry), disponilizado gratuitamente com o JDK/SDK. Introdução 2º Semestre de 2013 11 • Na realidade, o RMI é uma interface que permite a intercomunicação entre objetos Java localizados em diferentes hosts. Cada objeto remoto implementa uma interface remota que especifica quais de seus métodos podem ser invocados remotamente pelos clientes. • Os clientes invocam tais métodos exatamente como invocam métodos locais. Introdução 2º Semestre de 2013 12 • Arquitetura de acesso a objetos distribuídos suportada pela linguagem Java. • Em termos de complexidade de programação e ambiente, é muito simples construir aplicações RMI, comparando-se com RPC e CORBA. • Em termos de ambiente, exige somente suporte TCP/IP e um serviço de nomes de objetos (rmiregistry), disponilizado gratuitamente com o JDK/SDK. Introdução • Proposta: – Programação distribuída com a mesma sintaxe e semantica usada nos programas Java locais; • Mapeamento de funcionamento de objetos Java em uma JVM (Java Virtual Machine) para funcionarem em ambiente distribuído (múltiplas JVM); 2º Semestre de 2013 13 Arquitetura RMI • Um objeto ativo em uma máquina virtual Java interage com objetos de outras máquinas virtuais Java, independentemente da localização. 2º Semestre de 2013 14 Arquitetura RMI 2º Semestre de 2013 15 Interface para métodos remotos 2º Semestre de 2013 16 Interface para métodos remotos 2º Semestre de 2013 17 • O primeiro passo para disponibilizar métodos que possam ser invocados remotamente consiste na preparação de uma interface remota com tais métodos. • A construção desta interface pode ser feita com base na extensão da interface Remote do pacote java.rmi. Interface para métodos remotos 2º Semestre de 2013 18 • A arquitetura RMI suporta duas classes implementando a mesma interface: – A primeira, que implementa o serviço e é interpretada no servidor – A segunda, que age como um mecanismo de proxy e é interpretada no cliente Interface para métodos remotos 2º Semestre de 2013 19 • Um cliente faz chamadas de métodos ao objeto proxy, RMI envia a requisição à JVM remota, que executa o método. Interface para métodos remotos 2º Semestre de 2013 20 • Valores retornados pelo serviço remoto são enviados, inicialmente, ao objeto proxy, que os repassa para a aplicação cliente. • Vários servidores podem implementar de maneira diferente a mesma interface de acesso ao serviço. Interface para métodos remotos 2º Semestre de 2013 21 • Cada classe que queira disponibilizar tal método remoto precisa implementar a interface especificada anteriormente. • Além disto, a classe precisa extender a classe UnicastRemoteObject, que é uma especialização de um servidor remoto ( classe RemoteServer). Arquitetura RMI • A arquitetura RMI oferece três camadas entre os objetos cliente e servidor: – A camada de stub/skeleton oferece as interfaces que os objetos da aplicação usam para interagir entre si; – A camada de referência remota é o middleware entre a camada de stub/skeleton e o protocolo de transporte. É nesta camada que são criadas e gerenciadas as referências remotas aos objetos; – A camada do protocolo de transporte oferece o protocolo de dados binários que envia as solicitações aos objetos remotos pela rede. 2º Semestre de 2013 22 ESTRUTURA (RMI) 232º Semestre de 2013 Estrutura RMI • Interface Remota • Implementação dos serviços • Criação de cliente RMI • Criação de Servidor RMI 2º Semestre de 2013 24 Interface Remota • Mesmas especificações de uma interface comum • Interface deve estender a interface Remote • Todo método da interface deverá declarar que a exceção RemoteException 2º Semestre de 2013 25 Conceitos RMI Interface remota Exemplo: import java.rmi.*; public interface Count extends Remote { void set(int val) throws RemoteException; int get() throws RemoteException; } 2º Semestre de 2013 26 Implementaçao de serviços • É preciso incluir as funcionalidades para que um objeto dessa classe possa ser acessado remotamente como um servidor. • As funcionalidades de um servidor remoto são especificadas na classe abstrata RemoteServer, do pacote java.rmi.server. • Uma subclasse concreta de RemoteServer oferecida no mesmo pacote é UnicastRemoteObject, que permite representar um objeto que tem uma única implementação em um servidor. 2º Semestre de 2013 27 Conceitos RMI • Implementação de serviços (Exemplo) import java.rmi.*; import java.rmi.server.UnicastRemoteObject; public class CountImpl extends UnicastRemoteObject implements Count { private int sum; public CountImpl() throws RemoteException { super(); } public void set(int val) throws RemoteException { sum = val; } public int get() throws RemoteException { return sum; } } 2º Semestre de 2013 28 Criação de Cliente RMI • O cliente RMI requer obtenção de uma referência remota para o objeto que implementa o serviço. • Referência ocorre através do cadastro realizado pelo servidor. A operação com o objeto remoto é indistingüível da operação com um objeto local. 2º Semestre de 2013 29 Stubs e Skels 2º Semestre de 2013 30 • O cliente, quando invoca remotamente um método, não conversa diretamente com o objeto remoto, mas com uma implementação da interface remota chamada stub, que é enviada ao cliente. O stub, por sua vez, passa a invocação para a camada de referência remota. • Esta invocação é passada para um skel (esqueleto) , que se comunica com o programa servidor. Programação do Cliente 2º Semestre de 2013 31 • O primeiro passo de implementação de um cliente que quer invocar remotamentemétodo é obter o stub do servidor remoto. A localização deste stub é feita com o método lookup (endereço). • Este método devolve uma referência remota do objeto, através do envio do stub. Definição Servidor • Criar uma instância do objeto que implementa o serviço • Disponibilizar o serviço através do mecanismo de registro 2º Semestre de 2013 32 EXECUÇÃO (RMI) 332º Semestre de 2013 Execução • A execução da aplicação cliente-servidor em RMI requer: – execução da aplicação cliente, execução da aplicação servidor, a execução do serviço de registro de RMI. 2º Semestre de 2013 34 Execução • Compilar os arquivos .java – Javac *.java • Compilar RMI – rmic <Classe que implementa serviços> • Registrar RMI – rmiregistry & // unix – start rmiregistry // dos 2º Semestre de 2013 35 Execução do Servidor 2º Semestre de 2013 36 • O primeiro passo antes de executar o servidor é ativar uma espécie de servidor de nomes de servidores que atendem solicitações de métodos remotos. Isto é feito chamando-se o programa rmiregistry. Este programa pode estar ouvindo portas específicas, como por exemplo: % rmiregistry 2048 & • Uma vez que este programa está executando, pode-se chamar o interpretador java para o arquivo servidor.class . Execução 2º Semestre de 2013 37 • Quando se passa um parâmetro para um método remoto, pode ocorrer duas situações: – Tipos primitivos: RMI faz uma cópia do parâmetro e a envia para o servidor – Objetos: RMI utiliza o mecanismo de serialização para enviar uma cópia do objeto para o servidor Esquema da Chamada RMI 2º Semestre de 2013 38 Endereço servidor Registry Servidor_Stub.class Servidor_Skel.class Servidor..class cliente Stub lookup(.../Servidor) Servidor está aqui Solicitação de stub Stub sayHello() “Oi cliente” Execução Servidor de Objetos Gerente de objetos e Serviço de nomes (rmiregistry) Cliente objeto stub cliente skeleton 2. requisita objeto 1. cria e registra objeto 3. retorna referência criados pelo compilador de stubs (rmic) 4. comunicação 2º Semestre de 2013 39 Dúvidas 402º Semestre de 2013 Referências • http://www.dca.fee.unicamp.br/ cursos/PooJava/objdist/javarmi.html • http://java.sun.com/products/jdk/rmi/ reference/docs/index.html • http://www.portaljava.com/home/ modules.php? name=Content&pa=showpage&pid= 8 2º Semestre de 2013 41 Próxima Aula... • Comunicação Indireta 422º Semestre de 2013 Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20 Slide 21 Slide 22 Slide 23 Slide 24 Slide 25 Slide 26 Slide 27 Slide 28 Slide 29 Slide 30 Slide 31 Slide 32 Slide 33 Slide 34 Slide 35 Slide 36 Slide 37 Slide 38 Slide 39 Slide 40 Slide 41 Slide 42