Remote Method Invocation

Slides:



Advertisements
Apresentações semelhantes
Sistemas distribuídos
Advertisements

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.
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.
Invocação de Métodos Remotos RMI
PROGRAMAÇÃO DISTRIBUÍDA EM JAVA Verão/2001
Chamada Remota de Procedimentos
Remote Method Invocation RMI
T. D. S. I. PARA WEB Prof. Emmanuel Nolêto. Java RMI.
RMI (Remote Method Invocation) Bruno Edson Plínio Tadeu
RMI Objetos Distribuídos Luiz C. D´oleron SCJP
RMI Java Remote Method Invocation em Java. Introdução Java Remote Method Invocation (Java RMI) permite desenvolver sistemas distribuídos baseados em Java.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos
Tratamento de exceções em Java Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de.
CLASSES EM JAVA Dilvan Moreira (baseado no livro Big Java)
UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA Sistemas Distribuídos Ciência da Computação 2o. Semestre / 2006 Prof. Fábio M. Costa
UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA Sistemas Distribuídos Ciência da Computação 2o. Semestre / 2006 Prof. Fábio M. Costa
Tecnologias para Internet Thyago Maia Tavares de Farias Aula 19.
Programação em Java RMI - Remote Method Invocation Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.
Diego Armando Gusava Mobile Command Orientador: Mauro Marcelo Mattos.
Test Driven Development (TDD) Carlos Morais Desenvolvimento Dirigido por Testes.
UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA Sistemas Distribuídos Ciência da Computação 2o. Semestre / 2006 Prof. Fábio M. Costa
UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA Sistemas Distribuídos Ciência da Computação 2o. Semestre / 2006 Prof. Fábio M. Costa
UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA Sistemas Distribuídos Ciência da Computação 2o. Semestre / 2006 Prof. Fábio M. Costa
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Classes Objetos Atributos Métodos Coletor de Lixo (Garbage Collector ) Confraria do Java Nivelamento. Caroline, Marcelo e Luiz 12/05/2007.
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal
AKKA.
UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA
Diges Feltrin Guizelini
Sistemas Distribuídos Aula 6
UML – Diagramas de componentes
AsyncTask e Socket no Android
APROM Aplicação para Gestão de Projetos
Linguagem C Para programadores Python
3.1 Classes e Objetos Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. Por exemplo, um programa de controle de.
Java: Interfaces Alcides Calsavara.
Unidade IV– Relacionamento entre Objetos
Invocação de Métodos Remotos (RMI) en Java
UML – Diagramas de Componentes e Modelação da Arquitectura Física
Programação Orientada a Objetos
Programação Orientada a Objetos
Diagramas de Sequência
Tipos de Arquivos Arquivos podem armazenar caracteres (arquivo texto) ou bytes (arquivos binários); Na prática, arquivos textos são abertos por editores.
Serviços na Internet: Caracterização e Acesso
SDK Openbus - Java Tecgraf PUC-Rio Setembro de 2013.
Elaborando as Interfaces Aulas 37, 38 e 39.
Curso Técnico em Informática
Programação Orientada a Objetos*
Rosemary Silveira Filgueiras Melo
Pacotes Servem para organizar o código, por exemplo, agrupar classes correlatas. Vamos supor uma classe Ponto2D pertencente ao pacote formas. A classe.
Programação Orientada a Objetos*
Rosemary Silveira Filgueiras Melo
Rosemary Silveira Filgueiras Melo
Sistemas Distribuídos
Laboratório I Mateus Raeder.
Laboratório I Mateus Raeder.
Laboratório I Mateus Raeder.
Curso básico de PHP. 1 Vantagens: Gratuito Multiplataforma Estável Rapidez Comunicação.
Visual Basic TCP.
Tipos Primitivos de Dados
Prática - BD Distribuído
A classe String.
Ordenando Coleções A Classe Collections.
Programação Orientada a Objetos
Compiladores – Introdução
Unidade VI – Exceções e Interfaces
Constantes, Variáveis e Memória
RESULUÇÃO DOS EXERCÍCIOS E
Percorrendo coleções com Iterator
Remote Method Invocation (RMI) Sistemas Distribuídos.
Transcrição da apresentação:

Remote Method Invocation Descrição geral Criação de um servidor RMI Criação de um cliente RMI

Gab. F269 nribeiro@est.ips.pt Introdução O sistema de Remote Method Invocation da linguagem JAVA, permite invocar métodos de objectos que estão a correr noutra máquina virtual. O RMI fornece mecanismos para comunicação remota, entre objectos criados na linguagem Java. Nuno Valero Ribeiro Gab. F269 nribeiro@est.ips.pt 13-10-2018

