Modelo de Objetos Distribuidos



Documentos relacionados
1. Visión general de RMI

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

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

RMI [Remote Method Invocation]

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

Remote Method Invocation (RMI) de Java

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

JAVA RMI (REMOTE METHOD INVOCATION)

Java RMI. Sistemas Distribuidos Rodrigo Santamaría

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

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

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

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

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

CAPITULO 3 ARQUITECTURA DE COMPONENTES GIS EN INTERNET

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

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

Práctica sobre compartición de instancias remotas.

SISTEMAS DISTRIBUIDOS Profesor: José Luis Montoya Restrepo

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

Práctica 5: Callbacks RMI.

Capítulo 5. Cliente-Servidor.

PROGRAMACION DISTRIBUIDA MobileTracker: Ejemplo de implementación con RMI

Windows Server 2012: Infraestructura de Escritorio Virtual

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

8. Sentencia return y métodos

Manual del Protocolo XML-RPC de Mensajería Negocios

Java RMI. Sistemas distribuidos

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

Lab 01: Programación de Sockets en TCP

CREAR UN SERVICIO WEB BASICO CON JAVA AXIS2. Víctor J. Sosa

INTRODUCCION. Tema: Protocolo de la Capa de aplicación. FTP HTTP. Autor: Julio Cesar Morejon Rios

A continuación resolveremos parte de estas dudas, las no resueltas las trataremos adelante

Introducción... 1 Qué es Java?... 1 Compilando a Bytecode... 1 Usando jgrasp Para Hacer el Trabajo Sucio... 5 El Entorno de jgrasp...

La utilización de las diferentes aplicaciones o servicios de Internet se lleva a cabo respondiendo al llamado modelo cliente-servidor.

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

PRACTICA CAPITULO 2 MODULO 1 PROTOCOLOS Y LA FUNCIONALIDAD DE LA CAPA DE APLICACIÓN

PRACTICA CAPITULO 2 MODULO 1 PROTOCOLOS Y LA FUNCIONALIDAD DE LA CAPA DE APLICACIÓN

I. Introducción a la programación orientada a objetos y al lenguaje JAVA Colegio Reuven Feuerstein Javier Navarro

CAPÍTULO 3 Servidor de Modelo de Usuario

Programación Orientada a Objetos con Java

Práctica GESTIÓN Y UTILIZACIÓN DE REDES LOCALES. Curso 2001/2002. TCP/IP: protocolo TCP

Práctica 5: Common Object Request Broker Architecture CORBA

Universidad ORT - Arquitectura de Software. Requisitos

LiLa Portal Guía para profesores

Programación Orientada a Objetos. Java: Excepciones

Estructuras de Sistemas Operativos

Servidor FTP en Ubuntu Juan Antonio Fañas

PROGRAMACION DISTRIBUIDA

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso Cuatrimestre de otoño. 17 de Enero de 2011

Java: Clases Abstractas e Interfaces

Sensor de Temperatura utilizando el Starter Kit Javelin Stamp. Realizado por: Bertha Palomeque A. Rodrigo Barzola J.

Entre los más conocidos editores con interfaz de desarrollo tenemos:

Proyecto 3 Programación de aplicaciones Cliente/Servidor

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

Generador de Proxy remoto JavaScript.

UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos

Curso de Java POO: Programación orientada a objetos

Capítulo V. Implementación

SISTEMAS DISTRIBUIDOS

Pruebas de unidad con JUnit

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

Introducción a las Redes de Computadoras. Obligatorio

Módulo 2. Inicio con Java

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

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

ENVÍO DE POR MEDIO DE SMTP

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

RMI. Aplicaciones Distribuidas

MICQ. Trabajo Práctico Final Seminario de Ingeniería en Informática I Facultad de Ingeniería, UBA. Junio Cátedra: Pablo Cosso

Guía de Instalación. Instalación rápida de la Consola Maestra de VEO y el Agente Remoto para los Usuarios

Tema 1. Introducción a JAVA

Capas del Modelo ISO/OSI

