Concorrência e Java RMI
João Gabriel(jggxm)
Lucas Aranha(lab3)
RPC(Remote Procedure Call )
• Consiste em chamadas remotas a procedimentos
como se fossem locais.
• 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.
• É 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 mais vulneráveis e
possuem falhas mais complexas.
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 em
www.cin.ufpe.br/~jggxm/infra%20de%20softwar
e/
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
• As referências para RMI podem ser encontradas
no seguinte endereço:
www.cin.ufpe.br/~lab3/LinksRMI.txt
Download

Concorrencia e Java RMI