Set 02 2010

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:

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.List;

public interface MethosInterfaces extends Remote {

   public List<Vehicle> search(String field, String value) throws RemoteException;
   public void add(Vehicle v) throws RemoteException;
}

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:

public class ServerAn implements MethosInterfaces {

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

Para criar o servidor utilizei o seguinte:

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();
                }
        }

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

Cliente Enviador:

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();
                }
        }
}

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

1 Comment

Other Links to this Post

  1. RMI: Uma introdução a Java Remote Method Invocation | Processadores Dual Core — September 7, 2010 @ 5:45 pm

RSS feed for comments on this post. TrackBack URI

Leave a comment