Enterprise JavaBeans

Benemérita Universidad Autónoma del Estado de Puebla

Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA

Direcciones IP IMPLANTACIÓN DE SISTEMAS OPERATIVOS 1º ASIR. En redes IPv4.

PORTAL DE INTEGRACIÓN DE BANCOS DE INFORMACIÓN DISPERSOS A TRAVÉS DE WEB SERVICES Autor: Ing. Walther Antonioli Ravetto

Capítulo 5. Análisis del software del simulador del sistema de seguridad

Ingº CIP Fabian Guerrero Medina Master Web Developer-MWD

Java Inicial (20 horas)

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

Programación Orientada a Objetos. Java: Excepciones

INFRAESTRUCTURA Y COMUNICACIONES DGA

SISTEMAS DE NOMBRES DE DOMINIO

SISTEMAS DE INFORMACIÓN II TEORÍA

11. Algunas clases estándar de Java (II)

TciSatSingleW32 Versión 3.1

Configuración de Apache

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

SERVICE ORIENTED ARCHITECTURE (SOA) CONTENIDO

Guía de uso del Cloud Datacenter de acens

FUNDAMENTOS DE PROGRAMACION CON C#

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.

Transcripción:

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 de Objetos Distribuidos Unobjetodeestetipo esdescritoporuna omásinterfaces remotas, que son interfaces java que declaran los métodos de un objeto remoto.

Modelo de Objetos Distribuidos La invocación de métodos remotos, Remote Method invocation (RMI), es la acción de invocar un método de una interfaz remota en un objeto remoto.

Objetos Distribuidos Separación de programas en objetos. Los sistemas de objetos distribuidos pueden adoptar la arquitectura cliente/servidor. Producción de accesos conflictivos por la concurrencia. Ventaja de sólo utilizar métodos. Diferentes formatos en diferentes lugares.

Modelo de objetos distribuidos

Referencias a Objetos Remotos El objeto remoto donde se recibe la invocación del método remoto se especifica mediante una referencia a un objeto remoto. Las referencias a objetos remotos pueden pasarse como argumentos y resultados de las invocaciones a métodos remotos.

Interfaces Remotas

EL PROPOSITO DE RMI Crear objetos en distintas JVM y actuar como objetos locales. La JVM que invoca objetos remotos es conocida normalmente como cliente La JVM que contiene el objeto remoto se le conoce como servidor

Terminos Importantes El termino servidor no hace referencia a un servidor físico o a una aplicación, sino a un único objeto remoto que posee métodos que pueden ser invocados remotamente. El termino cliente no hace referencia a una máquina cliente, sino que en realidad se refiere al objeto invocando un método remoto en un objeto remoto, el mismo puede ser tanto un cliente como un servidor.

Terminos Importantes Obtener una referencia a un objeto remoto es ligeramente diferente a obtenerla para objetos locales. A un objeto remoto siempre se accede a través de su interfaz remota. El cliente invoca métodos en el objeto sólo después de asignar la referencia a la interfaz remota.

Arquitectura de implementacion del RMI La implementación RMI es construida esencialmente a partir de tres capas de abstracción: Capa de Stubs Capa de referencia remota Capa de transporte

Arquitectura de RMI La implementación de la capa de transporte puede ser reemplazada por un distribuidor de protocolo UDP en lugar de TCP, sin afectar a las capas superiores Esta arquitectura en capas proporciona una buena flexibilidad de implementación sin afectar a la arquitectura de aplicación, cada una de las capas pueden ser reforzada o reemplazada sin afectar al resto del sistema.

Arquitectura del RMI Modulo de comunicación: implementan la semántica de invocación. Modulo de referencia remota: es responsable de traducir las referencias entre objetos locales y remotos. La tabla incluye: Objeto remoto B registrado en la tabla del servidor y el proxy local estará registrado en el cliente. Proxy: Hace que la invocación al método remoto sea transparente. Hay un proxy para cada objeto remoto.

