Sie sind auf Seite 1von 7

Sistemas Operativos Distribuidos

Modelo de objetos en sistemas distribuidos

Sistemas Operativos Distribuidos

Sistemas distribuidos.
Aplicaciones inherentemente distribuidas. Se caracterizan por su complejidad.

Java RMI

Sistemas orientados a objetos.


Ms cercanos al lenguaje natural. Facilitan el diseo y la programacin.

Sistemas Operativos Distribuidos 2

Fernando Prez Jos Mara Pea

Mara S. Prez

Objetos-Distribuidos
Caractersticas:
Uso de un Middleware: Nivel de abstraccin para la comunicacin de los objetos distribuidos. Oculta:
Localizacin de objetos. Protocolos de comunicacin. Hardware de computadora. Sistemas Operativos.

Ventajas respecto a paso de mensajes


Paso de mensajes:
Procesos fuertemente acoplados Paradigma orientado a datos: No adecuado para aplicaciones muy complejas que impliquen un gran nmero de peticiones y respuestas entremezcladas.

Paradigma de objetos distribuidos


Mayor abstraccin Paradigma orientado a acciones:
Hace hincapi en la invocacin de las operaciones Los datos toman un papel secundario

Modelo de objetos distribuidos: Describe los aspectos del paradigma de objetos que es aceptado por la tecnologa: Herencia, Interfaces, Excepciones, Polimorfismo, ... Recogida de basura (Garbage Collection): Determina los objetos que no estn siendo usados para liberar recursos.

Sistemas Operativos Distribuidos 3

Fernando Prez Jos Mara Pea

Mara S. Prez

Sistemas Operativos Distribuidos 4

Fernando Prez Jos Mara Pea

Mara S. Prez

2-Comunicaciones

Sistemas Operativos Distribuidos


Ventajas respecto a RPC
Ventajas derivadas al uso de programacin orientada a objetos:
Encapsulacin Reutilizacin Modularidad Dinamismo

Objetos distribuidos
Minimizar las diferencias de programacin entre las invocaciones de mtodos remotos y las llamadas a mtodos locales Ocultar las diferencias existentes:
Tratamiento del empaquetamiento de los datos (marshalling) Sincronizacin de los eventos Las diferencias deben quedar ocultas en la arquitectura

Sistemas Operativos Distribuidos 5

Fernando Prez Jos Mara Pea

Mara S. Prez

Sistemas Operativos Distribuidos 6

Fernando Prez Jos Mara Pea

Mara S. Prez

Arquitectura de Java RMI


Service Directory

Arquitectura de Java RMI


Nivel de resguardo/esqueleto (proxy/skeleton) que se encarga del aplanamiento (serializacin) de los parmetros
proxy: resguardo local. Cuando un cliente realiza una invocacin remota, en realidad hace una invocacin de un mtodo del resguardo local. Esqueleto (skeleton): recibe las peticiones de los clientes, realiza la invocacin del mtodo y devuelve los resultados.

Nivel de gestin de referencias remotas: interpreta y gestiona las referencias a los objetos de servicio remoto Nivel de transporte: se encarga de las comunicaciones y de establecer las conexiones necesarias. Basada en TCP (orientada a conexin)
Sistemas Operativos Distribuidos 7 Fernando Prez Jos Mara Pea Mara S. Prez Sistemas Operativos Distribuidos 8 Fernando Prez Jos Mara Pea Mara S. Prez

2-Comunicaciones

Sistemas Operativos Distribuidos


Servicio de directorios
Se pueden utilizar diferentes servicios de directorios para registrar un objeto distribuido
Ejemplo: JNDI (Java Naming and Directory Interface)

Java RMI
El soporte para RMI en Java est basado en las interfaces y clases definidas en los paquetes:
java.rmi java.rmi.server

El registro RMI, rmiregistry, es un servicio de directorios sencillo proporcionado por SDK (Java Software Development Kit)

Caractersticas de Java RMI:


