PROGRAMAÇÃO DISTRIBUÍDA EM JAVA Verão/2001

Slides:



Advertisements
Apresentações semelhantes
Sistemas Operacionais II N Aula prática Java Sockets, RPC e RMI Eduardo Bezerra.
Advertisements

Programação em Java Prof. Maurício Braga
Java Remote Method Invocation Java RMI
Sistemas distribuídos
Marco A. S. Reis EJB Acesso Remoto Marco A. S. Reis
Métodos, Parâmetros, Argumentos e Contratos
Interação entre objetos
Programa de Pós-Graduação Lato Sensu MBA em Gestão de Software
RMI-IIOP.
PRDS - Programa de Residência em Desenvolvimento de Software Laboratório de Engenharia de Software (LES) da PUC-Rio Carlos Lucena
Java RMI Alcides Calsavara. Objetivos Permitir que um método de uma classe Java em execução em uma máquina virtual JVM chame um método de um objeto (instância.
De 17 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes Aula.
Comunicação Distribuída
Desenvolvimento de Aplicações Distribuídas
Invocação de Métodos Remotos RMI
1 Comunicação Inter-Processos -> RMI -> RPC -> TCP -> UDP (Abstração de passagem de mensagem)
1 Arquitetura CORBA Repositório de Implementação Repositório de Interface cliente programa cliente proxy ORB Core ou invocação dinâmica servidor ORB Core.
Comunicação Entre Objetos Distribuídos
Aula 4 Nomes, Vinculações, Tipos e Escopos
Aula 6 Subprogramas Universidade do Vale do Rio dos Sinos
1 Aula 7 ImplementandoSubprogramas Universidade do Vale do Rio dos Sinos
Aula 10 Manipulação de Exceções
JAVA ENUMS © 2009 by Jorge L. de Souza Leão março de 2009 PEE - COPPE/UFRJ.
Capítulo 9 Herança 1.
Classes e objetos Arrays e Sobrecarga
Classes e objetos P. O. O. Prof. Grace.
Introdução a Programação JAVA
Estrutura de Dados em Java
Objetos Distribuídos para WEB Prof. Paulo Fernando da Silva FURB – Universidade Regional de Blumenau Pós-Graduação em Desenvolvimento WEB.
Introdução à Programação Distribuída em Java
Desenvolvimento de Projetos e Aplicações Web
Threads: Introdução e Implementação
Object Oriented Software Construction (MEYER, Bertrand)
Capítulo 2 Java Servlets.
JAVA Linguagem Ambiente de Desenvolvimento
METODOLOGIA PARA DESENVOLVIMENTO DE SISTEMAS Prof. Dr. rer. nat. Daniel D. Abdala 1.
Arquitetura CORBA e Objetos Distribuídos
CORBA e Desenvolvimento Baseado em Componentes
Chamada Remota de Procedimentos
Desenvolvimento de Aplicações CORBA
Sistemas Distribuídos Carlos A. G. Ferraz DI/UFPE Aula 07.
Remote Method Invocation RMI
Concorrência e Java RMI
1 Mobilidade de Código com μcode Projeto Giga Alexandre Lages
Projeto de Banco de Dados
1 2 Observa ilustração. Cria um texto. Observa ilustração.
Capítulo 5 Garbage Collector.
Objetos Distribuídos Nazareno Andrade.
CALENDÁRIO SEXY Ele & Ela. CALENDÁRIO SEXY Ele & Ela.
T. D. S. I. PARA WEB Prof. Emmanuel Nolêto. Java RMI.
Rio Verde - Goiás - Brasil
Tecgraf PUC-Rio maio de 2011 Principais conceitos de CORBA.
TMV Gestão de Redes e de Sistemas Distribuídos ???? Sumário  Arquitectura de Gestão SNMP  Arquitectura de Gestão OSI/TMN  Novas Arquitecturas.
Afinal, o que é um SD? Ospróximospróximosslidesdeverãoserserexecutadosum servidor,executadosum servidor, continuamente para criarmos um cliente e ambos.
Concorrência e thread Petrônio Júnior(pglj) Márcio Neves(mmn2)
Integrações de Aplicações Empresariais Prof. Paulo Fernando da Silva UNC – Universidade do Contestado Pós-Graduação em Sistemas de Informação Aplicados.
Tratamento de Exceções
Java RMI João Gabriel (jggxm).
RMI - JAVA.
RPC and Web Service André Pereira.
Objetos Distribuídos para WEB Prof. Paulo Fernando da Silva FURB – Universidade Regional de Blumenau Pós-Graduação em Desenvolvimento WEB.
RMI (Remote Method Invocation) Bruno Edson Plínio Tadeu
RMI Objetos Distribuídos Luiz C. D´oleron SCJP
Java – Remote Method Invocation (RMI)
Versão 1 - julho/2013 Tecgraf PUC-Rio Novembro de 2013 Principais conceitos de CORBA.
RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.
Sistemas Distribuídos Prof. Marcus Rodrigues
SOCKET - É um canal de comunicação entre processos que estabelece uma conexão entre eles na forma de cliente-servidor. Por meio de sockets, os computadores.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos
Programação em Java RMI - Remote Method Invocation Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.
Transcrição da apresentação:

PROGRAMAÇÃO DISTRIBUÍDA EM JAVA Verão/2001 Aula 06 Objetos distribuídos I: RMI 05.02.2001 Luciano Silva e-mail: lucianos@ime.usp.br 1 1

Tópicos da Aula 06 Problema da chamada remota de métodos Tecnologia RMI Interfaces para métodos remotos Stubs e esqueletos Registros de métodos remotos 2

Chamada remota de métodos Servidor remoto Cliente class ...{ String hello(){ ... } PROCESSO Chamada remota 2

Arquiteturas para chamada remota 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 )

RPC (I) 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, gerencimento remoto, etc.

RPC (II) 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.

CORBA (I) 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.

CORBA (II) 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.

Java RMI 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.

Arquitetura Java RMI 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.

Modelo de camadas do RMI

Interfaces para métodos remotos(I) A definição do serviço remoto é feita através de uma interface Java.

Interfaces para métodos remotos(II) 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.

Interfaces para métodos remotos(III) A arquitetura RMI suporta duas classes implementando a mesma interface: Uma, que implementa o serviço e é interpretada no servidor Outra, que age como um mecanismo de proxy e é interpretada no cliente

Interfaces para métodos remotos(IV) Um cliente faz chamadas de métodos ao objeto proxy, RMI envia a requisição à JVM remota, que executa o método.

Interfaces para métodos remotos(V) 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.

Exemplo Suponha que se queira deixar um método chamado sayHello(), que devolve uma String, disponibilizado para chamada remota. import java.rmi.*; public interface Hello extends Remote{ public String sayHello() throws RemoteException; }

Implementação do método remoto 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).

