RMI. Aplicaciones Distribuidas

Documentos relacionados
Modelo de Objetos Distribuidos

Object Oriented Middleware: Java RMI

RMI [Remote Method Invocation]

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

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

Java RMI. Sistemas distribuidos

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

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

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

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

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

1. Visión general de RMI

RMI Remote Method Invocation

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

Java RMI. Sistemas Distribuidos Rodrigo Santamaría

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

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

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

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

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

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

Objetos Distribuidos

JAVA RMI (REMOTE METHOD INVOCATION)

El servicio de echo en Java-RMI

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

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

CAPITULO 3 ARQUITECTURA DE COMPONENTES GIS EN INTERNET

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

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

PROGRAMACION DISTRIBUIDA

Java RMI 2ª PARTE. Factory Pattern para 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

Tema 3. Objetos distribuidos

PROGRAMACION DISTRIBUIDA MobileTracker: Ejemplo de implementación con RMI

PROGRAMACION DISTRIBUIDA

Henry Tenorio Guzmán A76456

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

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

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

Remote Method Invocation (RMI) de Java

Una aplicación sencilla con CORBA y Java

PROGRAMACION DISTRIBUIDA

Sistemas Distribuidos. Llamadas a Procedimientos Remotos

POO: Clases y objetos

PROCESAMIENTO DISTRIBUIDO

SISTEMAS DISTRIBUIDOS

SISTEMAS DISTRIBUIDOS Profesor: José Luis Montoya Restrepo

A3F. Polimorfismo. Carlos Fontela

Práctica sobre compartición de instancias remotas.

Tema 1: Principios de Java

Tema 1 Introducción al paradigma de programación orientado a objetos

Introducción a Web Services

Tema 6 Patrones de Diseño. Programación Orientada a Objetos Curso 2010/2011

Tema 4: INVOCACIÓN REMOTA

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

Procesamiento distribuido en Java

Unidad Didáctica 1. Introducción a la Programación Orientada a Objetos (POO) Conceptos de clase, objeto e interfaz. Atributos y métodos

Patrón Façade Patrón Template Method Conclusiones

Examen Teórico. Convocatoria de Febrero de 2015

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

TEMA 1. Introducción a las arquitecturas distribuidas

Examen Teórico. Convocatoria de Febrero de 2018

TEMA 7: Paso de Mensajes con RMI

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

BROKER Publicador Suscriptor. Jonnathan Corredor Lorena Arrieta Alejandro Mosquera

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

Patrones de Diseño. Patrón estructural Composite. Técnicas de Programación - Curso 2007/08

Introducción a la programación

18. Interfaces Declaración de una interfaz

2. Indica cuál de las siguientes afirmaciones es cierta:

APLICACIONES DE INTERNET: SOAP

CONCEPTO DE ARQUITECTURA CLIENTE / SERVIDOR.

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

Transcripción:

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 y despliegue. Limitaciones RMI. 2

Objetos Distribuidos Motivación: La escalabilidad se consigue con la distribución. La distribución se consigue con la fragmentación en módulos. En una aplicación OO, los módulos están definidos por clases. Objetivo: Distribuir los objetos de una aplicación de forma transparente. Solución: Tecnologías de Objetos Distribuidos 3

Objetos Distribuidos Desafíos: Transparencia para el cliente del objeto distribuido. Transparencia para el programador del objeto. Extender el concepto de referencia a un entorno distribuido. Definir un protocolo de comunicación.... Experiencia previa: Llamadas a procedimientos remotos: RPC. Plataforma más sencilla: è RMI Ejecución en un entorno controlado (JVM) e interacción entre objetos del mismo lenguaje. 4

RMI Tecnología para la programación con Objetos Distribuidos en Java. Motivación: Que objetos residentes en máquinas virtuales distintas puedan colaborar. Solución: No intrusiva: no se modifica el lenguaje Java. Basada en interfaces, en el patrón Proxy y Broker. 5

Interface Remota Un objeto distribuido es accesible a través de una Interface Remota. Métodos que pueden ser llamados de forma distribuida. Es una interface Java con las siguientes restricciones: Debe extender la interface marca java.rmi.remote. Todas las operaciones deben lanzar al menos la excepción java.rmi.remoteexception import java.rmi.*;!! public interface Contador extends Remote {!!!!public void inc() throws RemoteException;!!!!public void dec() throws RemoteException;!!!!publicvoids e t ( intvalor)throwsr e m o t e E x c e p t i o n ;!!!public int get() throws RemoteException;! } 6

