Sistemas de colas de mensajes



Documentos relacionados
1. Sistemas de colas de mensajes 2. Agentes móviles 3. Servicios de red 4. Espacios de objetos

RMI [Remote Method Invocation]

Cliente/Servidor en Java

Modelo de Objetos Distribuidos

Ingeniería del Software Arquitectura Física en 3 niveles

Práctica 4: Java Remote Method Invocation (RMI)

Práctica 2: Java Remote Method Invocation (RMI)

Java RMI. Sistemas Distribuidos Rodrigo Santamaría

Sistemas Distribuidos Java RMI (Remote Method Invocation) Alberto Lafuente Mikel Larrea Dpto. ATC, UPV/EHU

Manual del Protocolo XML-RPC de Mensajería Negocios

1. Posicionarse en la vista Services y seleccionar el ítem Servers. En el menú contextual del Mouse seleccionar la opción Add Server

Java RMI Remote Method Invocation. Invocación Remota de Métodos en Java

en otra máquina exactamente de la misma manera que si se encontrará en la misma máquina

1. Visión general de RMI

Java RMI. las RPC de Java. Parte I. Luis Fernando Llana Díaz. Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid

DISEÑO DE UNA ARQUITECTURA CLIENTE/SERVIDOR MEDIANTE OBJETOS DISTRIBUIDOS EN JAVA

CAPITULO 3 ARQUITECTURA DE COMPONENTES GIS EN INTERNET

PROGRAMACIÓN CLIENTE-SERVIDOR MEDIANTE SOCKETS EN JAVA

Arquitectura Cliente/Servidor. Invocación de Métodos Remotos RMI: Remote Method Invocation. Llamadas a Métodos Remotos

Benemérita Universidad Autónoma del Estado de Puebla

Sistemas Distribuidos (Capítulo 8 de Distributed Computing de M. L. Liu)

5.1 Introducción a Servicios Web

Llamada a métodos remotos (RMI). Curso 04/05. Tema 9. Departament d Informàtica. Universitat de València. 1. Introducción 2

Introducción Descripción del servicio

JAVA - Serializacíon / RMI. (C) Philippe Roose , 2005

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Comunicación Indirecta

Consumo de ActiveMQ en Pre

Práctica sobre compartición de instancias remotas.

PROGRAMACION DISTRIBUIDA MobileTracker: Ejemplo de implementación con RMI

SISTEMAS DISTRIBUIDOS

CONTENIDO. Serialización. Carga dinamica de stubs RMI AVANZADO. Callbacks. Carga dinámica de Stubs

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

Sockets en Java. La Creatividad proviene de un conflicto de ideas. Uso de Sockets

Práctica 5: Common Object Request Broker Architecture CORBA

Curso de Java POO: Programación orientada a objetos

Los mayores cambios se dieron en las décadas de los setenta, atribuidos principalmente a dos causas:

Arquitectura de Proyectos de IT

Ejercicio 4. EJB Sesión - Sistema SGA. Java EE. Ejercicio 4. EJB Sesión Sistema SGA. Curso de Java EE

Uso de excepciones en Java

Programación Orientada a Objetos en Java

Capítulo 5. Cliente-Servidor.

Componentes Distribuidos EJBs. Ing. Cesar Julio Bustacara Medina

Programación Orientada a Objetos. Java: Excepciones

Arquitectura de sistema de alta disponibilidad

La interoperabilidad se consigue mediante la adopción de estándares abiertos. Las organizaciones OASIS y W3C son los comités responsables de la

MONITORES EN JAVA. Antonio Tomeu Control de la Concurrencia en Java: API Estándar

Tema 1. Introducción a JAVA

Alicia Serrano Sánchez, Francisco Sánchez Molina, David Villa Alises, Felix Jesús Villanueva Molina y Juan Carlos López López

Primera Escuela de la Red Temática SVO. Madrid, Noviembre, 2006 JAVA BÁSICO. Raúl Gutiérrez Sánchez LAEFF - INTA raul@laeff.inta.