Arquitectura del RMI Capa de Stub y Skeleton : Esta capa intercepta las llamadas de métodos realizadas por el cliente a la referencia remota de la interfaz u redirige estas llamadas a un objeto remoto. Es conveniente recordar que los stubs son específicos del lado del cliente y que los skeletons se encuentran en el lado del servidor.

Arquitectura del RMI Capa de Referencia Remota : Esta capa maneja los detalles relacionados con la interpretación y la gestión de referencias realizadas por clientes a los objetos remotos, conecta clientes con objetos remotos que están siendo ejecutados y exportados en un servidor por vinculo de conexión uno a uno.

Arquitectura del RMI Capa de transporte: Esta capa esta basada en conexiones TCP/IP entre maquinas de una red, proporcionando conectividad básica.

REALIZAR UN EJEMPLO Rmi : Envío de mensajes Rmi1: calculadora (operaciones básicas) Rmi2: petición de hora Rmi3: incrementos (+1)

REALIZAR UN EJEMPLO Crear un proyecto: Ir a RMI (envío mensajes) rmi3 (contador +1), rmi 1(hora).

Rutear la direccion

Generar el Stub

Verificando el Stub

Ejecutar el servidor

El servidor

Ejecutando el Cliente

Cliente

Cliente-Servidor

Cliente-Servidor

Qué es RMI? Uno de los principales objetivos de RMI (Remote Method Invocation) es permitir, a los programadores, el desarrollo de aplicaciones distribuidas con Java de una forma sencilla, como si se estuviera implementando una aplicación no distribuida. Para lograr esto, se ha reproducido el modelo de trabajo con clases y objetos para una sola máquina virtual en un nuevo modelo para varias máquinas virtuales.

Qué es RMI? A través de RMI se pueden invocar métodos de objetos remotos, que se encuentran ejecutándose en otras máquinas virtuales, como si estuvieran en forma local.

Características de RMI Es fácil de utilizar y muy flexible, permitiendo la construcción de aplicaciones cliente/servidor de una forma rápida y sencilla. Las aplicaciones basadas en RMI pueden ser ejecutadas sobre cualquier máquina virtual. RMI permite distribuir comportamiento sobre una red. Incluye mecanismos de seguridad a través del security manager. Contiene un garbagecollector para liberar la memoria de los objetos remotos.

Pasos para desarrollar una aplicación RMI 1. Definir una interfaz con los servicios que ofrece el objeto remoto. Se define una interfaz para especificar la forma en que se va a llevar a cabo la comunicación entre componentes. La interfaz definirá los métodos que se podrán invocar de forma remota. 2. Construir una clase que implementa la interfaz definida en el paso 1. 3. Escribir la aplicación servidora que se encargará de instanciar y registrar los objetos que se invocarán de forma remota.

Pasos para desarrollar una aplicación RMI 4. Construir el cliente que debe localizar y utilizar el objeto remoto. 5. Compilar las clases con el compilador de java (javac). 6. Ejecutar el compilador de RMI (rmic) para generar las clases de soporte (stubs y skeletons).

RMI paso a paso. 1.-Definición de la interfaz para comunicarse con el objeto remoto. En este primer paso se define la interfaz que describirá los métodos del objeto remoto. Para que ésta sea una interfaz remota, tiene que extender la interfaz java.rmi.remote y todos los métodos que la componen deben lanzar excepciones de tipo java.rmi.remoteexception. // Interfaz remota import java.rmi.*; public interface Eco extends Remote { public String mensaje(string nombre) throws RemoteException; }

RMI paso a paso. 2.-Implementación de la interfaz remota. En este segundo paso se implementa la interfaz definida anteriormente a través de una clase que será de la cuál se instancien realmente los objetos remotos. Esta clase debe tener como requisitos, además de implementar la interfaz remota, heredar de la clase java.rmi.server.unicastremoteobject.

RMI paso a paso. 2.-Implementación de la interfaz remota. También se debe proporcionar como mínimo un constructor sin parámetros para la clase. En nuestro ejemplo esta clase se llama EcoImpl, es decir la clase que implementa la interfaz Eco.

