Atenção: esse artigo tem um vídeo complementar. Clique e assista!
Neste artigo veremos os principais conceitos da API Remote Method Invocation (RMI) para o desenvolvimento de sistemas distribuídos em Java e alguns exemplos de como implementar aplicações com essa tecnologia.
Em que situação o tema útil:
O RMI é uma API do Java para o desenvolvimento de sistemas distribuídos. Seu objetivo é facilitar a implementação desse tipo de aplicação, fazendo com que sistemas distribuídos sejam criados de forma parecida com aplicações tradicionais.
Resumo DevMan:
O artigo é dividido em duas partes. Na primeira são apresentados os principais conceitos da Remote Method Invocation, como a arquitetura de uma aplicação, as principais classes da API e algumas das ferramentas necessárias. A segunda parte consiste de dois exemplos práticos de como utilizar o RMI no desenvolvimento de um sistema distribuído.
Grande parte dos sistemas desenvolvidos atualmente é distribuído ou, no mínimo, se comunica com outras aplicações para compartilhar informações ou dados. Este é o caso dos sistemas bancários, que são formados por várias máquinas como servidores, caixas eletrônicos e terminais, que precisam se comunicar de maneira eficiente e segura. Por isso, ferramentas que facilitem o desenvolvimento desse tipo de software têm ganhado grande importância. Uma dessas tecnologias é a invocação remota de métodos (RMI – Remote Method Invocation), que permite a criação de objetos distribuídos em Java. O RMI é bastante utilizado em uma das principais especificações do Java, o Enterprise JavaBeans (EJB).
Uma das primeiras tecnologias para o desenvolvimento de aplicações em rede foram os sockets. Com essa tecnologia o programador precisa conhecer detalhes da rede como o protocolo a ser utilizado, codificar e decodificar as mensagens, entre outros problemas. Com a evolução do desenvolvimento de sistemas distribuídos, surgiu outro conceito que facilitou ainda mais a implementação desse tipo de software, a chamada de procedimentos remotos (Remote Procedure Call – RPC), que possibilita que um cliente execute um procedimento remoto de forma parecida com a forma de executar um procedimento local.
Apesar de o RPC facilitar bastante o desenvolvimento, essa tecnologia não se adequou totalmente ao conceito da orientação a objetos, onde o programador mais do que apenas executar um procedimento, precisa acessar um objeto inteiro com seus atributos e comportamentos remotamente. Seguindo o modelo orientado a objetos, surgiu o RMI, que utiliza o conceito de objetos distribuídos. O principal objetivo do RMI é permitir que o programador construa aplicações de maneira transparente, isto é, sem ter que tratar detalhes e problemas de comunicação diretamente no código e de forma parecida com a que se desenvolve aplicações locais.
RMI
O RMI faz parte da especificação Java Standard Edition (Java SE), está presente desde a versão 1.1 e é a principal API para o desenvolvimento de sistemas distribuídos do Java. Com o RMI é possível criar objetos distribuídos que podem ser acessados remotamente por outras máquinas na rede. O principal objetivo é fornecer um meio transparente para a programação de sistemas distribuídos. Para alcançar essa meta são utilizados alguns conceitos importantes, dentre eles:
• Serialização de Objetos: Todos os objetos que forem passados do cliente para o servidor (parâmetros) ou do servidor para o cliente (retorno de métodos) devem ser objetos serializáveis;
• Interface Remota: Todo objeto remoto RMI deve implementar uma interface remota que indica a assinatura dos métodos que esse serviço disponibiliza. Essa interface também deve ser distribuída para os clientes, para que eles conheçam os serviços disponibilizados pelo objeto remoto;
...