SERVICE ORIENTED ARCHITECTURE (SOA) CONTENIDO

El lenguaje de programación Java

PROGRAMACION DISTRIBUIDA

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

Arquitectura de Aplicaciones

Programación Orientada a Objetos. Java: Excepciones

UNIVERSIDAD DE SALAMANCA

Introducción a los Servicios Web. Ing. José Luis Bugarin ILUMINATIC SAC jbugarin@consultorjava.com

Remote Method Invocation (RMI) de Java

SERVIDOR WEB PARA ACCESO EN TIEMPO REAL A INFORMACIÓN METEOROLÓGICA DISTRIBUIDA

Multitarea en Java. Rafa Caballero - UCM

Federico Peinado

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

Especificación de la secuencia de mensajes que se han de intercambiar. Especificación del formato de los datos en los mensajes.

Universidad ORT - Arquitectura de Software. Requisitos

1. Qué tipos de relación hay entre las siguientes clases?

Patrones de Alto nivel: Patrones de Arquitectura Patrones de nivel medio: Patrones de Diseño Patrones de bajo nivel: Idioms

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C)

SISTEMAS DE INFORMACIÓN II TEORÍA

Programación Orientada a Objetos con Java

Introducción a la programación orientada a objetos

CAPITULO 8. Planeamiento, Arquitectura e Implementación

Introducción al lenguaje Java

3.9 Patrón Distributed callback

FRAMEWORK 2 Recepción de SMS

Introducción a las redes de computadores

2. Estructura de un programa en Java

RESUMEN INFORMATIVO PROGRAMACIÓN DIDÁCTICA CURSO 2013/2014

MOM LSUB. 3 de abril de 2013 GSYC

4. Programación Paralela

Interacción entre Aplicaciones: objetos distribuidos e invocación remota

Mensajes. Interbloqueo

TRANSFERENCIA DE FICHEROS FTP

ATLAS MANUAL DE INTEGRACIÓN Cliente del Servicio de SMS

INTRODUCCIÓN A JAVA. Índice

PRUEBAS DE SOFTWARE TECNICAS DE PRUEBA DE SOFTWARE

LABORATORIO DE RC: PRÁCTICA 4: IMPLEMENTACIÓN DE UN CLIENTE DE CORREO

Java en 2 horas. Rodrigo Santamaría

Primer Parcial Septiembre 5 de 2009

SIEWEB. La intranet corporativa de SIE

1. Creación del repositorio

Windows Server 2012: Infraestructura de Escritorio Virtual

ARQUITECTURA DE DISTRIBUCIÓN DE DATOS

GLOSARIO. Arquitectura: Funcionamiento, estructura y diseño de una plataforma de desarrollo.

APLICACIONES MÓVILES NATIVAS. Sesión 8: Arquitectura de las aplicaciones Android

Sumario... 5 Prólogo Unidad didáctica 1. Introducción a la computación distribuida Objetivos de la Unidad... 12

Capitulo 5. Implementación del sistema MDM

ARQUITECTURAS CLIENTE/SERVIDOR

Programación en Java. Programación en OO

Transcripción:

Tema 9. Paradigmas Avanzados de computación distribuida 1. Sistemas de colas de mensajes 2. Agentes móviles 3. Servicios de red 4. Espacios de objetos Sistemas de colas de mensajes Tema 9 Paradigmas Avanzados de Computación Distribuida 1 Tema 9 Paradigmas Avanzados de Computación Distribuida 2 Sistemas de colas de mensajes. Definición Lógica de mediación orientada a mensajes MOM: message-oriented middleware Los mensajes se envían a un intermediario: El sistema de mensajes El intercambio es totalmente asíncrono: emisor y receptor desacoplados el emisor envía al sistema de mensajes y sigue su ejecución el sistema de mensajes reenvía a la cola del receptor el receptor extrae los mensajes cuando quiere 2 modelos: punto a punto publicación-suscripción Receptores Modelo de mensajes punto a punto Proporciona operaciones asíncronas sin bloqueo en emisor ni en receptor total desacoplo entre las operaciones de ambos Sistema de Mensajes Un mensaje Emisores Tema 9 Paradigmas Avanzados de Computación Distribuida 3 Tema 9 Paradigmas Avanzados de Computación Distribuida 4 Sistemas Operativos Distribuidos y de Tiempo Real 1

