Beruflich Dokumente
Kultur Dokumente
Sistemas distribuidos.
Aplicaciones inherentemente distribuidas. Se caracterizan por su complejidad.
Java RMI
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.
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.
Mara S. Prez
Mara S. Prez
2-Comunicaciones
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
Mara S. Prez
Mara S. Prez
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
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)
Mara S. Prez
Mara S. Prez
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
2-Comunicaciones
Ejemplo
2
Implementacin de la interfaz remota
3
javac
(.java)
4
rmic
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
Mara S. Prez
Mara S. Prez
Mara S. Prez
2-Comunicaciones
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>
Mara S. Prez
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.
Mara S. Prez
2-Comunicaciones
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
Mara S. Prez
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:
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
Mara S. Prez
2-Comunicaciones
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.
Mara S. Prez
Mara S. Prez
Mara S. Prez
2-Comunicaciones