RMI paso a paso. 2.-Implementación de la interfaz remota. import java.rmi.*; import java.rmi.server.*; public class EcoImpl extends UnicastRemoteObject implements Eco { // Implementación del método remoto public String mensaje(string nombre) { return "\nhola " + nombre +"!!"; } // Constructor sin parámetros. Este constructor debe lanzar una // RemoteException, puesto que el constructor de la superclase // UnicastRemoteObject, lanza esa misma excepcion. public EcoImpl() throws RemoteException { } }

RMI paso a paso. 3.-Implementación del servidor de objetos remotos. En una aplicación RMI, es necesario contar con una aplicación que se encargue de instanciar los objetos remotos y publicarlos para que puedan ser utilizados desde otras aplicaciones. Esta es la funcionalidad que se debe implementar en la clase servidora de objetos remotos, la cual se encargará de instanciarlos, registrarlos y mantenerlos activos.

RMI paso a paso. 3.-Implementación del servidor de objetos remotos. Realmente, servidores más avanzados deben ser capaces de instanciar objetos remotos bajo demanda y mantenerlos o destruirlos según su tiempo de utilización.

RMI paso a paso. 3.-Implementación del servidor de objetos remotos. Nuestro servidor se llamará EcoServer. Se encargará de crear un objeto de la clase que implementa la interfaz remota, luego registra este objeto en un servidor de nombres (que en el caso de Java será el rmiregistry). A través de este servidor de nombres los clientes conocerán el nombre con el cual se encuentra publicado el objeto remoto y lo utilizarán para obtener referencias al mismo y ejecutar sus métodos.

RMI paso a paso. 3.-Implementación del servidor de objetos remotos. import java.rmi.*; class EcoServer { } public static void main(string args[]) throws Exception { } EcoImpl ref = new EcoImpl(); // Registrar el objeto remoto en el servidor de nombres, // asociándolo a un nombre que será utilizado desde el //cliente Naming.rebind("Eco", ref); // El método rebind crea un thread que mantiene vivo el //objeto System.out.println("Servidor en ejecución y objeto registrado");

RMI paso a paso. 4.-Implementación del cliente. En la aplicación cliente se utilizará el mismo identificador con que fue registrado el objeto remoto para localizarlo en el servidor de nombres y obtener la referencia que permita llamar a sus métodos. En el cliente es necesario disponer de la interfaz a partir de la cual se implementó el objeto remoto, para poder así comunicarse con él. Es decir, en nuestro ejemplo se necesita la interfaz Eco para compilar la clase EcoClientque representará al cliente.

RMI paso a paso. 4.-Implementación del cliente. // En este ejemplo se deben pasar por la línea de comandos // el nombre del servidor del objeto remoto y la cadena que se le va // a pasar al método remoto como argumento import java.rmi.*; public class EcoClient { public static void main (String args[]) throws Exception { if (args.length!= 2) { System.out.println( "Error, se debe pasar Servidor " + " y Mensaje para el método"); System.exit(1); }

RMI paso a paso. 4.-Implementación del cliente. } } // Se construye la url que indica el sitio donde se // encuentra ejecutándose el servicio de nombres (args[0]) // y cuál es el objeto del cual se quiere obtener una // referencia String url = "rmi://" + args[0] + "/Eco"; // El método lookup busca en el servicio de nombres una // url que se corresponda, y devuelve una referencia al // objeto remoto de tipo Object. Eco ref = (Eco) Naming.lookup(url); //Invocación del método remoto String m = ref.mensaje(args[1]); System.out.println(m);

RMI paso a paso. 5.-Generación de stubs y skeletons. Para la ejecución es necesario generar un stub y para la clase que implementa la interfaz remota, un skeleton. El stub generado jugará el papel de proxy en el cliente, de manera que éste se comunicará con el stub como si estuviera comunicándose con el objeto en local. Será el stub el encargado de enviar las peticiones de invocación de métodos y parámetros y luego de devolver el valor de retorno al cliente.

