RMI (Remote Method Invocation)

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

DESARROLLO DE SOLUCIONES EMPRESARIALES MOVILES USANDO TECNOLOGIA SUN APLICACIONES MOVILES CON J2ME RMS Ing. Ronald Criollo.
Curso de Java Capitulo 7: Continuación Poo Profesor:
Curso de Java Capitulo 7: Conceptos sobre poo Profesor:
EXCEPCIONES UNIDAD 5.
Lenguaje de programación Java
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
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.
Arquitectura CLARO-TECNOTREE CAPITULO 4: Excepciones
Capitulo 4 Excepciones.
Introducción a Remoting
Siguiente Excepciones Introducción. AnteriorSiguiente Definición Una excepción es un evento que ocurre durante la ejecución de un programa que desestabiliza.
Informática II Prof. Dr. Gustavo Patiño MJ
Entornos orientados a objetos
RMI Remote Method Invocation
UNIVERSIDAD LATINA (UNILA)
Diseño y programación de
PROGRAMACION ORIENTADA A OBJETOS
Programación Orientada a Objetos en Java
Objetos Distribuidos – Aplicaciones RMI
Archivos Contenido: Archivos de Texto Archivos de Acceso Aleatorio
Excepciones y archivos Info 033. Exception El término Exception es la palabra corta para la frase "evento excepcional." Definition: Una excepción es un.
Enterprise Java Beans Rubén Trujillo Sept-Dic 2008.
Manejo de excepciones 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.
Polimorfismo Lenguajes de Programación II Corporación Universitaria del Caribe CECAR.
Lic. Rosemary Torrico Bascopé
INSTITUTO TECNOLOGICO DE TEHUACAN Ingeniería en sistemas computacionales Curso de apoyo a la titulación EXCEPCIONES EN JAVA Diciembre de 2008.
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
El patrón de diseño Proxy Raúl Heras Alberto Blasco José Manuel Arévalo.
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.
1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.
SCJP Sun Certified Programmer for Java 6
Semana 5 Subprogramas..
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
7. Interfaces Herencia múltiple Interfaces Comparable y Comparator
Invocación de Métodos Remotos RMI: Remote Method Invocation
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.
Tema 11: Excepciones Antonio J. Sierra.
Patrones Creacionales
JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I
Tema VI: Java RMI Luis López Fernández.
Clases y objetos. La unidad fundamental del lenguaje Java es la clase, que proporciona la estructura de los objetos y mecanismos para fabricarlos, a partir.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
RMI Remote Method Invocation 2da. Clase del 19 de Junio
OBJETOS DISTRIBUIDOS E INVOCACIÓN REMOTA ING. MARISCAL.
Patrones de Diseño: Command
USO DE EXCEPCIONES EN JAVA LSC. Natalia Rodríguez Castellón.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA CUATRO CONTROL DE FLUJOS, EXCEPCIONES Y ASERSIONES.
Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.
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.
Informatica II1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase que ha sido extendida. La clase original se conoce como superclase.
Manuel I. Capel Tuñón Ramón A. Carrasco González
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
Detalles Generales sobre Java
Tratamiento de excepciones
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2009.
Clases “ Es una Abstracción de un elemento del mundo real ”
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.
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,
Prof. Manuel B. Sánchez. Declaración de Objetos Una vez que la clase ha sido implementada se pueden declarar objetos como variables locales de métodos.
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.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Transcripción de la presentación:

RMI (Remote Method Invocation) Programación Distribuida Año 2004

Introducción a las Aplicaciones RMI Las aplicaciones RMI normalmente comprenden dos programas separados: un servidor y un cliente. Una aplicación servidor típica crea un montón de objetos remotos, hace accesibles unas referencias a dichos objetos remotos, y espera a que los clientes llamen a estos métodos u objetos remotos. Una aplicación cliente típica obtiene una referencia remota de uno o más objetos remotos en el servidor y llama a sus métodos.

