Java RMI - Pontificia Universidad Católica de Chile

Anuncio
Pontificia Universidad Católica de Chile
Escuela de Ingeniería
Departamento Ciencia de la Computación
IIC2523 Sistemas Distribuidos
Java RMI
Ayudantía 1
Introducción
• Mecanismo de Java para la invocación remota de
métodos.
• Funciona únicamente en ambientes distribuidos
Java.
• Ventajas
• Recolección de basura
• Paso de objetos por referencia
• Paso de tipos arbitrarios
Hola Mundo – Interfaz Remota
package example.hello;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Hello extends Remote {
String sayHello() throws RemoteException;
}
Hola Mundo – Servidor
package example.hello;
public static void main(String args[]) {
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
import java.rmi.RemoteException;
import
java.rmi.server.UnicastRemoteObject;
try {
Server obj = new Server();
Hello stub = (Hello)
UnicastRemoteObject.exportObject(obj,
0);
public class Server implements Hello {
// Bind the remote object's
stub in the registry
Registry registry =
LocateRegistry.getRegistry();
registry.bind("Hello",
stub);
public Server() {}
public String sayHello() {
return "Hello, world!";
}
System.err.println("Server
ready");
} catch (Exception e) {
System.err.println("Server
exception: " + e.toString());
e.printStackTrace();
}
}
}
Exportación de objetos remotos
Server obj = new Server();
Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0);
• Exporta el objeto para ser accesible mediante una conexión TCP
• El método recibe el objeto y el puerto destino.
Registro del objeto remoto
Registry registry = LocateRegistry.getRegistry();
registry.bind("Hello", stub);
• Define a qué dirección se accede el objeto
• En este caso el objeto se accede a través de la URI //localhost/Hello
Hola Mundo – Cliente
package example.hello;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Client {
private Client() {}
public static void main(String[] args) {
String host = (args.length < 1) ? null : args[0];
try {
Registry registry = LocateRegistry.getRegistry(host);
Hello stub = (Hello) registry.lookup("Hello");
String response = stub.sayHello();
System.out.println("response: " + response);
} catch (Exception e) {
System.err.println("Client exception: " + e.toString());
e.printStackTrace();
}
}
}
Demostración
Demostración
Pasos para correr el servidor.
1. Compilar las fuentes del servidor
2. Arrancar el servidor de registros de RMI (rmiregistry)
3. Crear el archivo de permisos
4. Ejecutar el servidor con los permisos
Pasos para correr el cliente.
1. Compilar las fuentes del cliente
2. Ejecutar el cliente
Demostración
Demostración
Problemas identificados
• Asegurarse de correr el rmiregistry (puede ser necesario
reiniciarlo).
• Asegurarse de tener los puertos abiertos.
• Asegurarse de cargar el archivo de policies antes de ejecutar
el programa.
Descargar