Se basa en una interfaz remota Java (hereda de la clase Java Remote). Es necesario tratar mayor nmero de excepciones que en el caso de invocacin de mtodos locales
Errores en la comunicacin entre los procesos (fallos de acceso, fallos de conexin) Problemas asociados a la invocacin de mtodos remotos (no encontrar el objeto, el resguardo o el esqueleto) Los mtodos deben especificar la excepcin RemoteException.

Sistemas Operativos Distribuidos 9

Fernando Prez Jos Mara Pea

Mara S. Prez

Sistemas Operativos Distribuidos 10

Fernando Prez Jos Mara Pea

Mara S. Prez

Ejemplo de interfaz remota Java


public interface InterfazEj extends java.rmi.Remote { public String metodoEj1() throws java.rmi.RemoteException; public int metodoEj2(float param) throws java.rmi.RemoteException; }

Java RMI
Localizacin de objetos remotos:
Servidor de nombres: java.rmi.Naming

Ejemplo:
Cuenta cnt = new CuentaImpl(); String url = rmi://java.Sun.COM/cuenta; // enlazamos una url a un objeto remoto java.rmi.Naming.bind(url, cnt); .... // bsqueda de la cuenta cnt=(Cuenta)java.rmi.Naming.lookup(url);
Mara S. Prez Sistemas Operativos Distribuidos 12 Fernando Prez Jos Mara Pea Mara S. Prez

Sistemas Operativos Distribuidos 11

Fernando Prez Jos Mara Pea

2-Comunicaciones

Sistemas Operativos Distribuidos


Desarrollo de Aplicaciones RMI
1
Definicin de la interfaz remota

Ejemplo

2
Implementacin de la interfaz remota

3
javac

(.java)

4
rmic

(.class) Servidor (.class) Esqueleto (.class)

8
Cliente

usa (.java)

Esqueleto (.class)

5
Arrancar RMIRegistry

9
javac

6 10
Ejectuar Cliente (.class) Crear los objetos

7
Registrar los objetos

CLIENTE

SERVIDOR

Sistemas Operativos Distribuidos 13

Fernando Prez Jos Mara Pea

Mara S. Prez

Sistemas Operativos Distribuidos 14

Fernando Prez Jos Mara Pea

Mara S. Prez

Modelizacin de la interfaz remota (Sumador)


public interface Sumador extends java.rmi.Remote { public int sumar(int a, int b) throws java.rmi.RemoteException; }

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; } Sistemas Operativos Distribuidos Fernando Prez Mara S. Prez 16 } Jos Mara Pea

Sistemas Operativos Distribuidos 15

Fernando Prez Jos Mara Pea

Mara S. Prez

2-Comunicaciones

Sistemas Operativos Distribuidos


