Skip to content

Java RMI – Introdução e Exemplo

Boa noite,

Java RMI (Remote Method Invocation), é um mecanismo que permite ao usuário, criar aplicações distribuídas utilizando Java. Sem ter muitas preocupações com Protocolo, sockets entre outros. Mas como ele funciona? Bom toda a mágica é feita pelo próprio RMI. O mesmo possui um servidor chamado RMIREGISTRY, onde o seu Servidor se conecta e diz que está ali. A partir desse momento os Clientes conseguem invocar o servidor.

Um exemplo de um Servidor de Veiculo onde os Clientes podem pesquisar e adicionar novos Veículos.

Interface Servidor:
[code lang="java"]
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.List;

public interface MethosInterfaces extends Remote {

public List search(String field, String value) throws RemoteException;
public void add(Vehicle v) throws RemoteException;
}
[/code]

Os métodos nessa interface serão implementados por nosso servidor, essa interface extend Remote que é uma Classe necessária para fazer o RMI funcionar. Se sua interface não extende-la não irá funcionar. Todos os métodos devem possuir o tratamento de exceção, para garantir o que vai acontecer caso o servidor não seja encontrado.

Servidor:
[code lang="java"]
public class ServerAn implements MethosInterfaces {
[/code]

Classe extende nossa interface e implementa os métodos (não irei mostra-los aqui).

Para criar o servidor utilizei o seguinte:

[code lang="java"]
public static void main(String[] args) {
try {
ServerAn server = new ServerAn();
MethosInterfaces stub = (MethosInterfaces) UnicastRemoteObject.exportObject(server, 0);
Registry registry = LocateRegistry.getRegistry();
registry.bind("Server", stub);
System.out.println("Servider running");
} catch (Exception ex) {
ex.printStackTrace();
}
}
[/code]

Bom no main criamos um novo ServerAn(), exportamos o nosso Servidor, registramos com o bind o nosso Servidor.

Cliente Enviador:
[code lang="java"]
public class ClientSender {

public static void main(String[] args) {
try {
Registry registry = LocateRegistry.getRegistry("localhost");
MethosInterfaces stub = (MethosInterfaces) registry.lookup("Server");
System.out.println("Sending new Vehicle to server");
stub.add(new Vehicle("Matheus2", 5000, "Caminhão", "", 2008));
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
[/code]

Basicamente, procuramos o RMIREGISTRY em "localhost" e procuramos pelo nosso servidor nomeado "Server", com referencia para o mesmo adicionamos um novo Veículo. Para procurar é a mesma coisa porém receberemos uma Lista de veículos ao invés de não receber nada.

Para o objeto poder ser transmitido ele deve ser "serializable".

Java RMI - Anúncios de Carros (Exemplo)

Lembrando que, o rmiregistry procura no seu Java PATH e no diretório que o mesmo foi executado pelas interfaces. Então neste exemplo, para simplicidade, acesse o diretório com os códigos fontes, compile-os execute o RMIREGISTRY no mesmo. E em seguida o Servidor, após isso em outro prompt execute o(s) Clientes. O nome do programa é RMIREGISTRY, execute-o com seu nome.

Espero que seja util,
Matheus

PS: Java ME não vem com o RMI

Referencias:
http://infolab.stanford.edu/CHAIMS/Doc/Details/Protocols/rmi/rmi_description.html
http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136424.html

Published injava

One Comment

  1. [...] Enviado por Matheus Bratfisch (matheusbratΘgmail·com): “Java RMI, Remote Method Invocation. Para fazer aplicativos distribuídos praticamente de forma transparente em Java. Nesta publicação é demonstrado alguns conceitos básicos da utilização do mesmo, de maneira prática, junto a um exemplo.” [referência: matbra.com] [...]

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.