Diseño de Algoritmos Distribuidos en Java

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Diseño de Algoritmos Distribuidos en Java"

Transcripción

1 Diseño de Algoritmos Distribuidos en Java José Luis Pastrana Brincones Departamento de Lenguajes y Ciencias de la Computación de la Universidad de Málaga Resumen El diseño de algoritmos es una parte fundamental en las tecnologías de la información, como se ha visto reflejado por el gran número de libros y artículos relacionados con el tema. La gran mayoría de los mismos, tratan los algoritmos en el contexto de una programación secuencial, donde el flujo de control va siempre en una misma dirección y en cada paso del algoritmo se realiza una única acción. El gran auge del concepto de redes de comunicación, junto con los avances en la metodología de programación han conseguido que el concepto de comunicación y de diseño de algoritmos distribuidos surjan como un nuevo aspecto en las técnicas de desarrollo del software. Los algoritmos distribuidos, clásicamente, han sido desarrollados mediante el uso de lenguajes imperativos a los que se les ha añadido determinadas primitivas de comunicación, pero si nos fijamos en la filosofía de los lenguajes orientados a objetos, podemos ver la similitud existente entre procesos y objetos, comunicación y métodos, y aún más, incluso podríamos ver nuestra red de comunicaciones como un objeto más en nuestro sistema. En este trabajo, consideraremos dos clases de algoritmos distribuidos: la primera en la que trataremos los algoritmos basados en una arquitectura Cliente/Servidor y para la que usaremos una técnica de invocación de métodos remotos. Y una segunda,más genérica, en la que consideraremos un sistema distribuido como un conjunto de objetos o procesos conectados a través de una red y que cooperan para la obtención de un objetivo común. Para la resolución de este tipo de problemas, consideraremos la red como un objeto más del sistema que tiene métodos para el envío y recepción de mensajes a través de la misma. A lo largo del trabajo, se describirán ambas técnicas y se implementarán varios algoritmos como ejemplo para su mejor comprensión. Como lenguaje de soporte hemos usado Java debido al gran auge que está teniendo en nuestros días, así como por adaptarse a los requerimientos de orientación a objetos e incluir un paquete para la

2 invocación de métodos remotos, y la clase jpvm (David A. Thurman) que embebe PVM en Java y que nos ha servido para modelar la red como un objeto del sistema. Arquitectura Cliente/Servidor. En una arquitectura Cliente/Servidor, el servidor es un proceso que repetidamente maneja peticiones de los clientes (recibe una petición de un cliente, realiza el servicio y retorna el resultado), y el cliente es el proceso que realiza dichas peticiones de servicios a otra aplicación llamada cliente. El desarrollo de aplicaciones Cliente/Servidor mediante sockets conlleva el diseño de un protocolo que consiste en un lenguaje común entre el Cliente y el Servidor. El diseño de dicho protocolo es una de las mayores fuentes de errores tales como el deadlock. En lugar de trabajar directamente con sockets, una aplicación Cliente/Servidor puede ser desarrollada usando una filosofía de orientación a objetos. Desde el punto de vista del Cliente, consideramos el Servidor como un objeto remoto que nos ofrece una serie de servicios que pueden ser llamados mediante la invocación remota de sus métodos. La invocación de métodos remotos (Remote Methods Invocation, RMI) es muy similar (pero más general y fácil de usar) que la llamada a procedimientos remotos (Remote Procedure Call, RPC). Básicamente, el usuario trabaja con los objetos remotos como si estos fueran locales, gracias a que los paquetes RMI incluyen un recolector de basura distribuido y una invocación transparente de los métodos remotos (con la misma sintaxis que los locales). Veamos a continuación cómo podríamos realizar esto mediante un sencillo ejemplo realizado en Java. Vamos a desarrollar un Servidor que nos realiza operaciones sobre vectores y matrices, así como un cliente que las utiliza. El desarrollo de aplicaciones Cliente/Servidor en Java conlleva 6 etapas: 1. Definición de la Interfaz Remota. Permite al cliente conocer los servicios que puede utilizar, por lo tanto debe ser pública. 2. Implementación de la interfaz remota. Esta será el cuerpo del servidor. 3. Escribir la aplicación cliente que use el servidor. 4. Generar los stubs y skeletons. Un stub es un cliente proxy y un skeleton es una entidad servidor que realiza las llamadas a la implementación actual del objeto remoto 5. Ejecutar el registry. Es un Servidor de nombres.

