Manuel I. Capel Tuñón Ramón A. Carrasco González

Slides:



Advertisements
Presentaciones similares
APLICACIONES DISTRIBUIDAS
Advertisements

Sun Microsystems desarrolló, en 1991, el lenguaje de programación orientado a objetos que se conoce como Java. La intención de Sun era crear un lenguaje.
Características Generales y Entornos de Desarrollo
CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Curso de Java Capitulo 7: Continuación Poo Profesor:
Lenguaje de programación Java
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Práctica II: Java RMI.
Common Object Request Broker Architecture
Lenguajes Servicios Web
"java del lado del servidor" Servlet y JSP Java Server Pages.
Arquitectura CLARO-TECNOTREE CAPITULO 4: Excepciones
Introducción a Remoting
Investigación Servidor de Aplicaciones WebSphere
Informática II Prof. Dr. Gustavo Patiño MJ
Entornos orientados a objetos
RMI Remote Method Invocation
Java 2 Platform Enterprise Edition
RMI (Remote Method Invocation)
PROTOCOLOS Un protocolo es un conjunto de reglas que hacen que la comunicación en una red sea más eficiente.
Objetos Distribuidos – Aplicaciones RMI
PROGRAMACION DISTRIBUIDA
Primer Programa en JAVA
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Lic. Rosemary Torrico Bascopé
Profesor: Miguel Angel Vidal
El patrón de diseño Proxy Raúl Heras Alberto Blasco José Manuel Arévalo.
Java Mayra M. Méndez Anota.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
Tema 10: Interfaces Antonio J. Sierra.
Sistemas Operativos Centralizados y Distribuidos Carlos David Zepeda.
1 Ingeniería del Software Ejercicios de Implementación  Caso de Uso Total Gasto (Junio 2003)  Caso de Uso Mejor Usuario (Septiembre 2003)  Caso de Uso.
Ejemplo CORBA: Java IDL
Sincronización de Objectos Compartidos usando MatchMaker a través de Web Services Thomas Pieper DCC, Universidad de Chile.
Invocación de Métodos Remotos RMI: Remote Method Invocation
Introducción a la Programación. Lenguaje de Máquina.
Servicios Web. Servicios web Son programas con funcionalidad accesible a través de protocolo http que permiten la ejecución remota de métodos y funciones.
JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I
Un programa no es nada mas que una serie de instrucciones dadas al ordenador en un lenguaje entendido por el, para decirle exactamente lo que queremos.
RMI Remote Method Invocation 2da. Clase del 19 de Junio
OBJETOS DISTRIBUIDOS E INVOCACIÓN REMOTA ING. MARISCAL.
Teoría de Sistemas Operativos
Curso de Java La tecnología Java
Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.
Haga clic para modificar el estilo de subtítulo del patrón 28/04/09 Por ARLEDY SARRIA MOLINA NAZLY DIAZ ARIZA JHOANNA MARQUELLA DESARROLLO DE SOFTWARE.
Universidad Nacional de San Juan Facultad de Ciencias Exactas, Físicas y Naturales “WEB SERVICES” Integrantes: Ene Adriana Guevara Vanina Martínez Cintia.
Seminario de Java Programación Orientada a Objetos.
Remote Method Invocation (RMI) Basado en: Fundamentals of RMI. Short Course. JGuru.
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
Cambiando la manera de diseñar aplicaciones distribuidas Diseño orientado a las comunicaciones: Primero se diseña el protocolo de las comunicaciones y.
Introducción al lenguaje de programación Java
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) LENGUAJES DE PROGRAMACIÓN PARA EL DESARROLLO DE INTERFACES.
Protocolos de comunicación TCP/IP
Luis Villalta Márquez Servicios SFTP/SCP. SFTP SSH File Transfer Protocol (también conocido como SFTP o Secure File Transfer Protocol) es un protocolo.
API JDBC Java Database Connectivity. Conceptos básicos API de Conectividad a Bases de Datos Emplea SQL Standard Ventaja: los programas desarrollados en.
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) IV. IMPLEMENTACIÓN DE COMPONENTES.
Servicios Web Conjunto de aplicaciones o de tecnologías con capacidad para interoperar en la Web. Estas aplicaciones o tecnologías intercambian datos entre.
Patrón de diseño BROKER
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Notario electrónico Consejería de Justicia y Administración Pública Dirección General de Organización, Inspección y Calidad de los Servicios Antonio Pedro.
Entorno de Trabajo e Introducción a Java Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 1.
Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 4 Versión Diseño de tipos Igualdad, representación, código,
RMI: Invocación a método remoto, y Java RMI
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
Concepto de Tipo y Subtipo Diseño e Implementación Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 10 Versión.
Definición: Es un estilo de programación, su objetivo primordial es la separación de la capa de presentación, capa de negocio y la capa de datos. ARQUITECTURA.
GRUPO N°1 – SISTEMAS OPERATIVOS DISTRIBUIDOS LLAMADA A PROCEDIMIENTO REMOTO.
Java RMI. Entornos orientados a objetos  Tendencia actual hacia sistemas compuestos por un conjunto de objetos que interactúan entre sí.  Un programa.
Transcripción de la presentación:

