Sistemas Distribuídos



Documentos relacionados
SISTEMAS DISTRIBUÍDOS

Tutorial RMI (Remote Method Invocation) por Alabê Duarte

Invocação de Métodos Remotos

Adriano Reine Bueno Rafael Barros Silva

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

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

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

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

Sistemas Distribuídos Métodos de Invocação Remota II. Prof. MSc. Hugo Souza

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

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

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

Sistemas Distribuídos Métodos de Invocação Remota IV. Prof. MSc. Hugo Souza

Laboratório de Computação VI JAVA IDL. Fabricio Aparecido Breve

Sistemas Distribuídos: Conceitos e Projeto Java RMI

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

Grupo I [6v] Considere o seguinte extracto de um programa de definição de uma calculadora apenas com a função soma de dois valores reais

Programação de Computadores - I. Profª Beatriz Profº Israel

Sistemas Distribuídos

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

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

Sistemas Distribuídos

Sistemas Distribuídos

INF01018 Aula Prática 2 RMI Remote Method Invocation

APÊNDICE A EXEMPLO DE APLICAÇÃO

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

Descrição. Implementação. Departamento de Informática e Estatística Universidade Federal de Santa Catarina LAB 4 Transferência de Arquivos

Um pouco do Java. Prof. Eduardo

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Aplicações, durante a execução, podem incorrer em muitas espécies de erros de vários graus de severidade Quando métodos são invocados sobre um objeto:

Orientação a Objetos com Java

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

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp

insfcanceof new public switch transient while byte continue extends for int null

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

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões

Sistemas Distribuídos RPC x RMI. Edeyson Andrade Gomes

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Linguagem de Programação III

Java. Marcio de Carvalho Victorino

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

1.6. Tratamento de Exceções

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

Capítulo V Sistemas de Objectos Distribuídos

3 SCS: Sistema de Componentes de Software

Invocação Remota MC704

Informática UFRGS. Programação com Objetos Distribuídos (C. Geyer) C# Remote V0 1

Java 2 Standard Edition Como criar classes e objetos

Prova de Java. 1) Copie o programa abaixo no eclipse e complete-o, utilizando os conceitos aprendidos durante o curso. (4 pontos)

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

Acesso a Banco. Conexão em Java. Conexão em Java. Programação Orientada a Objetos Profa. Cristiane e Prof. Daniel

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)

Enterprise Java Beans

Guia de Fatores de Qualidade de OO e Java

Desenvolvimento de Aplicações Java/CORBA

Java RMI. Alcides Calsavara

Para desenvolver a atividade a atividade desta aula utilizaremos o ambiente de desenvolvimento integrado NetBeans.

Prática da Disciplina de Sistemas Distribuídos Serviços Web IFMA DAI Professor Mauro Lopes C. Silva

RMI/JNDI - Fundamentos

Introdução ao Modelos de Duas Camadas Cliente Servidor

Java : Comunicação Cliente-Servidor.

Alocação Dinâmica e Transparente de Computadores Ociosos em Java

Java para Desenvolvimento Web

Objetos distribuídos. Roteiro. Java IDL

Curso de Aprendizado Industrial Desenvolvedor WEB

Orientação a Objetos

Programação Orientada a Objetos em Java

FBV - Linguagem de Programação II. Um pouco sobre Java

Prototype, um Design Patterns de Criação

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

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

Técnicas de Programação II

Padrões Arquiteturais. Sistemas Distribuídos: Broker

Introdução a Java. Hélder Nunes

Exemplos práticos do uso de RMI em sistemas distribuídos

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

Documentação Usando o Javadoc

Módulo 07 Características Avançadas de Classes

Objetivos: Entender o funcionamento dos programas Java via linha de comando

Sistemas Distribuídos

Sobre o Professor Dr. Sylvio Barbon Junior

Padrão Arquitetura em Camadas

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.

8 Classes Internas. Desenvolvimento OO com Java. Vítor E. Silva Souza

Implementando uma Classe e Criando Objetos a partir dela

Exercícios de Revisão Java Básico

CURSO DE PROGRAMAÇÃO EM JAVA

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse

Laboratório I Aula 2

Exemplo 1. Um programa que cria uma instância de uma classe que herda da classe Frame

Programação online em Java

RMI: Uma Visão Conceitual

Programação Orientada a Objetos em java. Polimorfismo

Transcrição:

Sistemas Distribuídos Marcelo Lobosco DCC/UFJF

Comunicação em Sistemas Distribuídos Aula 06

