22
Adriano Reine Bueno Rafael Barros Silva

Adriano Reine Bueno Rafael Barros Silva - ufjf.br · Exemplo prático ... objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java,

  • Upload
    lamcong

  • View
    215

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Adriano Reine Bueno Rafael Barros Silva - ufjf.br · Exemplo prático ... objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java,

Adriano Reine Bueno

Rafael Barros Silva

Page 2: Adriano Reine Bueno Rafael Barros Silva - ufjf.br · Exemplo prático ... objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java,

Introdução

RMI

Tecnologias Semelhantes

Arquitetura RMI

Funcionamento

Serialização dos dados

Criando Aplicações Distribuídas com RMI

Segurança

Exemplo prático

Referências

Page 3: Adriano Reine Bueno Rafael Barros Silva - ufjf.br · Exemplo prático ... objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java,

Sistemas distribuídos requerem que aplicações executando em diferentes espaços de endereçamento, potencialmente em máquinas diferentes, sejam capazes de trocar dados

Java RMI é o mecanismo que permite um objeto invocar um método de outro objeto que existe em outro espaço de endereçamento

A invocação de método remoto permite que um objeto executando sobre uma determinada JVM invoque métodos sobre um objeto executando sobre outra JVM

Page 4: Adriano Reine Bueno Rafael Barros Silva - ufjf.br · Exemplo prático ... objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java,

Sockets: mecanismo básico de comunicação grande flexibilidade, mas complexidade de

programação.

RPC: comunicação abstraída para o nível do procedimento. abstração desenquadrada do modelo de programação,

inapropriado para Java.

RMI: comunicação fundida com o mecanismo de invocação de métodos integração com o modelo de programação.

Page 5: Adriano Reine Bueno Rafael Barros Silva - ufjf.br · Exemplo prático ... objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java,

Java Orientada a objetos

Possui diversas APIs

Multi-plataforma: Java Virtual Machine (JVM)

Integrada à Internet: Applets, JavaScript, JSP, Servlets

Suporte a componentes: JavaBeans

Fácil aprendizagem e boa aceitação entre programadores

J2SE (para desktops) e J2EE (para servidores) possuem suporte para a invocação remota de métodos (RMI).

Page 6: Adriano Reine Bueno Rafael Barros Silva - ufjf.br · Exemplo prático ... objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java,

RMI é uma interface de programação que permite que um programa rodando em uma dada máquina efetue chamadas à objetos instanciados em outra máquina

Através da utilização da arquitetura RMI, é possível que um objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java, independentemente da localização dessas máquinas virtuais

Aplicações RMI geralmente consistem de dois programas separados Cliente e servidor

Page 7: Adriano Reine Bueno Rafael Barros Silva - ufjf.br · Exemplo prático ... objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java,

Pacote java.rmi API para implementação de objetos clientes, servidores e

interfaces API para utilizar os serviços de runtime

Serviços de runtime Registro de objetos remotos (permite localizá-los)

Ferramentas JRMI: Primeira aparição: JDK 1.1 Até JDK 1.4: compilador rmic para gerar stubs Após: Stubs podem ser gerados automaticamente pela JVM (a

partir de JDK 1.5)

Page 8: Adriano Reine Bueno Rafael Barros Silva - ufjf.br · Exemplo prático ... objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java,

Socket RMI

Transporte UDP / TCP JRMP

Descrição do Serviço Não existe Java Interface

Localização Conhece endereço RMI Naming Service

Look Up matching Não existe Exact String Match

Remote reference Socket Proxy object

Synchronicity Synchronous Synchronous

Garbage Collection Não existe Não existe

Language paradigm Streams Method call

Page 9: Adriano Reine Bueno Rafael Barros Silva - ufjf.br · Exemplo prático ... objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java,

Existem duas outras tecnologias que se assemelham muito com a RMI: CORBA

Já a tecnologia CORBA é divulgada à mais tempo e possui a vantagem de possuir bibliotecas em diversas linguagens, assim um objeto CORBA pode ser utilizado em vários programas escritos em linguagens diferentes

