Java RMI
João Gabriel (jggxm)
RPC (Remote Procedure Call)
 Tecnologia
(Protocolo) de comunicação
entre processos
 Permite que um processo invoque um
método de outro processo que esteja em
seu espaço de endereçamento, mesmo
que este esteja em outro host na rede
 Torna mais fácil a implementação de
aplicações distribuídas, pois abstrai o
código referente à parte de comunicação
RMI (Remote Method Invocation)
 Permite
a chamada de métodos em
objetos que estão em outra máquina
virtual (geralmente em outro host) com a
mesma sintaxe da invocação local

Implementação do RPC para Java
É
exclusivo para aplicações em Java.
É
tipicamente cliente-servidor.
Conceitos
 Objeto
Remoto: É um objeto que pode
receber invocações remotas.
 Referência
a objeto remoto: Para que um
objeto possa invocar métodos de um
objeto remoto, ele deve ter acesso à
referência do mesmo.
Conceitos (Continuação)
 Interface
Remota: Todo objeto remoto
possui uma interface que especifica quais
dos métodos podem ser invocados
remotamente.
 Exceções:
Podem ocorrer por problemas
decorrentes da distribuição ou na
execução do método.
Considerações
 As
chamadas remotas têm um tempo de
resposta maior do que as chamadas
locais.
 As
chamadas remotas são
vulneráveis e possuem falhas
complexas.
mais
mais
Arquitetura
Stub:
 É uma classe gerada pelo compilador rmic
no lado do cliente e implementa a mesma
interface remota do lado do servidor.
 Não implementa os métodos diretamente
e sim traduz a invocação dos métodos
para o servidor.
Arquitetura(Continuação)
Stub(Continuação):
 Inicia a conexão com a JVM remota.
 Serializa os parâmetros para a JVM
remota (Marshaling).
 Desserializa os resultados ou exceções de
retorno.
 Entrega ao cliente o resultado ou exceção.
Arquitetura(Continuação)
Skeleton:
 É gerado pelo compilador rmic e fica do
lado do servidor.
 Implementa a interface remota.
 Desserializa(Unmarshaling) os parâmetros
para o método remoto.
 Invoca o método no objeto remoto.
 Serializa o valor de retorno ou exceção e
envia para o cliente.
Arquitetura(Continuação)
Arquitetura(Continuação)
 Seria
impraticável se para cada invocação
de método remoto fosse necessário incluir
a máquina e a porta de destino.
 O RMI oferece um serviço de nomes (RMI
Registry) que fornece informações sobre a
localização de objetos remotos.
Arquitetura(Continuação)
Implementação
 Inicialmente
defina a interface remota.
 Escreva o código do servidor que
implementa a interface.
 Escreva o código do cliente.
 Execute o servidor
 Execute o(s) cliente(s).
Exemplo
 Peguem

o exemplo clicando no link
http://www.cin.ufpe.br/~jggxm/infra-software/
Exercício
 Crie
um programa que permite imprimir
uma mensagem na tela de um
computador remoto utilizando RMI
Concorrência
 No
nosso exemplo podemos perceber que
caso dois clientes estejam acessando o
mesmo objeto Produto, se um resolver
alterar seu preço enquanto outro remove o
mesmo poderá haver uma inconsistência.
 Como resolver?
Concorrência(Continuação)

Basta colocarmos o modificador synchronized
em cada método da classe do objeto remoto
onde pode haver a geração de inconsistência.

Esse modificador faz com que um objeto que
está sendo acessado só possa ser acessado
novamente quando a tarefa que está sendo
realizada sobre ele seja concluida.
Vantagens do RMI
 Modelagem
fácil e natural de sistemas
distribuídos, abstraindo a parte de rede
 Sintaxe da chamada de método local é
igual à sintaxe da chamada de método
remoto
 Rápida difusão com a plataforma Java.
Desvantagens do RMI
 Para
cada máquina onde estão os objetos
remotos deve haver um servidor de
nomes
para
os
mesmos
serem
registrados.
 Como RMI usa comunicação síncrona, o
cliente não pode fazer outra tarefa
enquanto espera a resposta do servidor.
 São necessárias configurações adicionais
no firewall, causando restrições de acesso
e desempenho.
RMI x CORBA (Vantagens)
 RMI
é similar a CORBA, porém mais
simples pois não precisa lidar com
diferentes linguagens de programação.
 Como
tudo é implementado em Java, não
necessita de IDL, pois as interfaces são
definidas usando as próprias interfaces de
Java.
RMI x CORBA (Vantagens)
 RMI
permite que objetos possam ser
passados por valor facilmente.
 Com
RMI objetos podem ser transferidos
de servidores remotos para o cliente em
tempo de execução de forma segura.
RMI x CORBA (Desvantagens)
 RMI
é limitado a Java.
 Muitas
vezes é necessário implementar
partes do sistema em C++ por questões
de eficiência e a integração com Java não
é simples.
RMI x CORBA (Desvantagens)
 Desempenho
de RMI é menor em alguns
casos.
A
arquitetura de CORBA como um todo é
mais abrangente.
Referências





http://www.ucb.br/prg/professores/fgoulart/gsi_r
mi.pdf
http://www.dimap.ufrn.br/~thais/SD20071/RPCRMI.pdf
http://www.inf.pucrs.br/~celso/SistemasDistribui
dos/JavaRMI/RMI.pdf
https://dspace.ist.utl.pt/bitstream/2295/54860/1/0
4_-_RMI.pdf#search=%22invoke%20rmi%22
http://www.inf.ufsc.br/~mario/ine6502ch2.pdf
Download

Java_RMI