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
- Crie pelo menos mais dois métodos na classe EnvioMensagem.
- Implemente um cliente que utiliza todos os métodos criados.
- Crie pelo menos mais dois objetos com seus próprios métodos funções diferentes.
- Registre os novos objetos criados no Servidor.
- Implemente um novo cliente que utiliza todos os objetos registrados no servidor.
- Rode o servidor e os clientes em computadores diferentes.