3 1. Ejecutar el Servidor y el/los Cliente. Remote interface. Implementation public import interface java.rmi.*; MatrixInterface extends java.rmi.remote import { java.rmi.server.unicastremoteobject; public int[] add(int a[], int b[] ) throws java.rmi.remoteexception; public class public MatrixServer int[] sub(int extends a[], int UnicastRemoteObject b[] ) throws java.rmi.remoteexception; implements MatrixInterface { private... String ServerName; public public MatrixServer int[][] add(int ( String a[][], s ) throws int b[][] RemoteException ) throws java.rmi.remoteexception; { ServerName public int[][] = s; sub(int a[][], int b[][] ) throws java.rmi.remoteexception; public... int[] add(int a[], int b[] ) throws RemoteException {... public int[] sub(int a[], int b[] ) throws java.rmi.remoteexception { public int[][] add(int a[][], int b[][] ) throws java.rmi.remoteexception {... public int[][] sub(int a[][], int b[][] ) throws java.rmi.remoteexception { public static void main(string argv[]) { MatrixServer server; System.setSecurityManager( new RMISecurityManager() ); try { server = new MatrixServer ( " MatrixServer " ); Naming.rebind("//host/ MatrixServer ",server); System.out.println("MatrixServer running "); catch (Exception e) { System.out.println("Sorry, error succeeded:" + e.getmessage()); e.printstacktrace(); Cliente Application import java.rmi.*; import java.net.*; public class Cliente { public static void main(string argv[]) { int a[] = { 1, 2, 3, 4, 5 ; int b[] = { 6, 7, 8, 9, 0 ; int result [] = new int[5]; MatrixInterface RemoteServer; int i; try { String url = "//host/matrixserver"; RemoteServer = (MatrixInterface)Naming.lookup(url); result = RemoteServer.add(a,b); System.out.print( ( ); for(i=0;i<4;++i) System.out.print(a[i] +, ); System.out.print(a[4] + ) + ( ); for(i=0;i<4;++i) System.out.print(b[i] +, ); System.out.print(b[4] + ) = ( ); for(i=0;i<4;++i) System.out.print(c[i] +, ); System.out.println(c[4] + ) ); catch (Exception e) { System.out.println("Sorry, error succeeded:" + e.getmessage()); e.printstacktrace();

4 Conjunto e Procesos que Cooperan para lograr un Objetivo Común. Un algoritmo distribuido ha sido definido clásicamente como un conjunto de procesos, conectados a través de una red, que cooperan para lograr un objetivo común. Nuestra aproximación consiste en considerar cada proceso como un objeto, e incluso la red de conexión es considerada como un objeto más de nuestro sistema. Cada objeto-proceso tiene sus propios métodos y objetos locales para la resolución de su parte de la tarea y la red es un objeto especial que tiene métodos para el envío y recepción de mensajes entre objetos. Veamos cómo podemos utilizar esta aproximación para la resolución de un problema clásico para sistemas distribuidos: El Problema de la Exclusión Mutua Distribuida. Hemos utilizado Java como soporte junto con la clase jpvm (desarrollada por David A. Thurman, Center for Human-Machine Systems Research, School of Industrial and Systems Engineering, Georgia Institute of Technology) para el modelado de la red como objeto. Esta clase implementa todas las primitivas de las librerías de PVM mediante la incorporación de métodos en código nativo. El Problema de la Exclusión Mutua Distribuida. Este es uno de los primeros problemas que se plantean en programación distribuida. Una serie de procesos, que trabajan en paralelo, compiten por recursos que no pueden ser accedidos al mismo tiempo. El problema de la exclusión mutua fue debido a Dekker y usaba únicamente operaciones primitivas para la lectura y escritura de una palabra en memoria. En un sistema distribuido, la especificación de un algoritmo de exclusión mutua no puede ser realizada en términos de dependencia de un acceso a memoria central, debe ser realizada en términos de intercambio de mensajes, y el algoritmo debe tener las características de equitabilidad y ausencia de bloqueo, es decir, que cualquier proceso que desee entrar en su sección crítica debe ser capaz de hacerlo en un intervalo finito de tiempo. Circulación de un Token en un Anillo Lógico. Este es un algoritmo simple para el problema de la exclusión mutua distribuida, aplicable cuando la topología de nuestra red es un anillo. Cada proceso solamente podrá entrar en su sección crítica cuando posea el Token, que siempre recibirá de su vecino de la izquierda, y dará al de su derecha al salir de la sección crítica.

5 public class TokenRing { public static void main(string argv[]) { Net net; int max; int me; int left; int right; boolean token_present; try { Net = new Net((Integer.valueOf (argv[0])).intvalue()); catch (ArrayIndexOutOfBoundsException e) { Net = new Net(1); me = net.mi_id(); max = net.numprocs(); right = (me+1)%max; left = me -1; if (left<0) left = max -1; if (me==0) else /* Algorithm Body */ token_present=true; token_present = false; while(true) { if (!token_present) {net.wait_token(left); token_present=true; /* Critical Section */ System.out.println("Process "+me+ " in Critical Section"); /* Critical Section */ net.send_token(right); token_present=false; public class Net extends jpvm { private int my_id; private int my_father; private int maxproc; private int processes[]; private Net pvm; public final static int Initialise = 0; public final static int Token = 1; public Net() { super(); public Net(int max) { String javaexe ="/jdk/bin/java"; String args[]; int max_array[]; int i; args = new String [3]; args[0]= "-classpath"; args[1]= " /jdk/lib/classes.zip + :/jpvm-v1.1.4:/tokenring_pvm"; args[2]="tokenring"; max_array = new int[1]; pvm = new Net(); my_id = pvm.mytid(); my_father = pvm.parent(); if (my_father==pvmnoparent) { maxproc = max; processes[0]=my_id; { pvm.spawn(javaexe,args, PvmTaskDefault,"",max_array); processes[i]=max_array[0]; max_array[0] = maxproc; pvm.initsend(pvmdatadefault); pvm.pkint(max_array, 1, 1); pvm.pkint(processes, maxproc, 1); pvm.send(processes[i], Initialise); else { pvm.recv(my_father, Initialise); pvm.upkint(max_array, 1, 1); maxproc = max_array[0]; pvm.upkint(processes, maxproc, 1); public int mi_id() { int i; for (i=0;i<maxproc;++i) if (processes[i]==my_id) return i; return -1; public int numprocs() { return maxproc; public void wait_token(int left) { pvm.recv(processes[left],token); public void send_token(int right) { pvm.initsend(pvmdatadefault); pvm.send(processes[right],token);

6 El Algoritmo de Ricart and Agrawala/Suzuki Kasami. En este algoritmo, el privilegio que permite a un proceso entrar en su sección crítica esta representado por un Token; cualquier proceso que posea el Token podrá entrar en su sección crítica sin pedir permiso a los demás. Inicialmente el Token es asignado a uno de los procesos (el proceso número cero en nuestro caso). Un proceso que desea entrar en su sección crítica no sabrá qué otro proceso tiene el Token en dicho instante y lo pedirá mediante la difusión todos los demás de un mensaje que estará etiquetado en el tiempo. Cuando el proceso que tiene el Token (Pj) deja su sección crítica, busca en el vector de peticiones en orden j+1,j+2,...,n,1,2,...j-1 el primer valor de k tal que su etiqueta de tiempo de su última petición del Token sea mayor que el valor almacenado en el Token para dicho proceso, y entonces transfiere el Token de Pj a Pk. public class Ricart { public static void main(string argv[]) { Net net; int max,me,i,j clock,token[],requests[]; boolean token_present, token_held; try { net = new Red( (Integer.valueOf (argv[0])).intvalue()); catch (ArrayIndexOutOfBoundsException e ) { net = new Red(1); me = net.mi_id(); max = net.numprocs(); if (me==0) token_present=true; else token_present = false; token_held=false; clock=0; token = new int[max]; requests = new int[max]; for(i=0;i<max;++i) { token[i]=0; requests[i]=0; /* Algorithm Body */ while(true) { if (!token_present) { ++clock; net.broadcast(requests,clock); token = net.wait_access(); token_present=true; token_held=true; /* Critical Section */ System.out.println("Process "+me+ " in Critical Section"); /* Critical Section */ token[me] = clock; token_held=false; requests = net.wait_request(); if (requests!=null) /* any request */ for(i=0;i<max;++i) { j = (i+me+1)%max; if ( (requests[j] > token[j]) && (token_present) ) { token_present=false; net.send_access(token,j); break;

7 public class Net extends jpvm { private int my_id,my_father,maxproc, processes[]; private Net pvm; public final static int Initialise = 0; public final static int Request = 1; public final static int Access = 2; public final static int Any = -1; public Net() { super(); public Net(int max) { String javaexe = "/jdk/bin/java"; String args[]; int max_array[],i; args = new String [3]; args[0]= "-classpath"; args[1]= "/jdk/lib/classes.zip: + /jpvm-v1.1.4: /Ricart_pvm"; args[2]="ricart"; max_array = new int[1]; pvm = new Net(); my_id = pvm.mytid(); my_father = pvm.parent(); if (my_father==pvmnoparent) { maxproc = max; processes[0]=my_id; { pvm.spawn(javaexe,args, PvmTaskDefault,"",max_array); processes[i]=max_array[0]; max_array[0] = maxproc; pvm.initsend(pvmdatadefault); pvm.pkint(max_array, 1, 1); pvm.pkint(processes, maxproc, 1); pvm.send(processes[i],initialise); else { pvm.recv(my_father,initialise); pvm.upkint(max_array, 1, 1); maxproc = max_array[0]; pvm.upkint(processes, maxproc, 1); public int mi_id() { int i; for (i=0;i<maxproc;++i) if (processes[i]==my_id) return i; return -1; public int numprocs() { return maxproc; public void broadcast(int requests[],int clock) { int i,ck[],me[]; me = new int[1]; me[0] = mi_id(); ck = new int[1]; ck[0]=clock; pvm.initsend(pvmdatadefault); pvm.pkint(me, 1, 1); pvm.pkint(ck, 1, 1); pvm.pkint(requests, maxproc, 1); for (i=0;i<maxproc;++i) if (processes[i]!=my_id) pvm.send(processes[i],request); public int[] wait_request() { int rq[],info,ck[],me[]; info = pvm.nrecv(any,request); if (info<=0) return null; /* No requests */ rq = new int[maxproc]; me = new int[1]; ck = new int[1]; pvm.upkint(me, 1, 1); pvm.upkint(ck, 1, 1); pvm.upkint(rq, maxproc, 1); if (rq[me[0]] < ck[0]) rq[me[0]] = ck[0]; return rq; public int[] wait_access() { int token[]; token = new int[maxproc]; pvm.recv(any,access); pvm.pkint(token, maxproc, 1); return token; public void send_access(int token[],int j)

8 { pvm.initsend(pvmdatadefault); pvm.pkint(token, maxproc, 1); pvm.send(processes[j],access); Pérdida del Token: Algoritmo de Misra. El principal problema de la solución de un Token circulando por un anillo es que la pérdida de dicho Token implica un bloqueo del sistema. El Algoritmo de Misra fue desarrollado para la detección y regeneración del Token en el caso de que éste se pierda. Usaremos dos tokens, llamados ping y pong, y asociados con ellos dos números enteros llamados nbping y nbpong respectivamente, iguales en valor absoluto pero de signo opuesto, que almacenan el número de veces que ambos tokens se han encontrado en un mismo proceso. Dichos números estarán entonces relacionados por la restricción nbping + nbpong = 0. Inicialmente, ambos tokens están en un mismo proceso y por tanto, nbping = 1, nbpong = -1. Cada proceso Pi almacena en una variable local, inicializadas a cero, el valor de nbping o nbpong, asociado con el Token. Esencialmente, el algoritmo conserva la relación nbping + nbpong = 0 y cuando esta relación se rompe, significa que el Token ping (o pong) se ha perdido y hay que regenerarlo. public class Misra { public final static int ping = 0; public final static int pong = 1; public static void main(string argv[]) { Net net; int max,me,left,right, nbping=1,nbpong=-1,m=0; boolean token_ping,token_pong; try { net = new net( (Integer.valueOf (argv[0])).intvalue()); catch (ArrayIndexOutOfBoundsException e) { net = new net(1); me = net.mi_id(); max = net.numprocs(); right = (me+1)%max; left = me -1; if (left<0) left = max -1; if (me==0) { token_ping=true; token_pong=true; else { token_ping = false; token_pong = false; /* Algorithm Body */ while(true) { if (!token_ping) token_ping = net.wait_token(left,ping,nbping); if (!token_pong) token_pong = net.wait_token(left,pong,nbpong); if (token_ping) /* Critical Section */ { System.out.println("Process "+me +" in Critical Section "); if ((token_ping) && (token_pong) ) { ++ nbping; -- nbpong; net.send_token(right,ping,nbping); net.send_token(right,pong,nbpong); else { if (token_ping) { if (m == nbping) /* Token Lost */ { ++nbping; nbpong = -nbping; net.send_token(right,pong, nbpong); /* Regenerate it */ else { m = nbping; net.send_token(right,ping,nbping); if (token_pong)

9 { if (m == nbpong) /* Token Lost */ { ++nbpong; nbping = -nbpong; net.send_token(right,ping, nbping); /* Regenerate it */ else { m = nbpong; net.send_token(right,pong,nbpong); public class Net extends jpvm { private int my_id,my_father, maxproc,processes[]; private Net pvm; public final static int Initialise = 0; public Net() { super(); public Net(int max) { String args[],javaexe = "/jdk/bin/java"; int i,max_array[]; args = new String [3]; args[0]= "-classpath"; args[1]= "/jdk/lib/classes.zip + :/jpvm-v1.1.4:/misra_pvm"; args[2]="misra"; max_array = new int[1]; pvm = new Net(); my_id = pvm.mytid(); my_father = pvm.parent(); if (my_father==pvmnoparent) { maxproc = max; processes[0]=my_id; { pvm.spawn(javaexe,args, PvmTaskDefault,"",max_array); processes[i]=max_array[0]; max_array[0] = maxproc; pvm.initsend(pvmdatadefault); pvm.pkint(max_array, 1, 1); pvm.pkint(processes, maxproc, 1); pvm.send(processes[i],initialise); else { pvm.recv(my_father,initialise); pvm.upkint(max_array, 1, 1); maxproc = max_array[0]; pvm.upkint(processes, maxproc, 1); public int mi_id() { int i; for (i=0;i<maxproc;++i) if (processes[i]==my_id) return i; return -1; public int numprocs() { return maxproc; public boolean wait_token(int i,int tag, int nb) { int info,numb[]; info = pvm.nrecv(processes[i],tag); if (info<=0) return false; numb = new int[1]; pvm.upkint(numb,1,1); nb = numb[0]; return true; public void send_token(int i,int tag, int nb) { int numb[]; numb = new int[1]; numb[0] = nb; pvm.initsend(pvmdatadefault); pvm.pkint(numb,1,1); pvm.send(processes[i],tag); Referencias [1] M. Raynal, Distributed Algorithms and Protocols: John Wiley & Sons Ltd., [2] R. Andrews, Concurrent Programming. Gregory: Benjamin/Cummings, 1991.

10 [3] Remote Method Invocation System. Sun Microsystems Inc., [4] Getting Started using RMI. Sun Microsystems Inc., [5] RMI and Object Serialisation. Sun Microsystems Inc., [6] Q. H. Mahmond, Distributed Object Programming Using Java:Java Resource Center,1997.

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

DISEÑO DE UNA ARQUITECTURA CLIENTE/SERVIDOR MEDIANTE OBJETOS DISTRIBUIDOS EN JAVA DISEÑO DE UNA ARQUITECTURA CLIENTE/SERVIDOR MEDIANTE OBJETOS DISTRIBUIDOS EN JAVA José Luis Pastrana Brincones ([email protected]) Dpto. Lenguajes y Ciencias de la Computación. Universidad de Málaga

Más detalles

Modelo de Objetos Distribuidos

Modelo de Objetos Distribuidos Remote Method Invocation Modelo de Objetos Distribuidos Un objeto remoto es un objeto cuyos métodos pueden ser invocados desde otra máquina virtual de java, potencialmente en un host diferente. Modelo

Más detalles

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

Java RMI Remote Method Invocation. Invocación Remota de Métodos en Java Java RMI Remote Method Invocation Invocación Remota de Métodos en Java Contenido Introducción Implementación Diseño de la interfaz remota. Implementación de la interfaz remota. Obtención de las clases

Más detalles

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

Llamada a métodos remotos (RMI). Curso 04/05. Tema 9. Departament d Informàtica. Universitat de València. 1. Introducción 2 Tema 9 Llamada a métodos remotos (RMI). Departament d Informàtica. Índice 1. Introducción 2 1.1. Cómo funciona RMI?.......................................... 2 2. Usando RMI 4 2.1. Fase de desarrollo:

Más detalles

Invocación de métodos remotos en Java: JAVA - RMI

Invocación de métodos remotos en Java: JAVA - RMI Diseño Y Aplicaciones de Sistemas Distribuidos Invocación de métodos remotos en Java: JAVA - RMI Joan Vila DISCA / UPV Departament d Informàtica de Sistemes i Computadors Universitat Politècnica de València

Más detalles

RMI. Aplicaciones Distribuidas

RMI. Aplicaciones Distribuidas RMI Aplicaciones Distribuidas Contenido Objetos Distribuidos y RMI. Interface Remota. Clase Implementación. Referencias Remotas. Registro RMI. Paso de parámetros. Descarga dinámica de código. Desarrollo

Más detalles

Java RMI. Sistemas Distribuidos Rodrigo Santamaría

Java RMI. Sistemas Distribuidos Rodrigo Santamaría + Java RMI Sistemas Distribuidos Rodrigo Santamaría RMI Java RMI 2 + RMI 3 Remote Method Invocation: middleware para que un objeto que se ejecuta en una JVM use métodos de otro objeto que se ejecuta en

Más detalles

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

Java RMI. las RPC de Java. Parte I. Luis Fernando Llana Díaz. Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid las RPC de Java. Parte I Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid de marzo de 006 RMI y RPC RPC: Remote Procedure Call. RMI y RPC RPC: Remote Procedure Call.

Más detalles

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

en otra máquina exactamente de la misma manera que si se encontrará en la misma máquina Máquina A Máquina B Máquina C Lo ideal sería tener un sistema distribuido orientado a objetos que permita: 1)Invocar un método de un objeto que se localiza en otra máquina exactamente de la misma manera

Más detalles

JAVA RMI (REMOTE METHOD INVOCATION)

JAVA RMI (REMOTE METHOD INVOCATION) JAVA RMI (REMOTE METHOD INVOCATION) RMI RMI (Remote Method Invocation) Mecanismo RPC de Mecanismo mediante el cual los procesos cliente y servidor en una aplicación distribuida se comunican Una aplicación

Más detalles

RMI [Remote Method Invocation]

RMI [Remote Method Invocation] RMI [Remote Method Invocation] Cuando utilizamos sockets, hemos de preocuparnos de cómo se transmiten físicamente los datos entre los extremos de una conexión (a nivel de bytes, ya que usamos los streams

Más detalles

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

Sistemas Distribuidos Java RMI (Remote Method Invocation) Alberto Lafuente Mikel Larrea Dpto. ATC, UPV/EHU Sistemas Distribuidos Java RMI (Remote Method Invocation) Alberto Lafuente Mikel Larrea Dpto. ATC, UPV/EHU Contenido Interfaz Implementación Servidor Cliente Puesta en marcha de la aplicación: Compilador

Más detalles

El servicio de echo en Java-RMI

El servicio de echo en Java-RMI PRÁCTICA 3 El servicio de echo en Java-RMI E l objetivo de esta práctica es crear y ejecutar una aplicación cliente servidor echo basada en java-rmi. La práctica tiene dos partes: La primera parte implementa

Más detalles

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

Práctica 2: Java Remote Method Invocation (RMI) Práctica 2: Java Remote Method Invocation (RMI) Aplicaciones Telemáticas II Introducción El objetivo de esta práctica es conocer un poco más sobre el paradigma de objetos remotos. La idea principal es

Más detalles

Objetos Distribuidos

Objetos Distribuidos Objetos Distribuidos Objetos Distribuidos Conceptos Estado: encapsula los datos Métodos: operaciones sobre los datos Interfaz: se utiliza para la disponibilidad de los métodos El Estado y la Interfaz se

Más detalles

1. Visión general de RMI

1. Visión general de RMI 1. Visión general de RMI Java RMI permite al programador ejecutar métodos de objetos remotos utilizando la misma semántica que si fueran invocaciones locales (Véase Figura 1). Máquina Local (Cliente) Máquina

Más detalles

5.1 Introducción a las tecnologías de objetos distribuidos con Java RMI

5.1 Introducción a las tecnologías de objetos distribuidos con Java RMI 5.1 Introducción a las tecnologías de objetos distribuidos con Java RMI Contenidos Tutorial de Java RMI Caso de estudio: diseño e implementación de la capa modelo de MiniBank con Java RMI Arquitectura

Más detalles

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

Arquitectura Cliente/Servidor. Invocación de Métodos Remotos RMI: Remote Method Invocation. Llamadas a Métodos Remotos Invocación de Métodos Remotos RMI: Remote Method Invocation Prof Wílmer Pereira Universidad Simón Bolívar Arquitectura Cliente/Servidor Cliente Request Reply Servidor Cómo permitir comunicación entre objetos

Más detalles

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

JAVA - Serializacíon / RMI. (C) Philippe Roose - 2004, 2005 JAVA - Serializacíon / RMI (C) Philippe Roose - 2004, 2005 Serializar objetos- concepto Desde el JDK 1.1 Serializar objetos permite de escribir un objeto en un fichero como un flujo de octets (archivo

Más detalles

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

Sistemas Distribuidos (Capítulo 8 de Distributed Computing de M. L. Liu) Devoluciones de llamada en RMI (Callbacks) Sistemas Distribuidos (Capítulo 8 de Distributed Computing de M. L. Liu) Devolución de llamadas, introducción Cliente-servidor clásico servidorpasivo Tipo pull.

Más detalles

PROGRAMACION DISTRIBUIDA

PROGRAMACION DISTRIBUIDA PROGRAMACION DISTRIBUIDA Ejemplo de uso de estrategias de diseño con RMI Héctor Pérez 2 Ejemplo de callback: SwiftEagle shot() setdirection() Target nearnessreport(target,observer) signal? explode() SwiftEagle

Más detalles

PROGRAMACION DISTRIBUIDA MobileTracker: Ejemplo de implementación con RMI

PROGRAMACION DISTRIBUIDA MobileTracker: Ejemplo de implementación con RMI PROGRAMACION DISTRIBUIDA MobileTracker: Ejemplo de implementación con RMI Héctor Pérez 2 MobileTracker: Especificación El computador de la torre de control ejecuta el servicio Follower que registra los

Más detalles

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

Práctica 4: Java Remote Method Invocation (RMI) Práctica 4: Java Remote Method Invocation (RMI) Aplicaciones Telemáticas II Introducción Hasta el momento hemos visto aplicaciones remotas donde un cliente utiliza un objeto remoto que ha sido publicado

Más detalles

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos

Más detalles

CAPITULO 3 ARQUITECTURA DE COMPONENTES GIS EN INTERNET

CAPITULO 3 ARQUITECTURA DE COMPONENTES GIS EN INTERNET CAPITULO 3 ARQUITECTURA DE COMPONENTES GIS EN INTERNET 3.1- ARQUITECTURA DE COMPONENTES GIS La presente tesis trata del diseño y desarrollo de una aplicación basado en el Web para servir datos geográficos

Más detalles

Remote Method Invocation (RMI) Basado en: Fundamentals of RMI. Short Course. JGuru.

Remote Method Invocation (RMI) Basado en: Fundamentals of RMI. Short Course. JGuru. Remote Method Invocation (RMI) Basado en: Fundamentals of RMI. Short Course. JGuru. 1 Paradigmas de desarrollo Desarrollo basado en protocolos Se diseña el protocolo Se elaboran los módulos para manejo

Más detalles

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

CONTENIDO. Serialización. Carga dinamica de stubs RMI AVANZADO. Callbacks. Carga dinámica de Stubs CONTENIDO RMI AVANZADO Carga dinamica de stubs Callbacks Carga dinámica de Stubs Para tener acceso a un objeto remoto mediante RMI, el cliente debe recibir un stub serializado y deserializarlo. El stub

Más detalles

El servicio de echo con sockets

El servicio de echo con sockets PRÁCTICA 2 El servicio de echo con sockets E l objetivo de esta práctica es crear y ejecutar una aplicación cliente servidor "echo" basada en sockets TCP pero estructurándola según el modelo de objetos

Más detalles

PROGRAMACION DISTRIBUIDA

PROGRAMACION DISTRIBUIDA PROGRAMACION DISTRIBUIDA Aspectos avanzados de RMI Héctor Pérez 2 Objetivos Análisis de un conjunto de estrategias de diseño utilizando RMI que nos pueden servir de guía para el diseño de sistemas distribuidos

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java I... 5 Tipos de datos... 6 Tipos de datos simples... 7 Operadores... 11 Operadores Aritméticos... 12 Operadores relacionales...

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación: Examen de Java Nombre: DNI: Titulación: 1. Cómo podemos compilar desde la línea de comandos la clase Java A que utiliza una librería empaquetada bd.jar? 2. Indica si es correcto el siguiente código. Justifica

Más detalles

RMI Remote Method Invocation

RMI Remote Method Invocation 2 RMI Remote Method Invocation Dr. Víctor J. Sosa Sosa Introducción La invocación remota de métodos de Java es un modelo de objetos distribuidos, diseñado específicamente para ese lenguaje, por lo que

Más detalles

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

FSD Práctica Invocación Remota: JavaRMI. Estudio Previo. Información FSD Práctica Invocación Remota: JavaRMI Tipo de entrega: por grupos de prácticas Fecha límite: sesión de laboratorio Lugar: Campus Digital Comentario: No hay que entregar el estudio previo Objetivo de

Más detalles

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

Interacción entre Aplicaciones: objetos distribuidos e invocación remota Interacción entre Aplicaciones: objetos distribuidos e invocación remota En la anterior práctica se ha visto cómo extender la funcionalidad de un servidor web incorporando servlets que atienden peticiones

Más detalles

SISTEMAS DISTRIBUIDOS

SISTEMAS DISTRIBUIDOS Sesión 5: Tema 8: Objetos Distribuidos e Invocación Remota. Java RMI SISTEMAS DISTRIBUIDOS GRADO EN INGENIERÍA INFORMÁTICA UNED Introducción Índice (1/2) Modelos de programación de aplicaciones distribuidas.

Más detalles

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java Identificadores Las variables se utilizan en programación para almacenar temporalmente

Más detalles

Práctica sobre compartición de instancias remotas.

Práctica sobre compartición de instancias remotas. Práctica sobre compartición de instancias remotas. Para esta práctica se ha construido un pequeño sistema cliente-servidor que permite la resolución de Sudokus entre varios jugadores. El servidor consta

Más detalles

Una introducción a Java RMI

Una introducción a Java RMI Una introducción a Java RMI César Llamas Bello Estas transparencias no hubieran sido posible sin el tutorial de José M. Vidal Swearingen Engineering Center, University of South Carolina, Columbia Introducción

Más detalles

Cliente/Servidor en Java

Cliente/Servidor en Java Cliente/Servidor en Java Grupo ARCOS Desarrollo de Aplicaciones Distribuidas Ingeniería Informática Universidad Carlos III de Madrid Contenidos 1. Introducción: 1. Paradigma cliente/servidor 2. Entorno

Más detalles

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3 Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Definición de tipo genérico Hablamos de un tipo genérico cuando el tipo en cuestión depende

Más detalles

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Unidad Didáctica 2 Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.3 Índice

Más detalles

Tema 4: INVOCACIÓN REMOTA

Tema 4: INVOCACIÓN REMOTA Tema 4: INVOCACIÓN REMOTA E. U. Informática en Segovia Departamento de Informática Universidad de Valladolid SD_TE04_20050509 EUI-SG/INFOR.UVA.ES 1 4.1 Introducción Invocación remota: integra programas

Más detalles

Tema 3. Objetos distribuidos

Tema 3. Objetos distribuidos Tema 3. Objetos distribuidos SCS Sistemas Cliente/Servidor 4 o informática http://ccia.ei.uvigo.es/docencia/scs octubre 2008 FJRP, FMBR 2008/09 ccia SCS 3.1 Modelo de objetos distribuidos Objetivo: Extender

Más detalles

Componentes Distribuidos EJBs. Ing. Cesar Julio Bustacara Medina

Componentes Distribuidos EJBs. Ing. Cesar Julio Bustacara Medina Componentes Distribuidos EJBs Ing. Cesar Julio Bustacara Medina Introducción La Clase del Bean Contiene la lógica del Enterprise Bean. Es una clase Java pública, que implementa los métodos de negocios

Más detalles

Estructuras de control selectivas

Estructuras de control selectivas Práctica 3 Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 2.0.2 Concepto de sentencia y estructura de control El cuerpo de los métodos

Más detalles

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

Ingeniería del Software Arquitectura Física en 3 niveles Introducción En este laboratorio desplegaremos en 3 niveles físicos una aplicación que verifica si una cuenta y un password son correctos, basada en la que fue presentada en el laboratorio Separación entre

Más detalles

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA Estructura de la Información en Programación I.T.I.G., Matemáticas. Curso 2008/2009 Nombre:... Fecha: / 01 / 2009 HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA Esta hoja de ejercicios nos servirá

Más detalles

Elementos léxicos del lenguaje de programación Java

Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Palabras reservadas Identificadores Literales Operadores Delimitadores Comentarios Apéndices Operadores

Más detalles

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Introducción a Java LSUB. 30 de enero de 2013 GSYC Introducción a Java LSUB GSYC 30 de enero de 2013 (cc) 2013 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial

Más detalles

Examen Teórico Convocatoria de Junio de 2012

Examen Teórico Convocatoria de Junio de 2012 Examen Teórico Convocatoria de Junio de 2012 Nombre: DNI: Titulación: 1. Sobre el control de errores en Java: a) El siguiente método contiene un error de compilación debido al uso de excepciones. Explica

Más detalles

PROGRAMACION DISTRIBUIDA

PROGRAMACION DISTRIBUIDA PROGRAMACION DISTRIBUIDA Introducción a RMI (Remote Method Invocation) Héctor Pérez 2 Abstracción de comunicaciones en sist. distribuidos proporciona la base para la comunicación programación estructurada

Más detalles

Servicios Web. Andrés Pastorini. TRIA Tecnólogo Informático

Servicios Web. Andrés Pastorini. TRIA Tecnólogo Informático Andrés Pastorini TRIA Tecnólogo Informático Un servicio web expone un conjunto de servicios para ser consumidos a través de la red. En otras palabras, un servicio web especifica un conjunto de operación(funciones

Más detalles

Definición. Mónica E. García García Feb 07

Definición. Mónica E. García García Feb 07 Tema 11: Herencia 0 Definición Cuando inicialmente se modelan dos cosas y se tienen datos duplicados y además pudiera darse que el número de métodos también es similar así como la implementación, se requiere

Más detalles

Remote Method Invocation (RMI) de Java

Remote Method Invocation (RMI) de Java Remote Method Invocation (RMI) de Java Concurrencia y Distribución Programación Avanzada Posgrado en Ciencia e Ingeniería de la Computación, UNAM 1. Introducción El mecanismo RMI (Remote Method Invocation)

Más detalles

1. Introducción. 1.1 Construcción de una aplicación CORBA

1. Introducción. 1.1 Construcción de una aplicación CORBA 1. Introducción 1.1 Construcción de una aplicación CORBA Toda aplicación CORBA empieza con la definición de las interfaces de los objetos que pueden distribuirse. Para ello se utiliza el lenguaje IDL.

Más detalles

PROGRAMACIÓN GENÉRICA

PROGRAMACIÓN GENÉRICA PROGRAMACIÓN GENÉRICA Lenguajes de Programación - Orientación a Objetos: Progr. Genérica 1 Programación genérica Objetivo: escribir algoritmos genéricos, independientes de las clases concretas de los datos

Más detalles

Sockets en Java. Prof. Wílmer Pereira Universidad Simón Bolívar

Sockets en Java. Prof. Wílmer Pereira Universidad Simón Bolívar Sockets en Java Prof. Wílmer Pereira Universidad Simón Bolívar Arquitectura Cliente/Servidor Cliente Request Reply Servidor Cómo permitir comunicación entre objetos situados en diferentes máquinas? Sockets

Más detalles

JAVA 1. Introducción

JAVA 1. Introducción Diseño de Interfaces de Usuario JAVA. Introducción. Características Portabilidad Interpretado (bytecodes) Uso de Máquina Virtual Java (JVM) Orientado a Objetos Jerarquía de clases Extensible (packages)

Más detalles

Parte I: Programación en un lenguaje orientado a objetos

Parte I: Programación en un lenguaje orientado a objetos Parte I: Programación en un lenguaje orientado a objetos 1. Introducción a los lenguajes de programación 2. Datos y expresiones 3. Estructuras algorítmicas 4. Datos compuestos 5. Modularidad 6. Tratamiento

Más detalles

Interfaces. Amparo López Gaona. Septiembre de Amparo López Gaona () Interfaces Septiembre de / 1

Interfaces. Amparo López Gaona. Septiembre de Amparo López Gaona () Interfaces Septiembre de / 1 Interfaces Amparo López Gaona Septiembre de 2008 Amparo López Gaona () Interfaces Septiembre de 2008 1 / 1 Interfaces Las interfaces Java permiten al diseñador de clases establecer su forma definiendo

Más detalles

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

Ejercicio 4. EJB Sesión - Sistema SGA. Java EE. Ejercicio 4. EJB Sesión Sistema SGA. Curso de Java EE Java EE Ejercicio 4 EJB Sesión Sistema SGA Objetivo del Ejercicio El objetivo del ejercicio es agregar un EJB de Sesión a nuestro proyecto SGA (Sistema de Gestión de Alumnos), el cual desarrollaremos a

Más detalles

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs. Variables Una variable no es más que un nombre simbólico que identifica una dirección de memoria: Suma el contenido de la posición 3001 y la 3002 y lo almacenas en la posición 3003 vs. total = cantidad1

Más detalles

Agenda..NET C# Laboratorio #1

Agenda..NET C# Laboratorio #1 PROGRAMACIÓN III Agenda.NET C# Laboratorio #1 .NET Qué es.net? Una arquitectura tecnológica para la creación y distribución de software como servicio. Servicio en cualquier plataforma, cliente en cualquier

Más detalles

Ingeniería del Software Separación entre Presentación y Lógica del Negocio

Ingeniería del Software Separación entre Presentación y Lógica del Negocio Introducción En este laboratorio desarrollaremos una aplicación que verifica si una cuenta y un password son correctos. En dicha aplicación la presentación y la lógica del negocio se definirán en dos capas

Más detalles

Tema 1: Principios de Java

Tema 1: Principios de Java Tema 1: Principios de Java 0 Definición de java Java (del idioma indonesio: JAWA) Isla más poblada del archipiélago indonesio. Una variedad del grano de café producido en la isla de Java. Lenguaje de programación

Más detalles

CORBA desde Java. Diego Sevilla Ruiz Sistemas Distribuidos. 1. Introducción

CORBA desde Java. Diego Sevilla Ruiz Sistemas Distribuidos. 1. Introducción CORBA desde Java Diego Sevilla Ruiz Sistemas Distribuidos Índice 1. Introducción 1 2. Primeros pasos 1 2.1. Fichero IDL................................... 1 2.2. Cliente......................................

Más detalles

Práctica 5: Servidor web concurrente en Java

Práctica 5: Servidor web concurrente en Java Práctica 5: Servidor web concurrente en Java Esta práctica pretende familiarizar al alumno con la programación de servidores que emplean sockets TCP. Para ello partiremos del servidor web básico visto

Más detalles

Construcciones del Lenguaje Java

Construcciones del Lenguaje Java Construcciones del Lenguaje Java Autor: Juan Alberto López Cavallotti Versión de Java: 5 / 6 Comentarios Comentario de Línea Comentario Multilínea //Esto es un comentario. /* Esto comenta varias lineas.

Más detalles

Una aplicación sencilla con CORBA y Java

Una aplicación sencilla con CORBA y Java Una aplicación sencilla con CORBA y Java Sistemas Distribuidos: Programación con CORBA Juan Pavón Mestras Dep. Sistemas Informáticos y Programación Universidad Complutense Madrid Facultad de Informática,

Más detalles

Introducción a Java. Dr. (c) Noé Alejandro Castro Sánchez

Introducción a Java. Dr. (c) Noé Alejandro Castro Sánchez Introducción a Java Dr. (c) Noé Alejandro Castro Sánchez Programas Java Applets Pueden correr en navegadores Web Agregan funcionalidad a páginas Web Se llega a restringir su funcionalidad (e. g., no pueden:

Más detalles

'HVDUUROORGH$SOLFDFLRQHV FRQ-DYD50,

'HVDUUROORGH$SOLFDFLRQHV FRQ-DYD50, 'HVDUUROORGH$SOLFDFLRQHV FRQ-DYD50, /DERUDWRULRGH,QJHQLHUtDGHO6RIWZDUH &RQWHQLGR Antecedentes Introducción a los Sistemas Distribuidos Sockets RPC Java RMI Características Modelo de Objetos Distribuidos

Más detalles

Examen escrito de Programación 1

Examen escrito de Programación 1 Examen escrito de Programación 1 Escuela de Ingeniería y Arquitectura Departamento de Informática e Ingeniería de Sistemas 31 de agosto de 2012 Disponer sobre la mesa en lugar visible un documento de identificación

Más detalles

TEMA 7: Paso de Mensajes con RMI

TEMA 7: Paso de Mensajes con RMI CONTENIDO: TEMA 7: Paso de Mensajes con RMI Conceptos de Programación Distribuida Remote Method Invocation (RMI) en Java El Nivel de Resguardos La Responsable de que Todo Funcione: la interfaz El precompilador

Más detalles

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +. APUNTES DE JAVA Agenda Bienvenida Conociendo Java La Maquina Virtual Descargar e instalar el compilador El entorno de trabajo El paradigma de la programación orientada a objetos Qué es Java? Un lenguaje

Más detalles

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005 Dpto. de Ingeniería de Sistemas Telemáticos E.T.S.I. Telecomunicación Universidad Politécnica de Madrid FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005 Normas de examen: Con libros y apuntes Duración: 2 horas

Más detalles

LABORATORIO DE RC PRÁCTICA 2: IMPLEMENTACIÓN DE UN CLIENTE Y SERVIDOR DE

LABORATORIO DE RC PRÁCTICA 2: IMPLEMENTACIÓN DE UN CLIENTE Y SERVIDOR DE UNIVERSIDADE DA CORUÑA Departamento de Tecnoloxías da Información e as Comunicacións LABORATORIO DE RC PRÁCTICA 1: IMPLEMENTACIÓN DE UN CLIENTE Y SERVIDOR DE ECO UDP PRÁCTICA 2: IMPLEMENTACIÓN DE UN CLIENTE

Más detalles

CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE

CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE 1 Estructura de Datos 1. Logica de Programación 2. Uso de Algoritmos usando Lenguaje Java 3. Ingreso de datos 4. Sentencias de Control 1.

Más detalles

Sistemas de Información

Sistemas de Información Sistemas de Información Tecnologías de objetos distribuidos: RMI Agradecimientos: Marisol García Valls, Jesús Villamor Lugo, Simon Pickin de IT/UCIIIM [email protected] RMI (Remote Method Invocation) Concepto

Más detalles

Métodos CON valor de retorno

Métodos CON valor de retorno Métodos Estáticos C# Fundamentos de Programación. Objetivos del tema: Qué es un método? Qué métodos conoces? Métodos que NO devuelven valor. Métodos que SI devuelven un valor. Paso de parámetros. Variables

Más detalles

VII.1: RMI: Remote Method Invocation

VII.1: RMI: Remote Method Invocation PROGRAMACION CONCURRENTE Y DISTRIBUIDA VII.1: RMI: Remote Method Invocation Posibilidades que ofrece Java para la comunicación en red: Socket,RMI y URL. 1 Sistemas distribuidos basados en middleware Client

Más detalles

Comunicación entre procesos: sockets udp. Jorge Iván Meza Martínez

Comunicación entre procesos: sockets udp. Jorge Iván Meza Martínez Comunicación entre procesos: sockets udp Jorge Iván Meza Martínez [email protected] Especialización en Gestión de Redes de Datos Universidad Nacional de Colombia Sede Manizales 1/31 Contenidos Conceptos

Más detalles

Ejecución de hebras. En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura).

Ejecución de hebras. En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura). Ejecución de hebras En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura). Hebras vs. Procesos Los cambios de contexto son más costosos en

Más detalles

Manual del Protocolo XML-RPC de Mensajería Negocios

Manual del Protocolo XML-RPC de Mensajería Negocios Manual del Protocolo XML-RPC de Mensajería Negocios Índice de contenidos 1 INTRODUCCIÓN... 3 2 FUNCIONALIDADES DEL API DE COMUNICACIÓN XML-RPC... 4 2.1 Envío Libre... 4 2.2 Envío a Grupo de Contactos...

Más detalles

INTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C)

INTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C) APRENDERAPROGRAMAR.COM INTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C) Sección: Cursos Categoría: Lenguaje de programación Java nivel

Más detalles

Programación concurrente en Java

Programación concurrente en Java Diseño Y Aplicaciones de Sistemas Distribuidos Programación concurrente en Java Joan Vila DISCA / UPV Departament d Informàtica de Sistemes i Computadors Universitat Politècnica de València Threads en

Más detalles

Arquitecturas cliente/servidor

Arquitecturas cliente/servidor Arquitecturas cliente/servidor Creación de Sockets Cliente Servidor 1 Creación de Sockets Cliente/Servidor Sockets en TCP Concepto de Hilos Definición de DAEMON Sockets en UDP 2 THREADS 3 Qué es un thread?

Más detalles