adriano reine bueno rafael barros silva - ufjf.br · exemplo prático ... objeto ativo em uma...
Post on 03-Oct-2018
216 Views
Preview:
TRANSCRIPT
Adriano Reine Bueno
Rafael Barros Silva
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
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
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.
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).
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
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)
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
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
Stub e Skeleton
Camada de Referência Remota
Camada de Transporte
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.
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.
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
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
É 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
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
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
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
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
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
Exemplo Prático
http://pt.wikipedia.org/wiki/RMI
dainf.ct.utfpr.edu.br/~tacla/EspSD/Aula3/0070-RMI-RPC.pdf
http://pt.wikibooks.org/wiki/Java_RMI
http://www.dca.fee.unicamp.br/cursos/PooJava/objdist/javarmi.html
top related