.NET Remoting Pode ser vista como a resposta Microsoft à tecnologia RMI, e

possui quase as mesmas características

A tecnologia RMI foi feita exclusivamente para a plataforma Java

Page 10: Adriano Reine Bueno Rafael Barros Silva - ufjf.br · Exemplo prático ... objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java,

Stub e Skeleton

Camada de Referência Remota

Camada de Transporte

Page 11: Adriano Reine Bueno Rafael Barros Silva - ufjf.br · Exemplo prático ... objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java,

Stub Representa o servidor para o cliente

Efetua serialização e envio dos parâmetros

Recebe a resposta do servidor, desserializa e entrega ao cliente

Skeleton Recebe a chamada e desserializa os parâmteros enviados

pelo cliente

Faz a chamada no servidor e retorna o resultado ao cliente.

Page 12: Adriano Reine Bueno Rafael Barros Silva - ufjf.br · Exemplo prático ... objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java,

Camada de Referência Remota Responsável pela localização dos objetos nas máquinas

da rede Permite que referências para um objeto servidor remoto

sejam usadas pelo cliente para chamar métodos

Camada de Transporte Cria e gerencia conexões de rede entre objetos remotos Elimina a necessidade do código cliente ou do servidor

interagirem com o suporte da rede É baseada nas conexões TCP/IP entre as máquinas em

uma rede.

Page 13: Adriano Reine Bueno Rafael Barros Silva - ufjf.br · Exemplo prático ... objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java,

O servidor, ao iniciar, se registra no serviço de nomes (RMI Registry)

O cliente obtém uma referência para o objeto servidor no serviço de nomes e cria o stub

O cliente chama o método na stub fazendo uma chamada local

A stub serializa os parâmetros e transmite a chamada pela rede para o skeleton do servidor

Page 14: Adriano Reine Bueno Rafael Barros Silva - ufjf.br · Exemplo prático ... objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java,

O skeleton do servidor recebe a chamada pela rede, desserializa os parâmetros e faz a chamada do método no objeto servidor

O objeto servidor executa o método e retorna um valor para o skeleton, que o desserializa e o envia pela rede à stub do cliente

A stub recebe o valor do retorno serializado, o desserializa e por fim o repassa ao cliente

Page 15: Adriano Reine Bueno Rafael Barros Silva - ufjf.br · Exemplo prático ... objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java,

É preciso serializar e desserializar os parâmetros da chamada e valores de retorno para transmiti-los através da rede

Utiliza o sistema de serialização de objetos da máquina virtual Tipos pré-definidos pela linguagem

Objetos serializáveis: implementam interface java.io.serializable

Page 16: Adriano Reine Bueno Rafael Barros Silva - ufjf.br · Exemplo prático ... objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java,

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

Page 17: Adriano Reine Bueno Rafael Barros Silva - ufjf.br · Exemplo prático ... objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java,

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.

Implemente os clientes

Page 18: Adriano Reine Bueno Rafael Barros Silva - ufjf.br · Exemplo prático ... objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java,

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

Page 19: Adriano Reine Bueno Rafael Barros Silva - ufjf.br · Exemplo prático ... objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java,

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

Page 20: Adriano Reine Bueno Rafael Barros Silva - ufjf.br · Exemplo prático ... objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java,

O RMI fornece o "RMISecurityManager", sem o qual objetos locais se tornam incapazes de baixar código ou utilizar métodos remotos

O RMISecurityManager segue o modelo de segurança do JDK 1.6 no qual o código, local ou remoto, é sempre executado sob uma política de segurança A política de segurança define um conjunto de

permissões disponíveis para o código Cada permissão define um acesso a um recurso em

particular, como por exemplo, permissão de leitura ou escrita a um diretório específico ou permissão de conexão para um host e porta

Page 21: Adriano Reine Bueno Rafael Barros Silva - ufjf.br · Exemplo prático ... objeto ativo em uma máquina virtual Java possa interagir com objetos de outras máquinas virtuais Java,

Exemplo Prático