Manuel I. Capel Tuñón Ramón A. Carrasco González Prácticas de Programación Concurrente: Objetos Distribuidos API RMI de Java Manuel I. Capel Tuñón Ramón A. Carrasco González 16/04/2017 Prácticas Programación Concurrente

Sistemas de Objetos Distribuidos/Protocolos El paradigma de objetos distribuidos ha sido ampliamente adoptado en el desarrollo de aplicaciones distribuidas, para las que existen muchos mecanismos de programación basados en este paradigma. Entre los más conocidos, cabe destacar: ~ Java Remote Method Invocation (RMI), ~ Sistemas basados en Common Object Request Broker Architecture (CORBA), ~ Distributed Component Object Model (DCOM), ~ Simple Object Access Protocol (SOAP). 16/04/2017 Prácticas Programación Concurrente

La Arquitectura de RMI de Java Servicio de Directorio objeto objeto servidor cliente Soporta la interfaz con el programa de aplicación. esqueleto Traduce el resguardo/esqueleto indepen- diente de plataforma. resguardo Oculta la capa de transporte dependiente de plataforma, llevando a término las referencias remotas. capa de gestión de referencias remotas capa de gestión de referencias remotas capa de transporte capa de transporte Levanta, mantiene y cierra las conexiones e implementa el protocolo de transporte. camino de datos lógico camino de datos físico 16/04/2017 Prácticas Programación Concurrente

Invocación de Método Remoto RMI es una implementación orientada a objetos definida sólo para programas Java. Utilizando RMI, un servidor de objeto exporta un objeto remoto y lo registra en un servicio de directorio. Se ofrecen métodos remotos, que pueden ser invocados desde programas cliente. Sintácticamente: Se declara un objeto remoto que implementa una interfaz remota, una extensión de la clase Remote de Java . Programación de interfaz remota en un objeto del servidor. Los objetos-cliente pueden acceder mediante la invocación de los métodos remotos asociados, utilizando una sintaxis de llamada de método remoto para realizar invocaciones. 16/04/2017 Prácticas Programación Concurrente

Prácticas Programación Concurrente Registro de Objetos La API RMI permite utilizar varios servicios de directorio [1] para registrar objetos distribuidos. Utilizaremos un servicio de directorio simple, denominado RMI registry, rmiregistry, que viene con el Java Software Development Kit (SDK)[2]. rmiregistry es un servicio cuyo servidor, cuando está activo, se ejecuta en la máquina host del objeto servidor, por defecto en el puerto TCP 1099. [1] Uno de estos servicios es el Java Naming and Directory Interface (JNDI), que es más general que el RMI registry, en el sentido de que puede ser utilizado por aplicaciones que no usan la API de RMI. [2] Java SDK es lo que descargamos en nuestra máquina para poder usar las bibliotecas de clases de Java, así como sus herramientas, como el compilador javac. 16/04/2017 Prácticas Programación Concurrente

