Java RMI

De Aulas

Links relacionados: Programação Paralela e Distribuída

Envio Mensagem

1import java.rmi.*;
2
3public interface EnvioMensagem extends Remote {
4	String getDescription() throws RemoteException;
5
6	void setDescription(String g) throws RemoteException;
7}

Envio Mensagem Implementação

 1import java.rmi.*;
 2import java.rmi.server.*;
 3
 4public class EnvioMensagemImpl extends UnicastRemoteObject implements
 5		EnvioMensagem {
 6	//static final serialVersionUID = 0;
 7	private String name;
 8
 9	public EnvioMensagemImpl() throws RemoteException {
10		name = null;
11	}
12
13	public String getDescription() throws RemoteException {
14		System.out.println("Cliente invocou o metodo getDescription()");
15		return name;
16	}
17
18	public void setDescription(String n) throws RemoteException {
19		name = n;
20		System.out.println("Cliente invocou o metodo setDescription()");
21		System.out.println("Mensagem recebida: " + name);
22	}
23}

Envio Mensagem Server

 1import java.rmi.*;
 2
 3public class EnvioMensagemServer {
 4	public static void main(String args[]) {
 5		try {
 6			System.out.println("Construindo implementacao de servidor...");
 7			EnvioMensagemImpl p1 = new EnvioMensagemImpl();
 8			System.out.println("Registrando servidor no SN...");
 9			Naming.rebind("EnvioMensagem", p1);
10			System.out.println("Esperando chamadas...");
11		} catch (Exception e) {
12			System.out.println("Error" + e);
13		}
14	}
15}

Envio Mensagem Client

 1import java.rmi.*;
 2
 3public class EnvioMensagemClient {
 4	public static void main(String args[]) {
 5		System.setSecurityManager(new RMISecurityManager());
 6		String url = "rmi://" + args[0] + ":1099/";
 7		try {
 8			EnvioMensagem c1 = (EnvioMensagem) Naming.lookup(url
 9					+ "EnvioMensagem");
10			c1.setDescription(args[1]);
11			System.out.println("Envio da Mensagem: " + args[1]);
12			String voltou = c1.getDescription();
13			System.out.println("Volta da Mensagem: " + voltou);
14		} catch (Exception e) {
15			System.out.println("Error" + e);
16		}
17	}
18}

Show Bindings

 1import java.rmi.*;
 2
 3public class ShowBindings {
 4	public static void main(String[] args) {
 5		try {
 6			String[] bindings = Naming.list("");
 7			for (int i = 0; i < bindings.length; i++)
 8				System.out.println(bindings[i]);
 9		} catch (Exception e) {
10			System.out.println("Error" + e);
11		}
12	}
13}

client.policy

É necessário criar um arquivo chamado client.policy no diretório onde o programa está sendo executado.

grant{
permission java.net.SocketPermission 
"*:1024-65535", "connect"; 
};

Comandos

No Linux nao usa-se o "start"

javac *.java
rmic EnvioMensagemImpl
start rmiregistry
start java EnvioMensagemServer 
java -Djava.security.policy=client.policy  EnvioMensagemClient  localhost "Mensagem"


Exercícios

  1. Crie pelo menos mais dois métodos na classe EnvioMensagem.
  2. Implemente um cliente que utiliza todos os métodos criados.
  3. Crie pelo menos mais dois objetos com seus próprios métodos funções diferentes.
  4. Registre os novos objetos criados no Servidor.
  5. Implemente um novo cliente que utiliza todos os objetos registrados no servidor.
  6. Rode o servidor e os clientes em computadores diferentes.