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



Documentos relacionados
Sistemas de colas de mensajes

RMI [Remote Method Invocation]

Cliente/Servidor en Java

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

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

Modelo de Objetos Distribuidos

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

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

Java RMI. Sistemas Distribuidos Rodrigo Santamaría

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

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. Visión general de RMI

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. 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

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

PROGRAMACIÓN CLIENTE-SERVIDOR MEDIANTE SOCKETS EN JAVA

Introducción Descripción del servicio

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

PROGRAMACION DISTRIBUIDA MobileTracker: Ejemplo de implementación con RMI

SISTEMAS DISTRIBUIDOS

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

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

Consumo de ActiveMQ en Pre

Benemérita Universidad Autónoma del Estado de Puebla

Práctica sobre compartición de instancias remotas.

5.1 Introducción a Servicios Web

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

Componentes Distribuidos EJBs. Ing. Cesar Julio Bustacara Medina

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Comunicación Indirecta

Uso de excepciones en Java

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

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

PROGRAMACION DISTRIBUIDA

Programación Orientada a Objetos. Java: Excepciones

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:

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

Arquitectura de Proyectos de IT

Programación Orientada a Objetos en Java

Capítulo 5. Cliente-Servidor.

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.

Arquitectura de sistema de alta disponibilidad

Programación Orientada a Objetos. Java: Excepciones

Remote Method Invocation (RMI) de Java

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

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

SERVICE ORIENTED ARCHITECTURE (SOA) CONTENIDO

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

Multitarea en Java. Rafa Caballero - UCM

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

El lenguaje de programación Java

Federico Peinado

Universidad ORT - Arquitectura de Software. Requisitos

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

Código Fuente. Creamos en C:\ una carpeta para ubicar el código fuente del servidor. En mi caso, he creado una carpeta denominada rmi4

Arquitectura de Aplicaciones

FRAMEWORK 2 Recepción de SMS

UNIVERSIDAD DE SALAMANCA

3.9 Patrón Distributed callback

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

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

2. Estructura de un programa en Java

JAVA RMI (REMOTE METHOD INVOCATION)

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

ATLAS MANUAL DE INTEGRACIÓN Cliente del Servicio de SMS

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

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

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

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

Introducción al lenguaje Java

Invocación de Métodos Remotos: Prácticas de Laboratorio

Introducción a las redes de computadores

FSD Práctica Invocación Remota: JavaRMI. Estudio Previo. Información

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

MOM LSUB. 3 de abril de 2013 GSYC

4. Programación Paralela

Introducción - por qué usarlas?(1)

Solución Examen Junio 2007 (a) Ejercicio GeoTaxi (1h 20 min.) Diagrama de Casos de Uso y. Casos de uso (2,5 puntos) Modelo de Dominio (1,5 puntos)

Mensajes. Interbloqueo

TRANSFERENCIA DE FICHEROS FTP

INTRODUCCIÓN A JAVA. Índice

PRUEBAS DE SOFTWARE TECNICAS DE PRUEBA DE SOFTWARE

Primer Parcial Septiembre 5 de 2009

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

Java en 2 horas. Rodrigo Santamaría

SIEWEB. La intranet corporativa de SIE

1. Creación del repositorio

APELLIDOS:... NOMBRE:... GRUPO:... NÚMERO DE EXPEDIENTE:...

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 Tema 9 Paradigmas Avanzados de Computación Distribuida 1

Sistemas de colas de mensajes 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 Tema 9 Paradigmas Avanzados de Computación Distribuida 3

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 Emisores Un mensaje Tema 9 Paradigmas Avanzados de Computación Distribuida 4

Suscriptor 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 Sistema de Mensajes ocurre el evento 1 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

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 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

Emisor de mensajes con Java JMS import javax.jms.*; import javax.naming.*; public class EmisorMensaje { public static void main (String[] args) { try { 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

import javax.jms.*; import javax.naming.*; Receptor de mensajes síncrono con Java JMS public class ReceptorMensajeSinc { public static void main (String[] args) { try { 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) { try { // 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; try { 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 Tema 9 Paradigmas Avanzados de Computación Distribuida 11

Agentes móviles Tema 9 Paradigmas Avanzados de Computación Distribuida 12

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 Tema 9 Paradigmas Avanzados de Computación Distribuida 13

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 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 Tema 9 Paradigmas Avanzados de Computación Distribuida 15

Ordenador 2 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 Datos Datos Agente Ordenador 1 Ordenador 3 Datos Datos Ordenador 4 Tema 9 Paradigmas Avanzados de Computación Distribuida 16

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 Tema 9 Paradigmas Avanzados de Computación Distribuida 17

Agentes móviles. Arquitectura básica. 2 Ordenador 2 Servidor de agentes Agente Servicio de directorio Ordenador 1 Ordenador 3 Tema 9 Paradigmas Avanzados de Computación Distribuida 18

Interfaz Java de un agente Interfaces Java para agentes móviles import java.io.serializable; public interface InterfazAgente extends Serializable { void ejecuta (); Tomado de M.L. Liu Computación Distribuida Interfaz Java RMI del servidor de agentes import java.rmi.*; public interface InterfazServidor extends Remote { public void recibe (Agente h) throws RemoteException; Tomado de M.L. Liu Computación Distribuida Tema 9 Paradigmas Avanzados de Computación Distribuida 19

Implementación de un agente móvil en Java. 1 import java.io.*; import java.util.*; import java.rmi.*; 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) { try { 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 20

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); try { 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.*; import java.rmi.*; public class ServidorAgentes { public static void main (String args[ ]) { try { 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.*; 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.*; import java.rmi.*; Implementación de un cliente de agentes en Java public class ClienteAgentes { public static void main (String args[ ]) { System.setSecurityManager(new RMISecurityManager()); try { 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

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 Tema 9 Paradigmas Avanzados de Computación Distribuida 25

Servicios de red 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 Tema 9 Paradigmas Avanzados de Computación Distribuida 27

Interfaz Java RMI para un servidor de Jini import java.rmi.*; public interface InterfazServidorHola extends Remote { public String Hola() throws RemoteException; Tomado de Nuggets de Noel Enete Tema 9 Paradigmas Avanzados de Computación Distribuida 28

import java.rmi.*; 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) { try { 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

Implementación de un sirviente en Jini import java.rmi.*; import java.rmi.server.*; import net.jini.lookup.*; import net.jini.core.lookup.*; 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.*; import java.rmi.*; Implementación de un cliente en Jini class ClienteHola { public static void main (String[ ] args) { try { 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

Origen: Espacio de Tuplas de Linda Espacios de objetos 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

El modelo de espacio de objetos de JavaSpaces Tema 9 Paradigmas Avanzados de Computación Distribuida 34

Un objeto de espacio de JavaSpaces import net.jini.core.entry.entry; public class ObjetoCompartido implements Entry { 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) { try { 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

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) { try { 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