Descrição geral de uma aplicação RMI Aplicações RMI são normalmente constituídas por 2 programas: O servidor Cria objectos remotos (que serão evocados através do sistema RMI). Torna as referências para estes objectos acessíveis. Espera por chamadas dos clientes aos métodos dos objectos criados. O cliente Obtém referências para os objectos remotos a disponibilizados pelo servidor. Evoca os métodos dos objectos como se estes fossem locais. O sistema RMI fornece os mecanismos que permite a comunicação entre o cliente e o servidor. Este tipo de aplicações designam-se normalmente por “Aplicações de Objectos Distribuídos” ou “Aplicações distribuídas”. Nuno Valero Ribeiro Gab. F269 nribeiro@est.ips.pt 13-10-2018

Aplicações de objectos distribuídos Uma aplicação de objectos distribuídos suportada sobre RMI tem que: Localizar os objectos remotos (obter referências) Através do sistema de nomes do RMI (rmiregistry). Através da passagem de referências para objectos remotos no decorrer das operações da aplicação. Carregar os dados (serialização) e o código (bytecodes) dos objectos remotos (carregamento dinâmico de código). Nuno Valero Ribeiro Gab. F269 nribeiro@est.ips.pt 13-10-2018

Interfaces, Objectos e métodos Remotos À semelhança de uma aplicação Java tradicional, uma aplicação distribuída, que usa RMI, é constituída por interfaces e classes. Interfaces definem os métodos Classes implementam os métodos definidos nas interfaces e, possivelmente, métodos adicionais. Objectos que possuem métodos que podem ser evocados de outras máquinas virtuais são chamados Objectos Remotos . Os objectos de uma classe tornam-se remotos se esta implementar uma interface remota. Uma interface remota tem as seguintes características: Deriva (estende) da interface java.rmi.Remote. Cada método desta interface tem que declarar na cláusula de throws a excepção java.rmi.RemoteException, além das excepções específicas de cada método. Nuno Valero Ribeiro Gab. F269 nribeiro@est.ips.pt 13-10-2018

Stub e Skeleton classes O sistema RMI trata de forma diferente os objectos remotos dos restantes, quando estes são passados de uma máquina virtual (JVM) para outra. Objectos não remotos Enviada uma cópia para a JVM destino. Objectos remotos É enviado um objecto stub (proxy) para o objecto remoto. Stub É a referência local para o objecto remoto. Implementa o mesmo conjunto de interfaces remotas que o objecto remoto. Pode ser feito uma coerção (cast) do objecto stub para qualquer uma das interfaces remotas. Apenas os métodos definidos nestas interfaces podem ser evocados pelo cliente. O cliente evoca os métodos do stub. Enviam (serializam) os parâmetros de entrada de método para um agente existente no servidor (skeleton) , através de uma ligação TCPIP Recebem, através da ligação com skeleton, os parâmetros de retorno, após este ter evocado o método correspondente do objecto remoto. Retorna os parâmetros recebidos ao cliente. Skeleton Recebe do stub, os parâmetros de entrada do método. Evoca o método do objecto remoto com os parâmetros recebidos. Recebe os parâmetros de retorno do objecto remoto e retorna-os (serialização) ao stub. Nuno Valero Ribeiro Gab. F269 nribeiro@est.ips.pt 13-10-2018

Fluxo de dados de uma evocação RMI Nuno Valero Ribeiro Gab. F269 nribeiro@est.ips.pt 13-10-2018

Geração de uma aplicação RMI Para gerar uma aplicação distribuída com o RMI, devem ser seguidos os seguintes passos: Definir e implementar os componentes distribuídos (remotos) Definir as interfaces remotas. Implementar as classes dos objectos remotos Estas classes implementam uma ou mais interfaces remotas, e podem implementar outras interfaces (não remotas) que apenas terão visibilidade local. Implementar clientes. Os clientes podem ser implementados a partir do momento que as interfaces remotas estiverem definidas e compiladas. Compilar as sources e gerar os stubs (rmic) Compilar as sources com a implementação das interfaces remotas (javac). Criar os stubs (stub e skel) para os objectos remotos (rmic). Disponibilizar as classes necessárias ao cliente. Disponibilizar, através de um protocolo de URL, todas as classes necessárias ao cliente. Implementar cliente. Iniciar a aplicação Iniciar a aplicação de registo de objectos remotos (rmiregistry). Criar os objectos servidores, e regista-los no rmiregistry. Iniciar o cliente. Nuno Valero Ribeiro Gab. F269 nribeiro@est.ips.pt 13-10-2018

