PROGRAMACION DISTRIBUIDA



Documentos relacionados
1. Visión general de RMI

RMI. Aplicaciones Distribuidas

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

Modelo de Objetos Distribuidos

Java RMI. Sistemas distribuidos

VII.1: RMI: Remote Method Invocation

Java RMI. Sistemas Distribuidos Rodrigo Santamaría

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

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

JAVA RMI (REMOTE METHOD INVOCATION)

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

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

PROGRAMACION DISTRIBUIDA

Invocación remota de métodos. Jorge Iván Meza Martínez

RMI [Remote Method Invocation]

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

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

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

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

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

PROGRAMACION DISTRIBUIDA MobileTracker: Ejemplo de implementación con RMI

Objetos Distribuidos

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

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

INTRODUCCION A LA PROGRAMACION EN JAVA

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

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

Object Oriented Middleware: Java RMI

El servicio de echo en Java-RMI

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

PROGRAMACION DISTRIBUIDA

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

Modulo 11. Clases y Objetos en Java

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

Examen Teórico. Convocatoria de Febrero de 2015

CAPITULO 3 ARQUITECTURA DE COMPONENTES GIS EN INTERNET

Tema 3. Objetos distribuidos

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

TEMA 1. Introducción a las arquitecturas distribuidas

Una introducción a Java RMI

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

SISTEMAS DISTRIBUIDOS Profesor: José Luis Montoya Restrepo

Tema 7: Polimorfismo. Índice

En este capitulo se estudiarán los conceptos relacionados a métodos, como lo son sobrecarga, métodos estáticos.

Tema 3. Programación orientada a objetos en Java (Parte 1)

Procesamiento distribuido en Java

SISTEMAS DISTRIBUIDOS

Computación distribuida

Java RMI 2ª PARTE. Factory Pattern para RMI

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

INSTITUTO TECNOLÓGICO SUPERIOR DE SAN MARTÍN TEXMELUCAN INGENIERÍA EN SISTEMAS COMPUTACIONALES. Sistemas Distribuidos

Tema 4: INVOCACIÓN REMOTA

Java en 3 horas. Ampliación de Sistemas Operativos. Rodrigo Santamaría

RMI Remote Method Invocation

TEMA 7: Paso de Mensajes con RMI

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

Tema 4 Genericidad en Java. Programación Orientada a Objetos Curso 2013/2014

El servicio de echo con sockets

Cliente/Servidor en Java

Arquitecturas cliente/servidor

PROGRAMACION DISTRIBUIDA

LabVIEW en la Enseñanza del Control: Laboratorios Virtuales y Remotos de Automática

Examen parcial Convocatoria de junio de 2005 FUNDAMENTOS DE LA PROGRAMACIÓN