Agenda Modelo Cliente-Servidor (cont.) Invocação Remota de Método (Remote Method Invocation RMI) Visão Geral Criando aplicações distribuídas com RMI Escrevendo código do servidor Escrevendo código do cliente Compilando e executando o exemplo

Visão Geral RMI provê suporte para comunicação remota entre programas escritos na linguagem de programação Java Java RMI permite que um objeto executando em uma Máquina Virtual Java (MVJ) invoque métodos de um objeto executando em uma segunda MVJ Aplicações RMI geralmente consistem de dois programas separados Cliente e servidor

Visão Geral Típico programa servidor cria algum(ns) objeto(s) remoto(s), torna a(s) referência(s) a este(s) objeto(s) acessível(ies) e aguarda o(s) cliente(s) invocarem métodos neste(s) objeto(s) Típico programa cliente obtêm uma referência remota para um ou mais objetos remotos em um servidor e então invoca métodos neste(s) RMI provê o mecanismo pelo qual clientes e servidores se comunicam e passa informações de um lado para o outro

Visão Geral Tais aplicações algumas vezes chamadas sistemas de objetos distribuídos (OD). Ações necessárias em um sistema de OD: Localizar os objetos remotos Comunicar com objetos remotos Ler definições de classes para objetos que são passados como parâmetro / retorno

Visão Geral Localizar objetos remotos Vários mecanismos podem ser utilizados para obter referência de objetos remotos Aplicação pode registrar seus objetos remotos em um serviço especial de registro de nomes, RMI registry Referências remotas podem ser passadas / retornadas como parte de invocações remotas Comunicar com objetos remotos Detalhes da comunicação com objetos remotos são tratados por RMI Para programador, comunicação remota similar a invocação tradicional de métodos

Visão Geral Ler definições de classes para objetos que são passados como parâmetro / retorno RMI permite que objetos sejam passados como parâmetro / retorno RMI provê mecanismos para ler definição da classe de um objeto Java é uma linguagem dinâmica RMI provê mecanismos para transmitir estado de um objeto

Visão Geral

Visão Geral Figura ilustra aplicação RMI distribuída que usa registro para obter referência para objeto remoto Servidor chama registro para associar (ou ligar bind) um nome a um objeto remoto Cliente procura por objeto remoto pelo seu nome no registro do servidor e então invoca um método neste objeto Webserver pode ser usado por sistema RMI para ler definição de classes para objetos necessários Tanto do lado do cliente quanto do servidor

Visão Geral Interfaces, objetos e métodos remotos Como qualquer aplicação Java, aplicação distribuída composta de classes e interfaces Interfaces declaram métodos Classes implementam métodos declarados na interface, podendo declarar métodos adicionais Em uma aplicação distribuída, implementações podem residir em máquinas virtuais distintas Objetos com métodos que podem ser invocados por diferentes MVJ são chamados de objetos remotos

Visão Geral Objeto torna-se remoto quando implementa um interface remota, que possui as seguintes características: Uma interface remota estende a interface java.rmi.remote Cada método da interface declara java.rmi.remoteexception em sua cláusula throws, em adição a qualquer exceção específica da aplicação

Visão Geral RMI trata objetos remotos de forma distinta dos objetos locais quando o objeto é passado de uma MVJ para outra Ao invés de copiar na MVJ o objeto de implementação invocado, RMI passa um stub remoto para um objeto remoto Stub age como representante local (proxy) do objeto remoto Basicamente stub é, para o cliente, a referência remota Cliente invoca método no stub local, que é responsável por repassar a chamada para o objeto remoto

Visão Geral Stub para um objeto remoto implementa o mesmo conjunto de interfaces remotas que o objeto remoto implementa Somente métodos definidos na interface remota podem ser chamadas pela MVJ onde clientes executam cliente stub servid or Máquina do cliente Máquina do servidor

Criando Aplicações Distribuídas com RMI Passos gerais para desenvolver aplicação distribuída com RMI: Projetar e implementar os componentes de sua aplicação distribuída Compilar os fontes Tornar as classes acessíveis via rede Iniciar a aplicação

Criando Aplicações Distribuídas com RMI Projetar e implementar os componentes de sua aplicação distribuída Inicialmente, determine a arquitetura de sua aplicação, definindo componentes locais e componentes acessíveis remotamente: Defina as interfaces remotas: especifica métodos que podem ser invocados remotamente por um cliente Defina tipos dos parâmetros e retorno dos métodos Implemente os objetos remotos: objetos remotos devem implementar uma ou mais interfaces Podem incluir implementações de interfaces e métodos disponíveis apenas localmente