1. Definir e implementar componentes distribuídos Definição das interfaces Remotas package serverInterfaces.remote; import java.rmi.Remote; import java.rmi.RemoteException; import java.math.BigInteger; public interface Operator extends Remote { BigInteger add(BigInteger b1, BigInteger b2) throws RemoteException; BigInteger subtract(BigInteger b1, BigInteger b2) throws RemoteException; BigInteger divide(BigInteger b1, BigInteger b2) throws RemoteException; BigInteger multiply(BigInteger b1, BigInteger b2) throws RemoteException; } Nuno Valero Ribeiro Gab. F269 nribeiro@est.ips.pt 13-10-2018

1. Definir e implementar componentes distribuídos Implementação das classes Remotas public class OperatorServer extends UnicastRemoteObject implements Operator { public OperatorServer() throws RemoteException { } public BigInteger add(BigInteger b1, BigInteger b2) throws RemoteException { return b1.add(b2); } public BigInteger subtract(BigInteger b1, BigInteger b2) throws RemoteException { return b1.subtract(b2); public BigInteger divide(BigInteger b1, BigInteger b2) throws RemoteException { return b1.divide(b2); public BigInteger multiply(BigInteger b1, BigInteger b2) throws RemoteException { return b1.multiply(b2); public static void main(String []args) { System.setSecurityManager(new RMISecurityManager()); String name = "//localhost/OperatorServer"; try { OperatorServer os = new OperatorServer(); Naming.rebind(name,os); System.out.println(name + "bound"); } catch (Exception e) { System.err.println("OperatorServer exception: " + e.getMessage()); e.printStackTrace(); Nuno Valero Ribeiro Gab. F269 nribeiro@est.ips.pt 13-10-2018

2. Compilar as sources e gerar os stubs C:\OperatorServer> javac OperatorServer.java C:\OperatorServer> rmic OperatorServer C:\OperatorServer> dir <DIR> . <DIR> .. OperatorServer.class OperatorServer.java OperatorServer_Skel.class OperatorServer_Stub.class java.policy <DIR> serverInterfaces Nuno Valero Ribeiro Gab. F269 nribeiro@est.ips.pt 13-10-2018

3. Disponibilizar as classes necessárias ao cliente As classes stub vão, numa primeira versão, ser disponibilizadas ao servidor através do protocolo file na directoria c:\ServerOperator Nuno Valero Ribeiro Gab. F269 nribeiro@est.ips.pt 13-10-2018

4. Implementação do cliente import java.rmi.*; import serverInterfaces.remote.*; import java.math.*; import java.lang.*; public class OperatorClient { public static void main(String args[]) { System.setSecurityManager(new RMISecurityManager()); String name = "//localhost/OperatorServer"; try { Operator o = (Operator)Naming.lookup (name); BigInteger b1 = new BigInteger("1234567"); BigInteger b2 = new BigInteger("1"); BigInteger b3 = o.add(b1, b2); System.out.println("b3: " + b3); } catch( Exception e) { System.out.println(e); e.printStackTrace(); } Nuno Valero Ribeiro Gab. F269 nribeiro@est.ips.pt 13-10-2018

Gab. F269 nribeiro@est.ips.pt 5. Iniciar a aplicação rmiregistry Esta aplicação é o serviço onde os objectos remotos se vão registar, e onde os clientes vão pedir referências para os objectos remotos. Esta aplicação deve ser iniciada sem a variável de ambiente CLASSPATH definida. C:\> rmiregistry O código de registo do objecto servidor já está implementado no método main da classe dos objecto servidor. C:\> C:\OperatorServer> java –Djava.rmi.server.codebase=file:/c:\OperatorServer/ –Djava.security.policy=java.policy OperatorServer Iniciar o cliente C:\> C:\OperatorClient> java –Djava.security.policy=java.policy OperatorClient Nuno Valero Ribeiro Gab. F269 nribeiro@est.ips.pt 13-10-2018

Gab. F269 nribeiro@est.ips.pt Ficheiros java.policy Ficheiro java.policy do servidor grant { permission java.net.SocketPermission "*:1024-", "connect"; }; Ficheiro java.policy do cliente grant { permission java.net.SocketPermission "*:1024-", "connect"; permission java.io.FilePermission "D:\\OperatorServer\\-", "read"; } Nuno Valero Ribeiro Gab. F269 nribeiro@est.ips.pt 13-10-2018