Introducción a las Aplicaciones RMI RMI proporciona el mecanismo por el que se comunican y se pasan información del cliente al servidor y viceversa. Cuando es una aplicación algunas veces nos referimos a ella como Aplicación de Objetos Distribuidos

Objetos distribuidos: Elementos principales Interfaces remotas Objetos remotos Objetos serializables Stubs Servicio de nombres

Interfaces remotas Interfaz acordada entre servidor y cliente Métodos que el cliente puede invocar Las clases de los parámetros y del resultado han de ser serializables (en Java simplemente implementando una interfaz) o remotos.

Interfaces remotas Un objeto se convierte en remoto implementando un interface remoto, que tenga estas características. Un interface remoto desciende del interface java.rmi.Remote. Cada método del interface declara que lanza una java.rmi.RemoteException además de cualquier excepción específica de la aplicación.

Objetos Remotos Objetos cuyos mensajes pueden ser invocados remotamente (desde objetos corriendo en otro proceso. En el caso de java sería desde otra JVM) Los objetos remotos deben implementar uno o varios interfaces remotos La clase del objeto remoto podría incluir implementaciones de otros interfaces (locales o remotos) y otros métodos (que sólo estarán disponibles localmente). Si alguna clase local va a ser utilizada como parámetro o cómo valor de retorno de alguno de esos métodos, también debe ser implementada.

Objetos Serializables El RMI utiliza el mecanismo de serialización de objetos para transportar objetos entre máquinas virtuales. Implementar Serializable hace que la clase sea capaz de convertirse en un stream de bytes auto-descriptor que puede ser utilizado para reconstruir una copia exacta del objeto serializado cuando el objeto es leído desde el stream.

Stubs Actúan como referencias a objetos remotos en el cliente Clase usada por el cliente en sustitución de la remota Su clase es generada automáticamente a partir de la interfaz Implementa la interfaz remota La implementación de cada operación envía un mensaje a la máquina virtual que ejecuta el objeto remoto y recibe el resultado

Stubs Retransmiten llamadas desde el cliente hacia el servidor Es transparente al código del cliente. Cuando un cliente invoca una operación remota que devuelve una referencia a un objeto remoto, obtiene una instancia del stub correspondiente

Servicio de nombres Permite asociar nombres lógicos a objetos Servidor: asocia un nombre a un objeto Cliente: obtiene una referencia al objeto a partir del nombre (stub) Objetivo: transparencia de localización

Pasaje de Objetos El intercambio de objetos en la ejecución de un método en un objeto remoto puede ocurrir cuando: Un cliente pasa objetos como parámetro pues así lo requiere el signature del método. El server recibe y puede manipular esos objetos El servidor responde a la ejecución de un método a partir de un objeto. El cliente puede utilizar ahora ese objeto que recibe como respuesta. Cualquiera de estos objetos (parámetros o respuesta) deben ser remotos y si no lo son deben ser serializables

Pasaje de Objetos Si son remotos: Estará tipado con una clase que extiende de UnicastRemoteObject Se pasan por referencia Los objetos remotos se convierten en stubs al pasar del servidor al cliente

Pasaje de Objetos Si no son objetos que se pueden acceder de manera remota (deben al menos ser serializables): No están tipados con un clase que extienda UnicastRemoteObject (o alguna que indique que es remoto) Deben implementar java.io.Serializable (de lo contrario se produce una excepción) Son pasados por valor. RMI se ocupa de la serialización de forma transparente para el desarrollador

Ejemplo:RMI

Ejemplo: RMI Interfaces Java que derivan de la interfaz java.rmi.Remote Todos los métodos deben declarar java.rmi.RemoteException Argumentos que pueden tomar los métodos: Tipos primitivos Java Stubs y objetos remotos Objetos locales serializables (implementan la clase java.io.Serializable)

Ejemplo: RMI Implementación de Objetos Remotos Subclase de java.rmi.server.UnicastRemoteObject que implemente la interfaz remota Implementar todos los métodos de la interfaz remota

Ejemplo: RMI Programa Servidor Programa Cliente Crea instancias de las clases remotas y las registra en el servidor de nombres Programa Cliente Declara objetos de la interfaz remota y obtiene stubs del servidor de nombres Invoca métodos sobre los objetos

