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
Conhece endereço
RMI Naming Service
Look Up matching
Não existe
Exact String Match
Remote reference
Socket
Proxy object
Synchronous
Synchronous
Garbage Collection
Não existe
Não existe
Language paradigm
Streams
Method call
Localização
Synchronicity
 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/objdis
t/javarmi.html
Download

Adriano Reine Bueno Rafael Barros Silva