Clase Implementación Clase que implementa la interface remota. Ninguna restricción de implementación.! public class ContadorImpl implements Contador {!!!!private int valor = 0;!!!!public void inc () { valor ++; }!!!!public void dec () { valor --; }!!!!public void set (int valor) { this.valor = valor; }!!!!public int get() { return valor; }! }! 7

Activación de un Objeto Distribuido JVM: Actúa de registro de los objetos distribuidos que se ejecutan en la máquina virtual. Colabora con otras JVM para la comunicación Identifica las llamadas a los objetos.... è Patrón Broker. Para que un objeto distribuido pueda recibir llamadas remotas es necesario activarlo: UnicastRemoteObject.exportObject(obj); 8

Referencias Remotas Una referencia remota es una referencia Java que permite acceder al objeto distribuido: Una referencia siempre apunta a un objeto en la JVM. Una referencia remota apunta a un objeto proxy. Proxy (Stub): Clase que implementa la interface remota. Implementa los métodos delegando en el objeto distribuido. è Transparencia para el cliente. Delegación: protocolo JRMP. El proxy codifica los parámetros de la llamada. Indica a la JVM que quiere enviar un mensaje a un objeto distribuido (conoce su dirección de transporte e identidad). Espera la respuesta y devuelve el valor de la llamada. 9

Referencias Remotas Recepción de peticiones: La JVM destino recibe una petición de acceso a un objeto distribuido. Identifica el objeto y delega el procesamiento en su objeto Skeleton La JVM destino devuelve la respuesta a la JVM peticionaria. 10

Referencias Remotas Compilador RMI: Genera automáticamente la clase stub y skeleton asociada a la implementación de un objeto remoto. > rmic ContadorImpl Trabaja con la clase compilada (.class). Modos de obtener la referencia remota (stub): Utilizar un registro conocido por todos los procesos: Registro RMI El servidor almacena la referencia en el registro con un nombre descriptivo. El cliente recupera la referencia utilizando el nombre. Otras alternativas: Valor de retorno o parámetro de una llamada remota. 11

Registro RMI Aplicación Java que actúa como registro de referencias. Utilizado para registrar los objetos iniciales de una aplicación. Accedemos a un registro utilizando la clase: java.rmi.registry.naming Métodos de clase para: Consultar: Contador c = (Contador) Naming.lookup( contador ); Registrar: Naming.rebind( contador, cimpl); Listar registro: String[] referencias = Naming.list( //localhost ); Lanzar el registro: > rmiregistry Restricciones: Sólo pueden modificar el registro los procesos de la misma máquina. El registro no debe poder acceder a los.class de los objetos remotos. URL RMI: [rmi:][//host/]nombre à rmi://dis.um.es/contador, //dis.um.es/contador 12

Paso de Parámetros Distinta semántica para el paso de parámetros y valores de retorno: Los tipos primitivos se pasan por valor. La referencia a un objeto distribuido se pasa por referencia: Se envía el stub del objeto. Los objetos normales serializables se pasan por valor: Se serializa el objeto y se envía una copia No hay semántica de réplica. El resto de objetos no serializables no pueden pasarse como parámetros. 13

Descarga Dinámica de Código Problema: El cliente accede al OD utilizando una copia del stub (referencia) que depende de la clase implementación. è Las clases stub no conviene distribuirlas. Solución: Descargar las clases stub dinámicamente: Cuando va instanciarse el proxy de la referencia remota. Consecuencias: Hay que controlar el código descargado è instalar un SecurityManager Disponemos de RMISecurityManager. Los servidores de objetos deben dejar accesibles sus clases stub utilizando un servidor web o FTP (URL). 14

Visión General Objeto Implementación Registro ejemplo Registra el objeto Obtiene la referencia (stub) Servidor Cliente skeleton JVM Descarga la clase stub stub JVM RMI 15

Proceso de Desarrollo 1. Definir la interface remota 2. Programar la clase implementación 3. Compilar la clase implementación 4. Ejecutar del compilador de stubs con la clase compilada: rmic 5. Arrancar el registro RMI en el servidor: rmiregistry 6. Ejecutar la aplicación servidor. 7. Ejecutar la aplicación cliente. 16

Despliegue Servidor: Interface remota. Clase implementación. Programa servidor. Clase skeleton. Clase stub (accesible a través de URL) Cliente: Interface remoto. Programa cliente. 17

Limitaciones RMI antes de Java 2 Las referencias no son persistentes: Si cae el servidor todas las referencias distribuidas dejan de ser válidas. Todos los objetos remotos deben estar instanciados en el servidor: Disminuye el rendimiento cuando se mantienen muchos objetos. La comunicación RMI no es segura. Estos problemas se han solucionado en Java 2... è Pero, es preferible utilizar CORBA que el modelo avanzado RMI. 18