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