Java RMI: Conceitos Básicos
Java RMI (Remote Method Invocation) permite que objetos Java executando no mesmo computador ou em outros computadores comuniquem entre si por meio de chamadas de métodos remoto. Essas chamadas de métodos são semelhantes àquelas que ocorrem entre objetos de um mesmo programa.
RMI está baseado em uma tecnologia anterior semelhante para programação procedural, chamada de chamada de procedimentos remotos (Remote Procedure Calls, ou RPC), desenvolvida nos anos 80.
Sendo uma extensão de RPC, Java RMI permite comunicação distribuída de um objeto Java com outro. Uma vez que um método (ou serviço) de um objeto Java é registrado em um Servidor de Nomes como sendo remotamente acessível, um cliente pode pesquisar esse serviço e receber uma referência que permita utilizar o mesmo (isto é, chamar seus métodos). A sintaxe usada em chamadas de métodos remotos é idêntica àquela de uma chamada para um método de outro objeto no mesmo programa. Como ocorre em RPC, o empacotamento dos dados é tratado pelo RMI. O programador não precisa se preocupar com a transmissão dos dados sobre a rede. RMI também não exige que o programador domine qualquer linguagem particular para definição de interfaces, porque todo o código de rede é gerado diretamente a partir das classes existentes no programa.
Java RMI: Arquitetura
A arquitetura de Java RMI é dividida em três camadas:
· A camada de stub/skeleton oferece as interfaces que os objetos da aplicação usam para interagir entre si.
· A camada de referência remota é responsável por criar e gerenciar referências para objetos remotos;
· A camada de transporte implementa o protocolo que especifica o formato de solicitações enviadas aos objetos remotos pela rede.

Figura 1 – Arquitetura de camadas de RMI.
Java RMI: Exemplo de Uso
No desenvolvimento de uma aplicação cliente-servidor usando Java RMI, é essencial que seja definida a interface de serviços que serão oferecidos pelo objeto servidor. A especificação de uma interface remota é equivalente à definição de qualquer interface em Java, a não ser pelos seguintes detalhes:
• A interface deverá, direta ou indiretamente, estender a interface Remote.
• Todo método da interface deverá declarar que a exceção RemoteException (ou uma de suas subclasses) pode ser gerada na execução do método.
O exemplo de definição de interface abaixo relaciona os métodos que serão invocados remotamente usando Java RMI. Este exemplo descreve uma aplicação de Chat onde clientes interagem com o servidor conectando, enviando mensagens e desconectando. O servidor interage com um cliente enviando mensagens de outros clientes.
public interface ServidorChat extends Remote {
public String conectar (Cliente c) throws RemoteException;
public void enviar (String mensagem) throws RemoteException;
public void desconectar(Cliente c) throws RemoteException;
}
Já o código mostrado a seguir descreve a interface de um cliente da aplicação de Chat, a qual contém o método exibir cuja função é mostrar a mensagem propagada pelo servidor da aplicação.
public interface Cliente extends Remote {
public void Exibir(String mensagem) throws RemoteException;
...
Exibição do post interrompida. Para ler conteúdo completo,
clique aqui