Modelo de mensajes publicación/suscripción Los mensajes se asocian a temas o eventos Los receptores se suscriben a dichos temas o eventos Los emisores publican mensajes que anuncian dichos eventos Comunicación en grupo desacoplada Editor se suscribe a 1 Suscriptor Sistema de Mensajes ocurre el evento 1 Ejemplos de sistemas comerciales de colas de mensajes WebSphere MQ de IBM (antes MQ*Series) Message Queue de Microsoft (MSMQ) Java Message Service de Sun (JMS) Data Distribution Service del OMG (DDS) orientado a sistemas distribuidos de tiempo real implementación: NDDS de RTI se suscribe a 1 y a 2 se suscribe a 2 Un mensaje ocurre el evento 2 Tema 9 Paradigmas Avanzados de Computación Distribuida 5 Tema 9 Paradigmas Avanzados de Computación Distribuida 6 Java JMS Modelo punto a punto: cada mensaje sólo tiene un consumidor desacoplo temporal: se pueden recibir mensajes enviados cuando el consumidor no existía el consumidor asiente la correcta recepción el destino de los mensajes es de tipo javax.jms.queue Modelo publicación/suscripción: cada mensaje puede tener múltiples consumidores dependencia temporal: sólo se reciben los mensajes enviados con posterioridad a la suscripción excepción: suscripciones duraderas el destino de los mensajes es de tipo javax.jms.topic En ambos: El consumo de mensajes puede ser: síncrono: explícito mediante el método receive asíncrono: registrando un MessageListener Tema 9 Paradigmas Avanzados de Computación Distribuida 7 import javax.jms.*; import javax.naming.*; Emisor de mensajes con Java JMS public class EmisorMensaje { public static void main (String[] args) { Context contextojndi = new InitialContext(); ConnectionFactory factoriaconexiones = (ConnectionFactory) contextojndi.lookup("connectionfactory"); Destination destino = (Destination) contextojndi.lookup(args[0]); Connection conexion = factoriaconexiones.createconnection( ); Session sesion = conexion.createsession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer productor = sesion.createproducer(destino); TextMessage mensaje = sesion.createtextmessage(); mensaje.settext("hola Mundo"); productor.send(mensaje); conexion.close(); catch (NamingException e) { System.out.println("Naming: " + e.getmessage()); catch (JMSException e) { System.out.println("JMS: " + e.getmessage()); Basado en los ejemplos del manual de la J2EE Tema 9 Paradigmas Avanzados de Computación Distribuida 8 Sistemas Operativos Distribuidos y de Tiempo Real 2

import javax.jms.*; import javax.naming.*; Receptor de mensajes síncrono con Java JMS public class ReceptorMensajeSinc { public static void main (String[] args) { Context contextojndi = new InitialContext( ); ConnectionFactory factoriaconexiones = (ConnectionFactory) contextojndi.lookup( ConnectionFactory"); Destination origen = (Destination) contextojndi.lookup(args[0]); Connection conexion = factoriaconexiones.createconnection(); Session sesion = conexion.createsession(false, Session.AUTO_ACKNOWLEDGE); MessageConsumer consumidor = sesion.createconsumer(origen); conexion.start(); Message m = consumidor.receive(0); TextMessage mensaje = (TextMessage) m; System.out.println("Leyendo Mensaje: " + mensaje.gettext()); conexion.close(); catch (NamingException e) { System.out.println("Naming: " + e.getmessage()); catch (JMSException e) { System.out.println("JMS: " + e.getmessage()); Basado en los ejemplos del manual de la J2EE Tema 9 Paradigmas Avanzados de Computación Distribuida 9 import javax.jms.*; import javax.naming.*; import java.io.*; Receptor de mensajes asíncrono con Java JMS public class ReceptorMensajeAsinc { public static void main (String[] args) { // Todo igual hasta la creación del consumidor // EscuchaTexto escucha = new EscuchaTexto(); consumidor.setmessagelistener(escucha); conexion.start(); // Si hay procesamiento que hacer asíncronamente, hacerlo. // Si no, hacer un bucle de espera, hasta que el usuario decida // terminar conexion.close(); catch (NamingException e) { System.out.println("Naming: " + e.getmessage()); catch (JMSException e) { System.out.println("JMS: " + e.getmessage()); catch (IOException e) { System.out.println("E/S: " + e.getmessage()); Basado en los ejemplos del manual de la J2EE Tema 9 Paradigmas Avanzados de Computación Distribuida 10 Escucha asíncrona de mensajes con Java JMS import javax.jms.*; public class EscuchaTexto implements MessageListener { public void onmessage(message mensaje) { TextMessage msj = null; if (mensaje instanceof TextMessage) { msj = (TextMessage) mensaje; System.out.println("Leyendo mensaje: " + msj.gettext()); else { System.out.println("El mensaje no es un TextMessage"); catch (JMSException e) { System.out.println("JMSException en onmessage(): " + e.tostring()); catch (Throwable t) { System.out.println("Exception en onmessage():" + t.getmessage()); Basado en los ejemplos del manual de la J2EE Agentes móviles Tema 9 Paradigmas Avanzados de Computación Distribuida 11 Tema 9 Paradigmas Avanzados de Computación Distribuida 12 Sistemas Operativos Distribuidos y de Tiempo Real 3

Programación Orientada a Agentes En sistemas complejos, el uso de metodologías Top-Down suele ser caro, difícil de mantener y de escalar La aparición de múltiples elementos como asistentes del usuario (PDAs, teléfonos móviles, domótica, etc.) incrementa la necesidad manejarlos como entes autónomos Además, en estos contextos, el uso de sistemas centralizados es inviable por el contrario, los elementos deben incorporar cierta inteligencia para la toma de decisiones No hay una definición única y aceptada de lo que es un agente Único punto de acuerdo autonomía En la POO los objetos no tienen autonomía, actúan o responden cuando son invocados a través de métodos. En la POA los agentes deciden cuándo y cómo deben responder cuando reciben peticiones Agentes Inteligentes Agente inteligente sería aquél capaz de tener un comportamiento autónomo y flexible. Flexible implica tres propiedades relacionadas con el cumplimiento de sus objetivos: Reactividad: reaccionan a cambios en el entorno Pro-actividad: toman la iniciativa cuando es necesario Habilidad social: para interactuar con otros agentes o humanos Estas propiedades implican capacidades de: aprendizaje, cooperación, negociación e incluso movilidad Tema 9 Paradigmas Avanzados de Computación Distribuida 13 Tema 9 Paradigmas Avanzados de Computación Distribuida 14 Agentes Móviles. Definición. 1 La idea subyacente en los agentes móviles es que se trata de programas que viajan por la red con su código y su estado Pueden interrumpirse en un punto, viajar a otra máquina y continuar su ejecución exactamente en el punto en el que lo dejaron Java es el lenguaje más usado en sus implementaciones Tienen un problema grave, la seguridad que afecta al anfitrión y al propio agente móvil El principal desafío es proteger al agente móvil de un anfitrión malicioso Ordenador 1 Ordenador 2 Datos Datos Agentes móviles. Definición. 2 Agente: proceso independiente que se ejecuta en representación del usuario Agente móvil: puede viajar de una máquina a otra autónomamente puede continuar en ausencia del usuario Agente Datos Datos Ordenador 3 Ordenador 4 Tema 9 Paradigmas Avanzados de Computación Distribuida 15 Tema 9 Paradigmas Avanzados de Computación Distribuida 16 Sistemas Operativos Distribuidos y de Tiempo Real 4

Agentes móviles. Arquitectura básica Un agente es un objeto que se puede alinear (en Java: serializable) Contenido habitual de un agente móvil: identidad del agente itinerario: ordenadores que debe visitar lógica y datos: propios de su tarea Funcionamiento: en cada parada, llega a un servidor de agentes a través de él, accede a los recursos locales mediante un servicio de directorio localiza al siguiente servidor se serializa y, con la ayuda del siguiente servidor, se transporta al siguiente ordenador Implementaciones comerciales: Aglets, Concordia, Grasshopper Servidor Agente de agentes Ordenador 1 Agentes móviles. Arquitectura básica. 2 Ordenador 2 Servicio de directorio Ordenador 3 Tema 9 Paradigmas Avanzados de Computación Distribuida 17 Tema 9 Paradigmas Avanzados de Computación Distribuida 18 Interfaz Java de un agente import java.io.serializable; Interfaces Java para agentes móviles public interface InterfazAgente extends Serializable { void ejecuta (); Interfaz Java RMI del servidor de agentes Tomado de M.L. Liu Computación Distribuida public interface InterfazServidor extends Remote { public void recibe (Agente h) throws RemoteException; Tomado de M.L. Liu Computación Distribuida import java.io.*; import java.util.*; Implementación de un agente móvil en Java. 1 public class Agente implements InterfazAgente { int indicenodo; String nombre; Vector listanodos; public Agente (String minombre, Vector lalistanodos) { nombre = minombre; listanodos = lalistanodos; indicenodo = 0; static void dormir (double tiempo) { Thread.sleep ((long) (tiempo*1000.0)); catch (InterruptedException e) { System.out.println("Excepción en dormir" + e.getmessage());... Tomado de M.L. Liu Computación Distribuida Tema 9 Paradigmas Avanzados de Computación Distribuida 19 Tema 9 Paradigmas Avanzados de Computación Distribuida 20 Sistemas Operativos Distribuidos y de Tiempo Real 5

Implementación de un agente móvil en Java. 2 public void ejecuta ( ) { dormir (2); System.out.println("Soy el agente " + nombre); indicenodo++; if (indicenodo < listanodos.size( )) { String siguiente = (String) listanodos.elementat(indicenodo); dormir (5); InterfazServidor servidor = (InterfazServidor) Naming.lookup("rmi://" + siguiente + "/ServidorAgentes"); System.out.println("Encontrado Servidor de Agentes en " + siguiente); dormir (5); servidor.recibe (this); catch (Exception e) { System.out.println("Excepción en el ejecuta del Agente: " + e.getmessage()); else { dormir (5); System.out.println("El agente ha regresado a casa"); dormir (5); Tomado de M.L. Liu Computación Distribuida Tema 9 Paradigmas Avanzados de Computación Distribuida 21 Implementación de un servidor de agentes en Java import java.net.*; public class ServidorAgentes { public static void main (String args[ ]) { System.setSecurityManager(new RMISecurityManager()); SirvienteAgentes sirviente = new SirvienteAgentes(); String minombre = InetAddress.getLocalHost().getHostName(); Naming.rebind("//" + minombre + "/ServidorAgentes", sirviente); System.out.println("Servidor de agentes en " + minombre + " listo. "); catch (Exception e) { System.out.println("Excepción en el main del Servidor: " + e.getmessage()); Tomado de M.L. Liu Computación Distribuida Tema 9 Paradigmas Avanzados de Computación Distribuida 22 Implementación de un sirviente de agentes en Java import java.rmi.server.*; public class SirvienteAgentes extends UnicastRemoteObject implements InterfazServidor { public SirvienteAgentes ( ) throws RemoteException { super ( ); static void dormir (double tiempo) { idéntico al del Agente public void recibe (Agente agente) throws RemoteException { dormir (3); System.out.println ("*** El agente " + agente.nombre + " ha llegado."); agente.ejecuta( ); Tomado de M.L. Liu Computación Distribuida Tema 9 Paradigmas Avanzados de Computación Distribuida 23 import java.io.*; import java.util.*; Implementación de un cliente de agentes en Java public class ClienteAgentes { public static void main (String args[ ]) { System.setSecurityManager(new RMISecurityManager()); Vector listanodos = new Vector( ); for (int i=0; i < args.length; i++) listanodos.addelement(args[i]); InterfazServidor servidor = (InterfazServidor) Naming.lookup("rmi://" + args[0] + "/ServidorAgentes"); System.out.println("servidor en " + args[0] + " encontrado. "); System.out.println("*** Buen viaje, agente."); Agente agente = new Agente ("Austin Powers", listanodos); servidor.recibe(agente); System.out.println("*** Buen trabajo, agente."); catch (Exception e) { System.out.println("Excepción en el main del Cliente" + e.getmessage()); Tomado de M.L. Liu Computación Distribuida Tema 9 Paradigmas Avanzados de Computación Distribuida 24 Sistemas Operativos Distribuidos y de Tiempo Real 6

Características de los agentes móviles Ventajas uso eficiente de los canales de comunicación no necesidad de transferir grandes volúmenes de datos bien adaptados a enlaces inalámbricos uso de dispositivos portátiles y de bajo coste ejecución desacoplada de nodo de origen puede saltarse nodos en fallo o buscar nodos refugio ejecución asíncrona y descentralizada sin necesidad de coordinador Peligro: riesgos de seguridad para los nodos y para los agentes móviles contramedidas: autenticación, cifrado, control de acceso a recursos Servicios de red Tema 9 Paradigmas Avanzados de Computación Distribuida 25 Tema 9 Paradigmas Avanzados de Computación Distribuida 26 Servicios de red Red = infraestructura para servicios federación de proveedores y consumidores de servicios los servicios incluyen: aplicaciones, ficheros, bases de datos, dispositivos móviles, impresoras, los servicios se añaden y eliminan de forma autónoma los clientes usan uno o varios servicios localizan cuáles están disponibles a través de un servicio de directorio Ejemplos: protocolo SOAP (Simple Object Access Protocol) Jini: basado en Java RMI posibilidad de usar alquileres (leases) mediante un gestor de renovación de alquileres Interfaz Java RMI para un servidor de Jini public interface InterfazServidorHola extends Remote { public String Hola() throws RemoteException; Tomado de Nuggets de Noel Enete Tema 9 Paradigmas Avanzados de Computación Distribuida 27 Tema 9 Paradigmas Avanzados de Computación Distribuida 28 Sistemas Operativos Distribuidos y de Tiempo Real 7

import net.jini.core.entry.*; import net.jini.lookup.entry.*; import net.jini.discovery.*; import net.jini.lookup.*; import net.jini.lease.*; Implementación de un servidor en Jini public class ServidorHola { public static void main (String[] args) { System.setSecurityManager (new RMISecurityManager ()); Entry[ ] conjatributos = new Entry[1]; conjatributos[0] = new Name ("ServidorHola"); SirvienteHola sirvientehola = new SirvienteHola (); DiscoveryManagement gestordescub = null; JoinManager gestorunion = new JoinManager (sirvientehola, conjatributos, sirvientehola, gestordescub, new LeaseRenewalManager()); catch (Exception e) { System.out.println("Excepción en el main del Servidor: " + e.getmessage()); Tomado de Nuggets de Noel Enete Tema 9 Paradigmas Avanzados de Computación Distribuida 29 import java.rmi.server.*; import net.jini.lookup.*; import net.jini.core.lookup.*; Implementación de un sirviente en Jini public class SirvienteHola extends UnicastRemoteObject implements InterfazServidorHola, ServiceIDListener { public SirvienteHola () throws RemoteException { super (); public void serviceidnotify (ServiceID sidin) { System.out.println ("servidor: recibido ServiceID: " + sidin); public String Hola () throws RemoteException { return ("Hola Mundo desde ServidorHola!"); Tomado de Nuggets de Noel Enete Tema 9 Paradigmas Avanzados de Computación Distribuida 30 import net.jini.core.entry.*; import net.jini.core.lookup.*; import net.jini.core.discovery.*; import net.jini.lookup.entry.*; Implementación de un cliente en Jini class ClienteHola { public static void main (String[ ] args) { System.setSecurityManager (new RMISecurityManager ( )); LookupLocator buscador = new LookupLocator ("jini://localhost:8081"); ServiceRegistrar registrador = buscador.getregistrar ( ); Entry[ ] conjatributos = new Entry[1]; conjatributos[0] = new Name ("ServidorHola"); ServiceTemplate plantilla = new ServiceTemplate (null, null, conjatributos); InterfazServidorHola servidor = (InterfazServidorHola) registrador.lookup(plantilla); System.out.println (servidor.hola()); catch (Exception e) { System.out.println("Excepción en el main del Cliente: + e.getmessage()); Tomado de Nuggets de Noel Enete Tema 9 Paradigmas Avanzados de Computación Distribuida 31 Espacios de objetos Tema 9 Paradigmas Avanzados de Computación Distribuida 32 Sistemas Operativos Distribuidos y de Tiempo Real 8

Espacios de objetos El modelo de espacio de objetos de JavaSpaces Origen: Espacio de Tuplas de Linda secuencias tipadas de datos en memoria compartida distribuida con operaciones para insertarlas y extraerlas Espacio: repositorio de objetos compartido Cooperación entre procesos a través de objetos en uno o más espacios desacoplo en el espacio y en el tiempo no se ofrece a los procesos operaciones para modificar los objetos ni para invocar sus métodos modificación = extracción + actualización + inserción Ejemplo: API de JavaSpaces (parte de Jini) los objetos compartidos implementan la interfaz Entry Tema 9 Paradigmas Avanzados de Computación Distribuida 33 Tema 9 Paradigmas Avanzados de Computación Distribuida 34 import net.jini.core.entry.entry; Un objeto de espacio de JavaSpaces public class ObjetoCompartido implements En public String contenido; public Integer contador; public ObjetoCompartido() { public ObjetoCompartido(String contenido, int valinicial) { this.contenido = contenido; contador = new Integer(valInicial); public String tostring() { return contenido + " modificado " + contador + " veces."; public void incrementa() { contador = new Integer(contador.intValue() + 1); Tomado de Freeman et al. JavaSpaces: Principles, Patterns and Practice Tema 9 Paradigmas Avanzados de Computación Distribuida 35 Un programa que inicializa un objeto de JavaSpaces import net.jini.core.lease.lease; import net.jini.space.javaspace; public class HolaMundo { public static void main(string[] args) { ObjetoCompartido miobjeto = new ObjetoCompartido("Hola Mundo", 0); JavaSpace espacio = AccesoEspacio.buscaEspacio(); espacio.write(miobjeto, null, Lease.FOREVER); ObjetoCompartido plantilla = new ObjetoCompartido(); for (;;) { ObjetoCompartido valor = (ObjetoCompartido) espacio.read(plantilla, null, Long.MAX_VALUE); System.out.println(valor); Thread.sleep(1000); catch (Exception e) { e.printstacktrace(); Tomado de Freeman et al. JavaSpaces: Principles, Patterns and Practice Tema 9 Paradigmas Avanzados de Computación Distribuida 36 Sistemas Operativos Distribuidos y de Tiempo Real 9

Un cliente que accede a un objeto de JavaSpaces import net.jini.core.lease.lease; import net.jini.space.javaspace; public class ClienteHolaMundo { public static void main(string[] args) { JavaSpace espacio = AccesoEspacio.buscaEspacio(); ObjetoCompartido plantilla = new ObjetoCompartido(); for (;;) { ObjetoCompartido valor = (ObjetoCompartido) espacio.take(plantilla, null, Long.MAX_VALUE); valor.incrementa(); espacio.write(valor, null, Lease.FOREVER); Thread.sleep(1000); catch (Exception e) { e.printstacktrace(); Tomado de Freeman et al. JavaSpaces: Principles, Patterns and Practice Tema 9 Paradigmas Avanzados de Computación Distribuida 37 Sistemas Operativos Distribuidos y de Tiempo Real 10