Exemplo import java.rmi.*; import java.rmi.server.*; import java.net.*; public class servidor extends UnicastRemoteObject implements Hello{ public servidor() throws RemoteException{ // Construtor super(); } public String sayHello() throws RemoteException{ // Método remoto return(“Oi cliente”);

Exemplo ( Continuação ) public static void main(String args[]){ try{ servidor serv=new servidor(); Naming.rebind(“ServidorHello”,serv); // Registra nome do servidor System.out.println(“Servidor remoto pronto.”); } catch(RemoteException e){ System.out.println(“Exceção remota:”+e); catch(MalformedURLException e){}; A partir deste ponto, o objeto chamado ServidorHello está apto a aceitar chamadas remotas.

Compilação e execução do servidor Não basta apenas compilar e executar o programa anterior. Toda a compilação e execução necessita de um ambiente dado pela seguinte seqüência: 1. Compilar o arquivo .java 2. Chamar o aplicativo rmic para gerar o Stub e Skel 3. Ativar o controlador de registros (rmiregistry) 4. Chamar o interpretador com o servidor compilado

Stubs e Skels 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.

Compilação do exemplo anterior servidor.java javac servidor.class rmic servidor_Stub.class servidor_Skel.class

Execução do servidor 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 .

Programação do cliente O primeiro passo de implementação de um cliente que quer invocar remotamente mé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.

Exemplo import java.rmi.*; class cliente{ public static void main(String args[]){ try{ Servidor serv= (Servidor) Naming.lookup(“rmi://ime.usp.br:2048 /ServidorHello”); String retorno=serv.sayHello(); } catch(Exception e);

Esquema da chamada cliente Stub “Oi cliente” ime.usp.br Registry lookup(.../Servidor) cliente Registry Servidor está aqui Solicitação de stub Servidor_Stub.class Stub Stub sayHello() Servidor_Skel.class “Oi cliente” Servidor..class

Exemplo II ( Calculadora) Interface public interface Calculator extends java.rmi.Remote { public long add(long a, long b) throws java.rmi.RemoteException; public long sub(long a, long b) public long mul(long a, long b) public long div(long a, long b) }

Exemplo II ( Calculadora) Implementação dos métodos public class CalculatorImpl extends java.rmi.server.UnicastRemoteObject implements Calculator { public CalculatorImpl() throws java.rmi.RemoteException { super(); } public long add(long a, long b) return a + b;

Exemplo II ( Calculadora) Implementação dos métodos(II) public long sub(long a, long b) throws java.rmi.RemoteException { return a - b; } public long mul(long a, long b) return a * b; public long div(long a, long b) return a / b;

Exemplo II ( Calculadora) Servidor import java.rmi.Naming; public class CalculatorServer { public CalculatorServer() { try { Calculator c = new CalculatorImpl(); Naming.rebind(" rmi://jaca.ime.usp.br:1099/ CalculatorService", c); } catch (Exception e) { System.out.println("Trouble: " + e); } public static void main(String args[]) { new CalculatorServer();

Exemplo II ( Calculadora) Cliente import java.rmi.Naming; public class CalculatorClient { public static void main(String[] args) { try { Calculator c = (Calculator) Naming.lookup( "rmi://jaca.ime.usp.br:1099/CalculatorService"); System.out.println( c.sub(4, 3) ); System.out.println( c.add(4, 5) ); System.out.println( c.mul(3, 6) ); System.out.println( c.div(9, 3) ); } catch (Exception e) { System.out.println(e);

Passagem de parâmetros 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

Funcionalidades adicionais do RMI É possível substituição dinâmica da interface remota enviada ao cliente É possível o servidor invocar, remotamente, algum serviço do cliente sem que o cliente estenda diretamente a classe java.rmi.server.UnicastRemoteObject.