Cdigo del servidor (SumadorServer)
import java.rmi.*; import java.rmi.server.*; public class SumadorServer { public static void main (String args[]) { try { SumadorImpl misuma = new SumadorImpl(rmi://localhost:1099 +/MiSumador"); } catch(Exception e) { System.err.println("System exception" + e); } } }
Fernando Prez Jos Mara Pea Mara S. Prez

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 mtodo rebind es utilizado normalmente en lugar del mtodo bind, porque garantiza que si un objeto remoto se registr previamente con dicho nombre, el nuevo objeto reemplazar al antiguo. El mtodo rebind almacena en el registro una referencia al objeto con un URL de la forma:
rmi://<nombre mquina>:<nmero puerto>/<nombre referencia>

Sistemas Operativos Distribuidos 17

Sistemas Operativos Distribuidos 18

Fernando Prez Jos Mara Pea

Mara S. Prez

Cdigo en el cliente (SumadorClient)


import java.rmi.registry.*; import java.rmi.server.*; import java.rmi.*; 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); } Sistemas Operativos Distribuidos Fernando Prez Mara S. Prez } 19 Jos Mara Pea

Bsqueda
Cualquier programa que quiera instanciar un objeto remoto debe realizar una bsqueda de la siguiente forma:
Sumador misuma = (Sumador)Naming.lookup("rmi://" + args[0] + "/" +"MiSumador");

El mtodo lookup devuelve una referencia remota a un objeto que implementa la interfaz remota. El mtodo lookup interacta con rmiregistry.

Sistemas Operativos Distribuidos 20

Fernando Prez Jos Mara Pea

Mara S. Prez

2-Comunicaciones

Sistemas Operativos Distribuidos


Pasos Cuadro general

Java RMI:
Enlace a un nombre: bind(), rebind() Encontrar un objeto y obtener su referencia: lookup() refObj.nombre_met()

Cliente

Servidor

op1 op2

opN

Stub Red

Skeleton

Sistemas Operativos Distribuidos 21

Fernando Prez Jos Mara Pea

Mara S. Prez

Sistemas Operativos Distribuidos 22

Fernando Prez Jos Mara Pea

Mara S. Prez

Cmo se ejecuta?
Compilacin
javac Sumador.java javac SumadorImpl.java javac SumadorClient.java javac SumadorServer.java

Callback de cliente
Hay escenarios en los que los servidores deben notificar a los clientes la ocurrencia de algn evento. Ejemplo: chat.
Problema: llamada a mtodo remoto es unidireccional

Posibles soluciones:

Generacin de los esqueletos


rmic SumadorImpl

Ejecucin del programa de registro de RMI


rmiregistry <nmero puerto> Por defecto, en nmero de puerto es el 1099

Sondeo (polling): Cada cliente realiza un sondeo al servidor, invocando repetidas veces un mtodo, hasta que ste devuelva un valor true. Callback: Cada cliente interesado en la ocurrencia de un evento se registra a s mismo con el servidor, de modo que el servidor inicia una invocacin de un mtodo remoto del cliente cuando ocurra dicho evento.
Las invocaciones de los mtodos remotos se convierten en bidireccionales
Fernando Prez Jos Mara Pea

Problema: Tcnica muy costosa (recursos del sistema)

Ejecucin del servidor


java SumadorServer

Ejecucin del cliente


java SumadorCliente <host-del-servidor>
Sistemas Operativos Distribuidos 23 Fernando Prez Jos Mara Pea Mara S. Prez

Sistemas Operativos Distribuidos 24

Mara S. Prez

2-Comunicaciones

Sistemas Operativos Distribuidos


Extensin de la parte cliente para callback de cliente
El cliente debe proporcionar una interfaz remota: Interfaz remota de cliente
public interface CallbackClient extends java.rmi.Remote { public String notificame (String mensaje) throws java.rmi.RemoteException; }

Extensin de la parte servidora para callback de cliente Aadir el mtodo remoto para que el cliente se registre para callback
public void registrarCallback (CallbackClient objCallbackClient) throws java.rmi.RemoteException;

Es necesario implementar la interfaz remota de cliente, de forma anloga a la interfaz de servidor (CallbackClientImpl) En la clase cliente se debe aadir cdigo para que instancie un objeto de la implementacin de la interfaz remota de cliente y que se registre para callback (mtodo implementado por el servidor):
CallbackServer cs = (CallbackServer) Naming.lookup(URLregistro); CallbackClient objCallback = new CallbackClientImpl(); cs.registrarCallback(objCallback);

Se puede proporcionar un mtodo eliminarRegistroCallback para poder cancelar el registro Ambos mtodos modifican una estructura comn (por ejemplo, un objeto Vector) que contiene referencias a los callbacks de clientes. Se utilizan mtodos synchronized para acceder a la estructura en exclusin mutua.

Sistemas Operativos Distribuidos 25

Fernando Prez Jos Mara Pea

Mara S. Prez

Sistemas Operativos Distribuidos 26

Fernando Prez Jos Mara Pea

Mara S. Prez

Comparacin RMI y Sockets


Los sockets estn ms cercanos al sistema operativo, lo que implica una menor sobrecarga de ejecucin. RMI proporciona mayor abstraccin, lo que facilita el desarrollo de software. RMI es un buen candidato para el desarrollo de prototipos. Los sockets suelen ser independientes de plataforma y lenguaje.

Sistemas Operativos Distribuidos 27

Fernando Prez Jos Mara Pea

Mara S. Prez

2-Comunicaciones

Das könnte Ihnen auch gefallen