Ejemplo: RMI Java RMI define un servicio de nombres muy sencillo El esquema de nombrado sigue la sintaxis de una URL //máquina:puerto/nombreDeObjeto, siendo nombreDeObjeto un nombre simple máquina y puerto hacen referencia a la máquina en la que corre el programa servidor de nombres Por defecto, máquina = localhost y puerto = 1099

Ejemplo: RMI Servicio de nombres: rmiregistry

Ejemplo: RMI(servicio de nombres) Aplicación que contiene un objeto que implementa el interfaz java.rmi.registry.Registry No es persistente Por motivos de seguridad, la implementación de rmiregistry prohíbe que se invoquen los métodos bind, rebind y unbind de su objeto Registry desde otra máquina

Ejemplo: RMI(servicio de nombres) La clase java.rmi.Naming Naming.rebind (String, Remote) Naming.unbind (Remote) Naming.lookup (String) Asignación de nombres Localización de objetos

Ejemplo: RMI(Ejecución) Arrancar el servidor de nombres (rmiregistry) Correr la clase servidor Correr el (los) cliente(s) En el momento de la ejecución, el cliente debe disponer en su máquina de: .class de cada interfaz remota .class de cada clase stub correspondiente

Ejemplo: RMI(Interface) package rmi_sample; import java.rmi.Remote; import java.rmi.RemoteException; public interface StringerInterface extends Remote { String getString() throws RemoteException; }

Ejemplo: RMI(Servidor) package rmi_sample; import java.rmi.*; import java.rmi.server.*; import java.rmi.RemoteException; public class Stringer extends UnicastRemoteObject implements StringerInterface { private String str = "DEFAULT"; public Stringer(String s) throws RemoteException super(); str = s; }

Ejemplo:RMI(Servidor) public String getString() throws RemoteException { return str; } public static void main(String[] args) String name; StringerInterface robject; if (System.getSecurityManager() == null) System.setSecurityManager(new RMISecurityManager());

Ejemplo: RMI(Servidor) name = "//localhost/StringerInterface"; try { robject = new Stringer("Hi\n"); Naming.rebind(name, robject); System.out.println("Stringer bounded"); } catch (Exception e) System.err.println( "************ ComputeEngine exception: ***********" + e.getMessage()); //e.printStackTrace();

Ejemplo: RMI(Cliente) package rmi_sample; import java.rmi.*; public class StrClient { public static void main(String args[]) { if (args.length < 1) System.out.println(“Necesita el hostname"); System.exit(0); } if (System.getSecurityManager() == null) System.setSecurityManager(new RMISecurityManager());

Ejemplo: RMI(Cliente) try { String name = "//" + args[0] + "/StringerInterface"; StringerInterface robject = (StringerInterface) Naming.lookup(name); String result = robject.getString(); System.out.println(result); } catch (Exception e) System.err.println(" ********** Problemas en la invocacion: *************" + e.getMessage()); e.printStackTrace();

Conclusión RMI es un sistema que nos permite el intercambio de objetos, el cual se realiza de manera transparente de un espacio de direcciones a otro, puesto que utiliza una técnica de serealización. Además nos permite el llamado de los métodos remotamente, sin tener la necesidad de tener los métodos localmente.

Conclusión Debido a que los sistemas necesitan manejo de datos en sist. distribuidos cuando estos residen en direcciones de distintos host, los métodos de invocación remota son una buena alternativa para solucionar estas necesidades. RMI es un sist. de programación para la distribución e intercambio de datos entre distintas aplicaciones existentes en un entorno distribuido.

Conclusión Se debe tener en cuenta que es mas lento porque los objetos tiene que serializarse y luego deserailizarse, se debe chequear la seguridad, los paquetes tiene que ser ruteados a través de switches. Esto trae como conclusión que, lamentablemente, el diseño de un sistema distribuido, no es solamente tomar un conjunto de objetos y ponerlos en otro proceso para balancear la carga.