Criando Aplicações Distribuídas com RMI Projetar e implementar os componentes de sua aplicação distribuída (cont) Implemente o(s) clientes Compile os fontes Como qualquer programa java, use javac para compilar os programas fonte Declarações de interfaces remotas, suas implementações, outras classes de serviço, clientes Versões anteriores a JSE 5.0 necessitam do rmic

Criando Aplicações Distribuídas com RMI Tornar as classes acessíveis via rede Neste passo, torne certas definições de classes acessíveis via rede Como definições para interfaces remotas e seus tipos associados, e definições de classes que precisam ser acessadas por clientes e servidores Geralmente tornam-se acessíveis através de um servidor web Iniciar a aplicação Inclui, além do cliente e do servidor, o serviço de registro de nomes, rmiregistry

Criando Aplicações Distribuídas com RMI Passagem de parâmetros Qualquer tipo primitivo, objeto remoto ou objeto local, pode ser passado como parâmetro em chamadas RMI No caso de objeto local, além de acessível via rede, deve ser também serializável Para objeto ser considerado serializável, sua classe deve implementar a interface java.io.serializable

Exemplo de Aplicação: Calculadora Distribuída Servidor oferece serviços de uma calculadora Funcionalidade simples: soma, subtração, multiplicação e divisão com dois inteiros Cliente faz uso dos serviços Faz invocação, passando parâmetros e imprimindo resultado Objetivo: ilustrar o funcionamento de RMI Naturalmente que overhead proibitivo para aplicação real Serviço muito simples

Interface Primeiro passo: projetar interface remota Que serviços serão oferecidos? Quais os parâmetros necessários? Quais os tipos dos valores retornados? Quais exceções podem ocorrer?

Interface package exemplo; import java.rmi.remote; import java.rmi.remoteexception; import exemplo.divisaoporzero; public interface Calculadora extends Remote { float som (float a, float b) throws java.rmi.remoteexception; float sub (float a, float b) throws java.rmi.remoteexception; float mul (float a, float b) throws java.rmi.remoteexception; float div (float a, float b) throws DivisaoPorZero, java.rmi.remoteexception; }

Interface Ao estender a interface java.rmi.remote, a interface Calculadora identifica-se como uma interface que pode receber requisições de outras MVJ Qualquer classe que implemente esta interface pode produzir objetos remotos Métodos da interface Calculadora podem ser executados remotamente Logo devem ser capazes de sinalizar exceção java.rmi.remoteexception Sinaliza ocorrência de falha de comunicação ou erro de protocolo

Implementação da Interface De modo geral, classe que implementa interface remota deve seguir, no mínimo, os seguintes passos: Declarar as interfaces remotas sendo implementadas Definir o construtor para cada objeto remoto Prover uma implementação para cada método remoto declarado nas interfaces remotas

Implementação da Interface Programa servidor RMI deve: Criar os objetos remotos e Exportá-los para o sistema runtime do RMI Sistema runtime torna-os aptos a receber invocações remotas Este processo de configuração pode ser: Encapsulado em um método da implementação da interface remota ou Incluído completamente em outra classe Roteiro do processo de configuração: Criar e instalar um gerente de segurança Criar e exportar um ou mais objetos remotos Registrar ao menos um objeto remoto no registro de nomes do RMI (ou outro serviço de nomes)

Implementação da Interface package exemplo; import java.rmi.remoteexception; import java.rmi.registry.locateregistry; import java.rmi.registry.registry; import java.rmi.server.unicastremoteobject; import exemplo.calculadora; import exemplo.divisaoporzero; public class CalculadoraImpl implements Calculadora{ public CalculadoraImpl() { super(); }

Implementação da Interface public float som (float a, float b) { return a+b; } public float sub (float a, float b) { return a-b; } public float mul (float a, float b) { return a*b; } public float div (float a, float b) throws divisaoporzero { if (b == 0) throw new divisaoporzero(); return a/b; }

Implementação da Interface public static void main(string[] args) { if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManager()); } try { String name = "Calculadora"; Calculadora calc = new CalculadoraImpl(); Calculadora stub = (Calculadora)UnicastRemoteObject.exportObject(calc,0); Registry registry = LocateRegistry.getRegistry(); registry.rebind(name, stub); System.out.println("Calculadora registrada!"); } catch (Exception e) { System.err.println("Ocorreu excecao: "); e.printstacktrace(); } } }