Tema%4.( Sistemas(distribuidos( Middleware.(Modelos(de(interacción.( ICE( (Internet(Communica8ons(Engine(

Tema 4. Excepciones en Java

Examen Teórico. Convocatoria de Julio de 2015

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }

Remote Method Invocation (RMI) de Java

Modelo Cliente / Servidor. Gerardo Grinman 5D

Excepciones. Excepciones

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

JAVA 1. Introducción

Una Clase: define un grupo de objetos que tienen propiedades similares y se comportan de manera similar.

TEMA I PROGRAMACIÓN ORIENTADA A OBJETOS PROGRAMACIÓN N ORIENTADA A OBJETOS OBJETOS (I) OBJETOS (II)

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

Desarrollo de Aplicaciones Distribuidas. Sockets. Daniel Avellaneda

Transcripción:

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 utilizando un lenguaje procedimental Sockets aplicaciones basadas en el paradigma OO Remote Procedure Call (RPC) Invocación remota de objetos Nivel de Abstracción RMI (Remote Method Invocation) es la solución Java para la comunicación de objetos distribuidos

3 Necesidad de RMI Las clases Socket y DatagramSocket permiten implementar directamente aplicaciones distribuidas del tipo cliente/servidor bajo nivel de abstracción (uso a nivel de bytes) Clases nuevas y diferentes para clientes y servidores alta complejidad en el mantenimiento no está integrado dentro del paradigma OO de Java La respuesta de la comunidad Java fue RMI RMI ha sido diseñado para hacer que la interacción entre objetos instanciados en dos particiones distribuidas de una aplicación Java que se ejecutan en diferentes JVM, se realice de forma semejante a como se hace entre objetos de una misma partición 4 RMI: Visión general Representa un mecanismo de invocación de objetos remotos como si fueran locales modelo de objetos distribuidos JVM (cliente) Objeto cliente respuesta invocación Objeto remoto JVM (servidor) Establece una metodología extensión de clases, definición de interfaces... uso de herramientas adicionales (servicios de localización, gestores de seguridad, etc)

5 Objetivos de RMI Proporcionar un middleware para el desarrollo de aplicaciones distribuida manteniendo el estilo Java : Integra el modelo de objetos distribuidos en el lenguaje Java de una forma natural y manteniendo la semántica que le es propia. Capacita para escribir aplicaciones distribuidas de una forma simple. Mantiene y preserva en aplicaciones distribuidas el tipado fuerte propio de Java. Proporciona diferentes modelos de persistencia de objetos distribuidos (objetos vivos, objetos persistentes, objetos con activación débil) para conseguir la escalabilidad de las aplicaciones. Introduce los niveles de seguridad necesarios para garantizar la integridad de las aplicaciones distribuidas. 6 Ventajas e inconvenientes de RMI Ventaja: Permite distribuir una aplicación de forma muy transparente, es decir, sin que el programador tenga que modificar apenas el código. Inconvenientes: Sólo sirve para establecer aplicaciones distribuidas en las que todas las particiones de la aplicación están codificadas en Java. Oculta los aspectos de la distribución, por lo que si una aplicación distribuida se diseña como si fuera a ser ejecutada en una única JVM puede hacerse muy ineficiente. La interacción entre objetos remotos requiere internamente procesos de serialización de objetos, transmisión de mensajes, accesos a los gestores de seguridad, etc.

7 Aspectos que resuelve RMI (1/2) Qué protocolos se utilizan para transferir la información al objeto remoto? Y la información de retorno al cliente? Cómo se transfieren los argumentos y los valores de retorno? Cómo se conoce la ubicación de los objetos distribuidos? Cómo garantizar la integridad de las aplicaciones distribuidas? 8 RMI automatiza su implementación Aspectos que resuelve RMI (2/2) En el código para formular una aplicación distribuida se pueden identificas cinco aspectos diferentes: 1. Código que implementa la funcionalidad de la aplicación. Es lo que llamamos código de negocio. 2. Código de la interfaz del cliente. Es lo que hemos hecho con el «clientproxy». 3. La serialización (marshalling) y reconstrucción (unmarshalling) de los datos que se intercambian. Es lo que hemos implementando utilizando Streams. 4. Mecanismos para la invocación por delegación de los métodos del servidor. Corresponde a lo que hemos hecho con el código del servant. 5. Módulos que lanzan y configuran las diferentes particiones de la aplicación. Es el código que hemos incluido en las clases principales de las particiones. 6. Y otro tipo de código cuyo propósito es hace aplicaciones más robustas y escalables. Cosas como client-side caching, replicación de los servidores, servicios de localización de objetos, balanceo de carga, etc.

9 Componentes de aplicaciones distribuidas RMI Clientes: Conducen el flujo de la aplicación. Localizan e invocan métodos ofertados como remotos por los servidores. Servidores: Conjunto de objetos que ofrecen interfaces remotas públicas cuyos métodos pueden ser invocados clientes de cualquier procesador de la plataforma. Registro: Servicio estático que se establece en cada nudo, en el que se registran los servidores con un nombre, y donde los clientes los localizan. Partición local Cliente (3) Invoca (RMI) Interfaz remota Servidor Partición remota Red (2) Localiza (RMI) Registro (1) Registra (RMI) Partición infraestructura 10 Arquitectura de RMI Los stubs del cliente (proxy) y skeletons del servidor representan la interfaz entre la aplicación (código de negocio) y el resto del sistema RMI proporcionan transparencia en la distribución creados automáticamente El RMI reference layer se encarga de gestionar las invocaciones remotas (lado cliente y servidor) El RMI transport layer es responsable de gestionar todos los detalles de bajo nivel de la comunicación Client Server Stub Skeleton RMI reference layer RMI transport layer TCP/IP

11 Advertencia! javac Client Stub Skeleton Server rmic javac Versión Java 1.5 o superior Client Stub RMI Server Skeleton 12 Arquitectura de RMI: Stubs y skeletons Invocación de un método remoto del servidor a través del stub Generación de un mensaje que contiene: la referencia al método y un stream de bytes Creación dinámica de un socket y conexión con el skeleton Recepción del mensaje: se des-serializa y se delega en un thread la invocación del método Ejecución Generación del mensaje con la respuesta (stream) y envío Recepción de la respuesta: se decodifica y se retorna el resultado al cliente

13 Invocaciones distribuidas y locales (1/2) Semejanzas: Un objeto remoto puede ser pasado como parámetro de un método, y devuelto como resultado de los métodos. El tipo de una referencia a un objeto remoto puede ser transformado por operaciones de casting, siempre que sean compatibles con sus relaciones de herencias. A las referencias remotas se les puede aplicar el método instanceof() para identificar dinámicamente las interfaces que soporta. 14 Invocaciones distribuidas y locales (2/2) Diferencias: Los clientes interaccionan con los objetos remotos a través de las interfaces remotas, no a través de interfaces estándares. Los objetos que se pasan como parámetros de métodos remotos se pasan por referencia y nunca por valor. Por el contrario, los objetos que se pasan como parámetros de métodos que no son remotos se pasan por copia (valor) y nunca por referencia. La semántica de los métodos heredados de Object es especializada para los objetos remotos, que son extensiones de RemoteObject. Las invocaciones de objetos remotos pueden lanzar excepciones adicionales que son propias de los mecanismos de comunicación.

15 Despliegue y localización de objetos remotos (1/2) Se busca proporcionar independencia entre el diseño de la aplicación y la formulación del despliegue RMI utiliza la estrategia de un servidor de nombres llamado registry como base del despliegue: los servidores y clientes conocen la dirección y el puerto del registro los servidores se registran en él a través de un identificador, el cuál queda asociado a una referencia remota los clientes que quieren comunicarse con un servidor deben obtener su referencia remota a través del registry. Para ello, utilizan el identificador del servidor con el que quieren contactar 16 Despliegue y localización de objetos remotos (2/2) Ventajas en el uso del registry (servicio de nombres) desacoplo de la ubicación del servidor El registro se puede ubicar en una dirección fija y conocida del sistema distribuido, mientras que el servidor puede cambiar su ubicación sin afectar a los clientes el registro es una aplicación sencilla, robusta y estable. Además, su mantenimiento es menor. No es la única estrategia de despliegue y localización Por ejemplo, el estándar de distribución DDS utilizará la estrategia Anunciación/Descubrimiento.

17 Proceso de invocación remota en RMI El servidor debe registrarse (bind) en el registry bajo un nombre El cliente localiza (lookup) la referencia de servidor en el registry por su nombre Remote Machine RMI Server bind Registry El cliente invoca localmente el stub skeleton El stub transfiere como un mensaje la invocación al skeleton return call lookup El skeleton invoca localmente el método del servidor stub El skeleton transfiere al stub como mensaje los resultados obtenidos de la invocación El stub finaliza la invocación del cliente retornándole los resultados RMI Client Local Machine 18 Interfaces y clases raíces definidas en RMI <<interface>> Remote <<class>> Object <<exceptionclass>> IOException <<abstract class>> RemoteObject <<exceptionclass>> RemoteException <<abstract class>> RemoteSever <<abstract class>> Activatable <<class>> UnicastRemoteObject

19 Pasos para desarrollar una aplicación distribuida RMI Se define la interfaz remota Se desarrolla el servidor que implementa la interfaz remota Se desarrolla el cliente Se ejecuta el servidor en el procesador remoto Se ejecuta el RMI Registry en el procesador remoto Se compilan los ficheros Java fuentes Se ejecuta el cliente en el procesador local 20 Ejemplo HolaMundo (Diseño) Partición HelloClient ClienteHola elservidor <<Remote>> Hola + main(string registryhost) String di_hola() Proyecto Java RMI rmiregistry + bind() + lookup() ServidorHola + String di_hola() Partición HelloServer

21 Ejemplo HolaMundo (Implementación) Procesador cliente IP:?? port::?? Procesador server IP:?? port::?? cliente:clientehola Hola server:servidorhola reg:registry Procesador Infraestructura IP: 123:221.15.1 (conocido) port::1099 22 HolaMundo (1/7): Interfaz remota (fichero Hola.java) import java.rmi.remote; import java.rmi.remoteexception; public interface Hola extends Remote { String di_hola() throws RemoteException; } La interface que declara los métodos de un servidor que pueden ser invocados remotamente debe extender a la interface Remote Todos los métodos que pueden ser invocados remotamente deben declarar la posibilidad de lanzar una RemoteException

23 HolaMundo (2/7): Servidor remoto (fichero ServidorHola.java) import java.rmi.remoteexception; import java.rmi.registry.*; public class ServidorHola implements Hola { public ServidorHola() {} public String di_hola() { return "Hola, Mundo!"; } // Constructor // Implementación del método remoto } public static void main(string args[]) { try { ServidorHola server = new ServidorHola(); //Instancia del servidor // El servidor se registra en el RMI como un objeto remoto y se obtiene su referencia remota Hola ServidorHolaRef = (Hola) // El servidor se registra en el registry con un nombre ( Servidor_Hola ) Registry registry = System.err.println("ServidorHola instalado"); // Servidor instalado con éxito } catch (Exception e) { System.err.println("Server exception: " + e.tostring()) } } 24 HolaMundo (3/7): Cliente (fichero ClienteHola.java) import java.rmi.registry.*; public class ClienteHola { private ClienteHola() {} // Constructor public static void main(string[] args) { // El primer parámetro es el host de Registry String elhost=null; // Si no hay parámetro, usa el local if (args.length >= 1) elhost= args[0]; try { // Se localiza el servidor en el registro por su nombre Servidor_Hola Registry registry = Hola elservidor = (Hola) String respuesta = elservidor.di_hola(); // Se invoca el servicio remoto System.out.println("Respuesta: " + respuesta); } catch (Exception e) { System.err.println("Excepción del cliente: " + e.tostring());} } }

25 HolaMundo (4/7): Compilación de los ficheros Java Se compila de la forma habitual (con javac) Ficheros del servidor ServidorHola.java Hola.java Ficheros del cliente ClienteHola.java Hola.java 26 HolaMundo (5/7): Instanciación del RMI Registry Se lanza la ejecución del rmiregistry como un proceso en el procesador (por ejemplo, el del servidor) Hay que ejecutar independientemente la aplicación rmiregistry.exe que existe en el jdk de java. Windows Eclipse

27 HolaMundo (6/7): Ejecución del servidor El servidor se ejecuta en el procesador remoto Hay que establecer propiedades de JVM Hay que establecer una política de seguridad adecuada 28 HolaMundo (7/7): Ejecución del Cliente El cliente se ejecuta en el procesador local