O documento discute o RMI (Remote Method Invocation), uma API Java para desenvolvimento de aplicações distribuídas. O RMI permite que objetos em uma JVM chamem métodos em objetos localizados em outras JVMs, de forma transparente ao desenvolvedor. O documento explica conceitos como portabilidade, arquitetura, funcionamento e exemplos de uso do RMI.
3. Introdução Objetos distribuídos: Forma de implementar aplicações cliente/servidor; Isolam clientes da implementação dos serviços; Protocolo básico: Cliente manda mensagem a um objeto remoto (através de uma interface de serviços); Objeto interpreta mensagem; Objeto seleciona um comportamento, que será executado pelo próprio objeto ou por um broker (intermediário / agente);
4. Introdução RMI (Remote MethodInvocation) genérico: “A RPC (Remote Procedure Call) está para a RMI assim como a chamada de procedimento está para a invocação de objetos.” (Coulouris et al., 2007) Implementada em uma camada de middleware; Camada de middleware (Coulouris et al., 2007)
5. Introdução O que é Java RMI? Interface de programação (API) para Java RPC com a flexibilidade do Java, i. e., da orientação a objetos Ex: polimorfismo Objetos distribuídos Comunicação entre JVMs
6. Introdução Filosofia do Java: “Escreva uma vez, rode em qualquer lugar”; RMI estende esse modelo: “Rode em todos os lugares”;
7. Portabilidade Conexão com sistemas legados: JNI (Java Native Interface); Conexão com bancos de dados: JDBC (Java DatabaseConnectivity)
9. Vantagens Em relação a sistemas RPC tradicionais: Abordagem orientada a objetos; Passagem de mensagens com tipos complexos: objetos; Flexibilidade de implementações Vários comportamentos podem ser definidos para uma mesma interface; Ex: mudança de política;
10. Vantagens Padrões de projeto de OO: Melhoram qualidade do código Fácil de escrever / fácil de usar: Aplicações cliente/servidor; Permite desenvolver sem se preocupar com detalhes de comunicação; 3 linhas de código para declarar um servidor; Desenvolvimento rápido, rápida prototipação;
11. Vantagens Segurança: Proteção contra código malicioso; Mecanismos próprios do Java; Políticas de segurança; RMISecurityManager; Conexão com sistemas legados; Escreva uma vez, rode onde quiser; Coletor de lixo distribuído; Computação paralela;
13. Funcionamento Funcionamento básico Em (1), busca pelo serviço e pega o endereço. Em (2), ele acessa o serviço pegando uma referência à interface do objeto. Em (3), ele chama um método fornecido pelo objeto
14. Funcionamento Considerações importantes: Os métodos do objeto remoto podem ser chamados como se fossem de um objeto local; Objetos remotos podem ser passados por parâmetro ou retornados como resultado; Objetos são definidos como: Interface: define os comportamentos, i. e., os métodos disponíveis; é a classe à qual o cliente referencia; Implementação: implementa os comportamentos, que são executados remotamente no servidor;
17. Arquitetura Gerenciador de referências remotas: mapeamento de referências locais/remotas; Stub: proxy presente no lado do cliente comporta-se como objeto local, mas em vez de executar uma invocação local, encaminha uma mensagem a um objeto remoto Skeleton: invoca o método correspondente à invocação do cliente;
24. RMI x CORBA x Web Services Web Services diferem bastante dos outros dois: Não há objetos em WS; Maior interoperabilidade: Ótimo para Web, usando HTTP, por exemplo; Desempenho geralmente pior: HTTP e XML geram muita carga quando deve haver muitas trocas de mensagens; Custo do processamento (parsing) de XML é mais alto;
25. RMI x CORBA x Web Services Geração de componentes do cliente e servidor para as três tecnologias (GRAY, 2004)
26. RMI x CORBA x Web Services Medidas de tempo de CPU (GRAY, 2004) Análises de tráfego (GRAY, 2004)
28. Aplicações Sistemas distribuídos complexos; Clusters de estações de trabalhos; Sistemas de gerenciamento de redes; Aplicações distribuídas que requerem escalabilidade;
29. Referências COULOURIS G., DOLLIMORE J., KINDBERG T. “SistemasDistribuídos: Conceitos e Projeto”. Bookman. Quartaedição. 2007. Distributed Java Programming with RMI and CORBA. Disponívelemhttp://java.sun.com/developer/technicalArticles/RMI/rmi_corba/. AcessadoemJunho de 2011; GRAY, N. A. B. Comparison of Web Services, Java-RMI, and CORBA service implementations. Fifth Australasian Workshop on Software and System Architectures. 2004 Java Remote Method Invocation - Distributed Computing for Java. Disponívelem: http://www.oracle.com/technetwork/java/javase/tech/index-jsp-138781.html. Acessado em Junho de 2011; MAASSEN, J., et al. An efficient implementation of Java's remote method invocation. Proceedings of the seventh ACM SIGPLAN symposium on Principles and practice of parallel programming. 1999; Tutorial RMI - Remote Method Invocation.Disponívelem : http://www.devmedia.com.br/post-6442-Tutorial-RMI-Remote-Method-Invocation.html. Acessado em Junho de 2011