java rmi sistemas distribuidos maría de los santos pérez hernández [email protected]
TRANSCRIPT
![Page 2: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/2.jpg)
Sistemas Distribuidos 2
Entornos orientados a objetos
• Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan entre sí.– Un programa solicita servicios invocando los métodos que
ofrece un objeto.– La invocación de métodos se ve como un paso de mensajes.
![Page 3: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/3.jpg)
Sistemas Distribuidos 3
Entornos orientados a objetos
DATOS
Implementación de métodos
(op1, op2, ..., opN)
op1
op2
opN
![Page 4: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/4.jpg)
Sistemas Distribuidos 4
Entornos orientados a objetos
• Comunicación entre objetos: Mensajes.• Encapsulación.• Identidad del objeto (Identificación).• Herencia.• Acciones.• Clases.• Instancias.• Interfaces vs implementaciones.• Herencia múltiple.• Enlace dinámico.• Recolección de basura.
![Page 5: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/5.jpg)
Sistemas Distribuidos 5
Enlace dinámico
Shape *aShape;
ShapeList *aList;
int n = aList ->numberElements();
for (int i=1; i<=n; i++) {
aShape = aList -> nthELement();
cout << “Perimeter:” << aShape->perimeter() << “\n”;
}
![Page 6: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/6.jpg)
Sistemas Distribuidos 6
Modelo de objetos
![Page 7: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/7.jpg)
Sistemas Distribuidos 7
Modelo de objetos en sistemas distribuidos
Máquina A Máquina B Máquina C
![Page 8: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/8.jpg)
Sistemas Distribuidos 8
Modelo de objetos en sistemas distribuidos
• Sistemas distribuidos.– Aplicaciones inherentemente distribuidas.– Se caracterizan por su complejidad.
• Sistemas orientados a objetos.– Más cercanos al lenguaje natural.– Facilitan el diseño y la programación.
![Page 9: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/9.jpg)
Sistemas Distribuidos 9
Modelo de objetos en sistemas distribuidos
• ANSA (1989-1991) fue el primer proyecto que intentó desarrollar una tecnología para modelizar sistemas distribuidos complejos – Utilizaba un diseño orientado a objetos
• Estándares:– RMI: invocación de métodos remotos de Java– CORBA: expande DCE con servicios orientados a objetos– DCOM: versión CORBA de Microsoft
![Page 10: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/10.jpg)
Sistemas Distribuidos 10
Modelo de objetos en sistemas distribuidos
• ROID: Remote Object IDentifier.– Java RMI: ObjID.
• Localización de objetos.– Servicio de nombres.
• Control de concurrencia.• Transacciones.• Protección de objetos.• Recolección de basura de objetos remotos.
![Page 11: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/11.jpg)
Sistemas Distribuidos 11
Invocación de métodos remotos (RMI)
• Comunicación cliente/servidor => RPC.• Sistemas distribuidos basados en objetos => RMI (Remote
method invocation). • RMI: Acción de invocar un método de un interfaz remoto en un
objeto remoto.• RMI ofrece:
– Mecanismos para crear servidores y objetos cuyos métodos se puedan invocar remotamente.
– Mecanismos que permiten a los clientes localizar los objetos remotos.
![Page 12: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/12.jpg)
Sistemas Distribuidos 12
Invocación de métodos remotos en Java
• Java RMI• El soporte para RMI en Java está basado en las interfaces y
clases definidas en los paquetes java.rmi y java.rmi.server• Características de Java RMI:
– No requiere un IDL (Interface Definition Language).– La transferencia de objetos de tipos de datos complejos se lleva a cabo
mediante mecanismos de serialización.– Es necesario tratar mayor número de excepciones que en el caso de
invocación de métodos locales.
![Page 13: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/13.jpg)
Sistemas Distribuidos 13
Invocación de métodos remotos en Java
• Localización de objetos remotos:– Servidor de nombres: java.rmi.Naming
• Ejemplo:
BankAccount acct = new BankAccountImpl();
String url = “rmi://java.Sun.COM/account”;
// enlazamos una url a un objeto remoto
java.rmi.Naming.bind(url, acct);
....
// búsqueda de la cuenta
acct = (BankAccount) java.rmi.Naming.lookup(url);
![Page 14: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/14.jpg)
Sistemas Distribuidos 14
Arquitectura de Java RMI
![Page 15: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/15.jpg)
Sistemas Distribuidos 15
Arquitectura de Java RMI
• Nivel de transporte: se encarga de las comunicaciones y de establecer las conexiones necesarias
• Nivel de gestión de referencias remotas: trata los aspectos relacionados con el comportamiento esperado de las referencias remotas (mecanismos de recuperación, etc.)
• Nivel de resguardo/esqueleto (proxy/skeleton) que se encarga del aplanamiento (serialización) de los parámetros– proxy: resguardo local. Cuando un cliente realiza una
invocación remota, en realidad hace una invocación de un método del resguardo local.
– Esqueleto (skeleton): recibe las peticiones de los clientes, realiza la invocación del método y devuelve los resultados.
![Page 16: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/16.jpg)
Sistemas Distribuidos 16
¿Cómo escribir aplicaciones con Java RMI?
Definición de la interfaz rem ota
javac
(.java)
1
2
3
4
1 0
9
5
6
7
8
(.java)
usaCliente
EjectuarCliente
(.class)
CLIENTE SERVIDOR
(.class)
Esqueleto(.class)
Im plem entación de la interfaz rem ota
Esqueleto(.class)
Servidor (.class)
Arrancar RM IRegistry
Crear los objetos
Registrar los objetos
javac
rm ic
![Page 17: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/17.jpg)
Sistemas Distribuidos 17
Ejemplo
![Page 18: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/18.jpg)
Sistemas Distribuidos 18
Modelización de la interfaz remota (Sumador)
public interface Sumador extends java.rmi.Remote{
public int sumar(int a, int b) throws java.rmi.RemoteException;
}
![Page 19: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/19.jpg)
Sistemas Distribuidos 19
Clase que implementa la interfaz (SumadorImpl)
import java.rmi.*;import java.rmi.server.UnicastRemoteObject;public class SumadorImpl extends UnicastRemoteObject implements Sumador
{ public SumadorImpl(String name) throws RemoteException {
super(); try {
System.out.println("Rebind Object " + name); Naming.rebind(name, this); } catch (Exception e){
System.out.println("Exception: " + e.getMessage()); e.printStackTrace(); }
} public int sumar (int a, int b) throws RemoteException {
return a + b; } }
![Page 20: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/20.jpg)
Sistemas Distribuidos 20
Código del servidor (SumadorServer)
import java.rmi.*;import java.rmi.server.*;
public class SumadorServer { public static void main (String args[]) {
try { SumadorImpl misuma = new
SumadorImpl("MiSumador"); } catch(Exception e) {
System.err.println("System exception" + e); }
}}
![Page 21: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/21.jpg)
Sistemas Distribuidos 21
Registro del servicio
• Antes de arrancar el cliente y el servidor, se debe arrancar el programa rmiregistry en el servidor para el servicio de nombres. El puerto que utiliza el rmiregistry por defecto es el 1099.– rmiregistry [port_number]
• El método rebind es utilizado normalmente en lugar del método bind, porque garantiza que si un objeto rémoto se registró previamente con dicho nombre, el nuevo objeto reemplazará al antiguo.
![Page 22: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/22.jpg)
Sistemas Distribuidos 22
Código en el cliente (SumadorClient)
import java.rmi.registry.*;import java.rmi.server.*;
public class SumadorClient { public static void main(String args[]){
int res = 0;try { System.out.println("Buscando Objeto "); Sumador misuma = (Sumador)Naming.lookup("rmi://" + args[0] +
"/" +"MiSumador"); res = misuma.sumar(5, 2);
System.out.println("5 + 2 = " + res); } catch(Exception e){
System.err.println(" System exception"); } System.exit(0); }}
![Page 23: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/23.jpg)
Sistemas Distribuidos 23
Búsqueda
• Cualquier programa que quiera instanciar un objeto remoto debe realizar una búsqueda de la siguiente forma:
Sumador misuma = (Sumador)Naming.lookup("rmi://" + args[0] + "/" +"MiSumador");
• El método lookup devuelve una referencia remota a un objeto que implementa la interfaz remota.
• El método lookup interactúa con rmiregistry.
![Page 24: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/24.jpg)
Sistemas Distribuidos 24
Pasos
• Java RMI:– Enlace a un nombre: bind(), rebind()– Encontrar un objeto y obtener su referencia: lookup()– refObj.nombre_met()
![Page 25: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/25.jpg)
Sistemas Distribuidos 25
Cuadro general
Cliente Servidor
Stub Skeleton
Red
op1
op2
opN
![Page 26: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/26.jpg)
Sistemas Distribuidos 26
¿Cómo se ejecuta?
• Compilaciónjavac Sumador.javajavac SumadorImpl.javajavac SumadorClient.javajavac SumadorServer.java
• Generación de los esqueletosrmic SumadorImpl
• Ejecución del programa de registro de RMIrmiregistry
• Ejecución del servidorjava SumadorServer
• Ejecución del clientejava SumadorCliente <host-del-servidor>
![Page 27: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/27.jpg)
Sistemas Distribuidos 27
Java RMI vs CORBA
• Java RMI es más sencillo:– Trata sólo con objetos Java.
• Java RMI permite pasar por valor cualquier objeto que se pueda “serializar”.
• CORBA es más flexible:– Proporciona soporte RMI de objetos implementados en
diversos lenguajes y clientes escritos también en distintos lenguajes.
• CORBA añade bastante complejidad.
![Page 28: Java RMI Sistemas distribuidos María de los Santos Pérez Hernández mperez@fi.upm.es](https://reader033.vdocuments.co/reader033/viewer/2022061300/54d47332497959a0198b52b9/html5/thumbnails/28.jpg)
Sistemas Distribuidos 28
Referencias bibliográficas
• Distributed Systems. Concepts and Design. 2º ediciónG. Coulouris, J. Dollimore, T. Kindberg.Addison-Wesley, 1994http://www.dcs.qmw.ac.uk/research/distrib/book.html
• Información on-line de Sun (Remote Method Invocation Specification):http://java.sun.com/products/jdk/1.1/docs/guide/rmi/spec/
rmiTOC.doc.html
• Distributed Operating Systems A. S. TanenbaumPrentice-Hall, 1995