RMI paso a paso. 5.-Generación de stubs y skeletons. El stub no se comunica directamente con el servidor remoto, sino con un skeleton que es el que lee los parámetros del método y se encarga de invocarlo, y enviar el valor de retorno del mismo de regreso al stub. El stub no se comunica directamente con el servidor remoto, sino con un skeleton que es el que lee los parámetros del método y se encarga de invocarlo, y enviar el valor de retorno del mismo de regreso al stub.

RMI paso a paso. 5.-Generación de stubs y skeletons. Para generar el stub y el skeleton de la clase que implementa la interfaz remota (EcoImpl) se utiliza el compilador de RMI rmic. Lo que se le pasa como argumento es el archivo con extensión.class. La sintaxis es: rmic vcompat EcoImpl Utilizamos la opción vcompat para que se generen un stub y un skeleton compatibles con la versión 1.1 y 1.2, ya que la opción por defecto sólo generaría el stub. Esto provocará que se generen, además de los.class que ya existían, el stub y el skeleton, es decir:

RMI paso a paso. 5.-Generación de stubs y skeletons. Eco.class EcoImpl.class EcoImpl_Skel.class EcoImpl_Stub.class EcoServer.class EcoClient.class

Ejecución de una aplicación RMI. Paso 1. Ejecutar el servicio de registro y búsqueda de nombres en la máquina del servidor: rmiregistry. El rmiregistry permite registrar y localizar objetos remotos utilizando nombres sencillos. Un servidor puede tener integrado su propio servicio de registro de nombres o puede compartir uno que dé servicio a toda una red.

Ejecución de una aplicación RMI. Paso 1. La aplicación del lado del servidor utilizará este servicio para registrar los nombres que los clientes utilizarán para localizar los objetos remotos. Este servicio se debe mantener activo escuchando por un puerto las peticiones que realizan los clientes, por lo que hay que ejecutarlo en background. El comando para ejecutarlo es rmiregistry y no produce ninguna salida por consola.

Ejecución de una aplicación RMI. Paso 1. Dependiendo de si se ejecuta en Windows o Linux, la sintaxis es: Windows: start rmiregistry Linux: rmiregistry &

Ejecución de una aplicación RMI. Paso 2. El siguiente paso es la ejecución del servidor de objetos remotos, responsable de instanciar un objeto de la clase que implementa la interfaz remota y de registrarlo en el servicio de nombres. Esta ejecución del servidor es recomendable realizarla en otra consola. La sintaxis utilizando nuestro ejemplo es:

Ejecución de una aplicación RMI. Paso 3. Luego ya es posible ejecutar el cliente, ya sea en la misma máquina o en una máquina conectada a través de la red. Se debe poner en el CLASSPATH la ruta de los.class generados. Si se va a ejecutar el cliente en la misma máquina, abrir otra consola y ejecutar:

Ejecución de una aplicación RMI. Paso 3. Si se va a ejecutar el cliente en otra máquina, es necesario tener en la misma, además de la aplicación cliente (EcoClient.class), la interfaz remota (Eco.class) y el stub (EcoImpl_Stub.class) y asegurarse de poner la ruta de éstos en el CLASSPATH de la máquina cliente. La ejecución entonces sería:

Ejecución de una aplicación RMI. Paso 3. La salida de esta aplicación sería el siguiente mensaje en la consola del cliente:

Actividad. Se debe desarrollar una aplicación completa de RMI (servidor y cliente) partiendo de la clase Jugador que se muestra a continuación y que representará el tipo del objeto que será retornado por el método de la interfaz remota ServicioJugador. Para desarrollar la aplicación RMI completa, habrá que implementar las clases ServicioJugadorImpl (clase que implementa la interfaz remota), ServicioJugadorServer (clase servidora de objetos remotos) y ServicioJugadorCliente (clase cliente del objeto remoto). Para la implementación y la ejecución, debe guiarse por los pasos descritos anteriormente en la práctica.