Implementação da Interface Declarando a interface remota sendo implementada: public class CalculadoraImpl implements Calculadora Podemos criar objetos remotos da classe CalculadoraImpl Alguns dos seus métodos, entretanto, só podem ser invocados localmente Construtor e método main

Implementação da Interface Definindo o construtor para o objeto remoto public CalculadoraImpl() { super(); } Em nosso caso, apenas invoca construtor da classe ancestral Apesar de não ser necessário, foi adicionado por questões de clareza de código

Implementação da Interface Provendo implementações para cada método remoto Classe provê implementações para todos os métodos declarados na interface som, sub, mul, div Passagem de parâmetros em Java segue as seguintes regras Objetos remotos passados por referência Objetos locais passados por cópia Todos os campos, exceto declarados estáticos ou transientes Desde que serializáveis e classes acessíveis (por exemplo, via servidor web)

Implementação da Interface Implementação do método main Primeira tarefa: instalar o gerente de segurança Protege o acesso aos recursos do sistema Determina, por exemplo, se código pode ter acesso ao sistema local de arquivos ou realizar qualquer outra ação privilegiada Receita de bolo: if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManager()); }

Implementação da Interface Implementação do método main Segunda tarefa: tornar os objetos remotos disponíveis para o cliente Instanciar objeto Exportar objeto, com UnicastRemoteObject.exportObject, de forma que ele possa receber chamadas remotas: Calculadora stub = (Calculadora)UnicastRemoteObject.exportObject(calc,0); Segundo parâmetro indica número da porta TCP a ser ouvida Zero indica porta anônima Porta real escolhida por SO ou RMI

Implementação da Interface Implementação do método main Método exportobject retorna stub para objeto remoto exportado Observe que tipo do stub deve ser da interface, e não da implementação Antes do cliente invocar um objeto em um objeto remoto, deve primeiro obter referência para objeto remoto Registro faz esse papel Serviço de nomes, que fornece uma referência para objeto remoto, dado um nome

Implementação da Interface Servidor registra nome no serviço de nomes String name = "Calculadora"; Registry registry = LocateRegistry.getRegistry(); registry.rebind(name, stub); Rebind faz chamada remota para registro localizado na máquina do servidor Como qualquer chamada remota, pode retornar exceção, que deve ser tratada Bloco try/catch faz tratamento

Implementando o Cliente package exemplo; import java.rmi.registry.locateregistry; import java.rmi.registry.registry; public class CalculadoraClnt { public static void main(string args[]) { if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManager()); }

Implementando o Cliente } } try { String name = "Calculadora"; Registry registry = LocateRegistry.getRegistry(args[0]); Calculadora calc = (Calculadora) registry.lookup(name); System.out.println("2 + 2 = " + calc.som(2,2)); } catch (Exception e) { System.err.println("Calculadora exception:"); e.printstacktrace(); }

Implementando o Cliente Assim como servidor, começamos declarando gerente de segurança Necessário se cliente fizer download de código do servidor a partir do servidor web if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManager()); } Próximo passo: localizar referência para objeto remoto String name = "Calculadora"; Registry registry = LocateRegistry.getRegistry(args[0]); Calculadora calc = (Calculadora) registry.lookup(name);

Implementando o Cliente Passo final: usar as funcionalidades do objeto remoto, através de seus métodos, da mesma forma que usaríamos as funcionalidades de um objeto local System.out.println("2 + 2 = " + calc.som(2,2));

Compilação e Execução Para compilar: Compilar com javac *.java Criar arquivo jar com classes relacionadas ao servidor: jar cvf server.jar Calculadora.class CalculadoraImpl.class divisaoporzero.class Caso código do servidor seja acessado através de servidor web, disponibilizar arquivo jar em pasta acessível via rede Caso alguma classe do cliente seja acessada pelo servidor, deve-se criar jar e disponibilizálo através da rede

Compilação e Execução Antes de executar: Criar arquivo contendo políticas de segurança Neste exemplo, daremos todas as permissões de acesso: grant { permission java.security.allpermission; };

Compilação e Execução Para executar: Iniciar rmiregistry (rmiregistry&) Iniciar servidor: java -Djava.security.policy=f:\ calc\exemplo\secpolicy -Djava.rmi.server.codebase=file:\f:calc\exempl o\server.jar CalculadoraImpl Iniciar cliente: java -Djava.security.policy=f:\calc\exemplo\secpoli cy CalculadoraClnt localhost Resultado: 2 + 2 = 4.0

Próxima Aula... Remote Procedure Call (cont.) Questões de Implementação Problemas