La interacción entre resguardo y esqueleto Diagrama de eventos temporizado con la interacción entre el resguardo (stub) y el esqueleto (skeleton): skeleton “Marshalling” de parámetros; enviar Petición “Unmarshalling” de parámetros Invocar método Remote Method ejecutar código y devolver un valor Recibir valor de retorno “marshalling” de respuesta enviar respuesta “Unmarshalling de respuesta; Devolver valor tiempo (basado en http:// java.sun.com.marketing /collateral/ javarim.html) stub 16/04/2017 Prácticas Programación Concurrente

Prácticas Programación Concurrente La API de RMI Java La Interfaz Remota El software del lado del Servidor La Implementación de la Interfaz Remota Generación de resguardos y esqueletos El Objeto Servidor El software del lado del Cliente 16/04/2017 Prácticas Programación Concurrente

Una muestra de interfaz remota // archivo: UnaInterfaz.java //para ser programado en una clase servidora de Java RMI. import java.rmi.* public interface UnaInterfaz extends Remote { // signatura del primer método remoto public String algunMetodo1( ) throws java.rmi.RemoteException; // signatura del segundo método remoto public int algunMetodo2( float ) throws java.rmi.RemoteException; // Aquí seguiría la signatura del resto de los métodos } // fin de la interfaz 16/04/2017 Prácticas Programación Concurrente

Una muestra de interfaz remota -2 La excepción java.rmi.Remote ha de ser listada en la cláusula throws de las signaturas de los métodos. Esta excepción se levantará cuando, durante el procesamiento de una llamada remota, se produzca algún error y es obligatorio que sea capturada en el método del programa que hace la llamada. Se producen excepciones durante operaciones de IPC debido a las siguientes causas: fallos de acceso y conexión, así como a errores propios derivados de un mal uso del protocolo RMI. 16/04/2017 Prácticas Programación Concurrente

El Software del lado del Servidor Un objeto servidor es un objeto que proporciona los métodos y la interfaz a un objeto distribuido y su responsabilidades se resumen como sigue: implementar cada uno de los métodos especificados en la interfaz remota, registrar el objeto que contiene la implementación de los métodos en un servicio de directorio. Se recomienda que las dos acciones anteriores se programen en clases diferentes. 16/04/2017 Prácticas Programación Concurrente

Diagrama UML para la clase UnInterfazImpl UnicastRemoteObject UnaInterfaz UnaInterfazImpl Diagrama UML de unMetodo1 unMetodo2 ... Implements Extends 16/04/2017 Prácticas Programación Concurrente

La Implementación de la Interfaz Remota Debe de programarse una clase que implementa la interfaz remota. Sintaxis similar a la de cualquier otra clase que implemente una interfaz local. import java.rmi.*; import java.rmi.server.*; /**Esta clase implementa la interfaz remota UnaInterfaz*/ public class UnaInterfazImpl extends UnicastRemoteObject implements UnaInterfaz { public UnaInterfazImpl() throws RemoteException { super( ); } public String unMetodo1( ) throws RemoteException { // el código ha de ser suministrado public int unMetodo2( ) throws RemoteException { } // end class 16/04/2017 Prácticas Programación Concurrente

Generación de Resguardo y Esqueleto En RMI, el resguardo (del objeto cliente) y el esqueleto (del objeto servidor) son generados a partir de la implementación de la interfaz remota utilizando una herramienta que proporciona Java SDK: el compilador rmic de RMI. rmic <nombre de la clase de implementación de la interfaz remota> Por ejemplo: rmic UnaInterfazImpl Como resultado de la compilación, se generarán dos archivos, cada uno de ellos vendrá prefijado con el nombre de la clase de implementación e indica el tipo de proxy que es: UnaInterfazImpl_skel.class UnaInterfazImpl_stub.class. 16/04/2017 Prácticas Programación Concurrente

El Archivo resguardo del objeto El archivo resguardo del objeto, así como el archivo de la interfaz remota (no su implementación), deben ser compartidos con cada objeto cliente– se necesitan estos archivos para que el programa cliente compile. La copia de cada uno de estos archivos puede ser suministrada al objeto cliente a mano por el propio programador. Pero, además, el RMI de Java tiene la característica denominada “stub downloading” que permite al cliente obtener dinámicamente el archivo resguardo. 16/04/2017 Prácticas Programación Concurrente

Registro RMI Naming.rebind(“Servidor1”, obj); El objeto servidor exporta un objeto registrándolo mediante un nombre simbólico en el servidor conocido como RMI registry. // Crear un object conforme a la Interfaz UnaInterfazImpl obj = new UnaInterfazImpl(“Servidor1”); // Registrar el objeto Naming.rebind(“Servidor1”, obj); Se necesita otro servidor, llamado RMI Registry, ejecutándose en el host de la parte del servidor para exportar el objeto remoto. Se puede utilizar el servidor RMIRegistry en el puerto 1099, por defecto. Puede ser invocado dinámicamente en la clase del servidor: import java.rmi.registry.LocateRegistry; … LocateRegistry.createRegistry ( 1099 ); … 16/04/2017 Prácticas Programación Concurrente

Prácticas Programación Concurrente El Objeto Servidor - 2 La clase objeto servidor es una clase cuyo código instancia y exporta un objeto de la clase que implementa la interfaz remota. import java.rmi.*; …… public class UnServidor { /** Crea nueva instancia de Servidor rmi */ public UnServidor() { try { // Se indica a rmiregistry el path donde está la interfaz remota System.setProperty("java.rmi.server.codebase", "file:/path donde esta la interfaz remota (sin espacios…) p.e file:/c:/pc/prac3/interfazRemota/"); // Se publica el objeto remoto UnaInterfazImpl objExportado = new unaInterfazImpl(); Naming.rebind("//host:port/unaInterfazImpl p.e //localhost/unaInterfazImpl", objExportado); } catch (Exception e) { e.printStackTrace(); } * @param args * the command line arguments public static void main(String[] args) { new UnServidor(); 16/04/2017 Prácticas Programación Concurrente

Registro RMI -2 De manera alternativa, un registro RMI podría ser activado a mano con la utilidad rmiregistry, que viene en el Java Software Development Kit (SDK): rmiregistry <numero de puerto> donde el número de puerto corresponde a un puerto TCP. Se asume por defecto el puerto 1099, si no se especifica otro puerto. El registro se ejecutará todo el tiempo hasta que se pare (vía CTRL-C, por ejemplo). Más adelante se explicará como hacerlo en Eclipse 16/04/2017 Prácticas Programación Concurrente

Prácticas Programación Concurrente El Objeto Servidor - 4 Cuando se ejecuta un objeto servidor, el objeto distribuido que se exporta ocasiona que el proceso servidor comience a escuchar y a esperar a que los clientes se conecten y pidan servicio del objeto. Un objeto servidor RMI es un servidor concurrente: cada petición de un objeto cliente es servida utilizando un hilo diferente del servidor. Todas las llamadas de un mismo cliente se ejecutarán concurrentemente, salvo que incluyan instrucciones de sincronización. 16/04/2017 Prácticas Programación Concurrente

El Software del lado del Cliente La parte del cliente se programa como cualquier otra clase de Java, con sintaxis específica de RMI, que significa: localizar el registro RMI en el host del servidor y consultar la referencia remota del objeto servidor; la referencia puede ser entonces transmitida a la clase de la interfaz remota y los métodos remotos se llaman como métodos locales. 16/04/2017 Prácticas Programación Concurrente

Consultando el objeto remoto El método lookup de la clase Naming es utilizado para recuperar la referencia del objeto, si existe y fue almacenada previamente en el registro por el objeto servidor. String registroURL= "rmi://localhost:"+NumPuerto+"/servidor"; UnaInterfaz h = (UnaInterfaz)Naming.lookup(registroURL); 16/04/2017 Prácticas Programación Concurrente

Invocando el Método Remoto La referencia a la interfaz remota puede ser usada ahora para invocar cualquiera de sus métodos: String mensaje = h.unMetodo1(); System.out.println(mensaje); La sintaxis usada para la invocación de los métodos remotos es la misma que para invocar a los locales. Es un error común el transmitir el objeto recuperado del registro RMI a la clase de la implementación de la interfaz o a la clase del objeto servidor. Lo correcto es transmitirlo como interfaz remota. 16/04/2017 Prácticas Programación Concurrente

El Software del lado del Cliente -2 import java.rmi.*; Import UnaInterfaz; …. public class UnCliente { public static void main(String args[]) { try { String registroURL = "//host:port/unaInterfazImpl p.e //localhost/unaInterfazImpl"; UnaInterfaz h =(UnaInterfaz)Naming.lookup(registroURL); // invocar ahora los(s) metodo(s)remoto(s) String mensaje = h.unMetodo1(); System.out.println(mensaje); // El Método2 puede ser llamado igualmente… } // fin try catch (Exception e) { e.printStackTrace();; } } //fin main // Definición de los ortos métodos de la clase, si hubieran. }//fin clase   16/04/2017 Prácticas Programación Concurrente

Arquitectura de la API de RMI RMI de Java es un buen representante de los sistemas de objetos distribuidos. La arquitectura de la API de Remote Method Invocation incluye tres capas abstractas, tanto en el lado del cliente, como en el del servidor. El software para una aplicación RMI incluye una interfaz remota, software del lado del servidor y software del lado del cliente. 16/04/2017 Prácticas Programación Concurrente

Ubicación de los ficheros para una aplicación RMI Host del Objeto Cliente Host del Objeto Servidor Directorio del objeto servidor Directorio del objeto cliente UnaInterfaz.class UnaInterfaz.class UnServidor.class UnaInterfazImpl.class UnCliente.class UnaInterfazImpl _ Skel.class UnaInterfazImpl _ Stub.class 16/04/2017 Prácticas Programación Concurrente

Revisión general para implementar una aplicación RMI en eclipse Definición de la interfaz remota Usar un proyecto independiente Definir como jre la jdk contenida en lsi/pc/is/jdk… public interface UnaInterfaz extends Remote {… Implementación del objeto interfaz Añadir el proyecto que contiene la interfaz remota public class UnaInterfazImpl extends UnicastRemoteObject implements UnaInterfaz {… Implementación del servidor remoto Añadir los proyectos que contiene la interfaz remota y el objeto remoto public class UnServidor { … Naming.rebind("//localhost/unaInterfazImpl", objExportado); Uso del servidor desde el cliente Añadir al proyecto del prg cliente el proyecto que contiene la interfaz remota UnaInterfaz h =(UnaInterfaz)Naming.lookup(“//localhost/unaInterfazImpl”); h.unMetodo1(); 16/04/2017 Prácticas Programación Concurrente

Revisión general para implementar una aplicación RMI en eclipse Para definir como jre la jdk contenida en lsi/pc/is/jdk… 16/04/2017 Prácticas Programación Concurrente

Revisión general para implementar una aplicación RMI en eclipse Añadir el proyecto que contiene la interfaz remota (p.e. cuando se crea el proyecto) 16/04/2017 Prácticas Programación Concurrente

Revisión general para implementar una aplicación RMI en eclipse Desde las últimas versiones de jdk no es necesario usar el compilador rmic de RMI para generar la clases skel y stub Por tanto, desde eclipse no tenemos que hacer nada especial con estas clases para su compilación 16/04/2017 Prácticas Programación Concurrente

Revisión general para ejecutar una aplicación RMI en eclipse 1. Activar un registro RMI Windows -> Preferences Puede ser activado a mano (Start) El registro se ejecutará todo el tiempo hasta que se pare (Stop) 16/04/2017 Prácticas Programación Concurrente

Revisión general para ejecutar una aplicación RMI en Eclipse 2. Ejecutar el servidor Especificar en el método System.setProperty el path de la interfaz remota (sin espacios, caracteres especiales,etc) El servidor continuará ejecutándose hasta que no paremos el registro de RMI 3. Ejecutar el cliente Normalmente, siempre y cuando esté ya arrancado el servidor 16/04/2017 Prácticas Programación Concurrente