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
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
[...] 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] [...]