JAVA RMI The Java Remote Method Invocation ELO

  • Slides: 22
Download presentation
JAVA RMI The Java Remote Method Invocation ELO 330 – Programación de Sistemas Cesar

JAVA RMI The Java Remote Method Invocation ELO 330 – Programación de Sistemas Cesar Vásquez I. 9821040 -7

¿Qué es RPC? Remote Procedure Calling RPC es la base de RMI, y de

¿Qué es RPC? Remote Procedure Calling RPC es la base de RMI, y de todos los protocolos basados en procesamiento remoto (CORBA, IDL, DCOM, etc) Definicion: "RPC es la transferencia sincrónica de datos y control entre dos partes de un programa distribuido a través de espacios de direcciones disjuntas. " O Bien: “Procesar de manera remota algún segmento de código necesario localmente, utilizando una CPU, Memoria, Stack, etc, remotos, sin salir del procesamiento local. ”

Dificultades de RPC Al trabajar con RPC (y por consiguiente, con RMI) se deben

Dificultades de RPC Al trabajar con RPC (y por consiguiente, con RMI) se deben tener en cuenta los siguientes problemas: – – – Marshalling y Unmarshalling: Estandarizar el orden de los datos Inestabilidad de la Red: Como retornar a la programación Seguridad: No cualquiera pueda interrumpir mi flujo de procesamiento. Representación de Datos: Por Ejemplo, UTF 8 v/s ASCII Distribución de Hardware: Distinta zona de memoria, stack, clock de la CPU, etc.

¿Que es RMI? Paquete de JAVA para manejar objetos de manera remota y transparente

¿Que es RMI? Paquete de JAVA para manejar objetos de manera remota y transparente para el usuario local. Características: – – Uso de STUBs y SKELETONs Uso de Interfaces Presencia de un Registro Central: RMI Registry Uso de Políticas de Seguridad.

Uso de STUBs y SKELETONs

Uso de STUBs y SKELETONs

Uso de Interfaces Es la única forma de comunicarse que tienen el Servidor y

Uso de Interfaces Es la única forma de comunicarse que tienen el Servidor y el Cliente. El Usuario interactúa con instancias de la Clase remota a través de la Interface, no directamente con la clase remota: public interface Calculo extends Remote { int ejecutar. Proceso(Proceso t) throws Remote. Exception; } Al crear un objeto remoto se debe “castear” la interface. En este caso, calculo. Sumatoria Implementa a Proceso p = (Proceso) new calculo. Sumatoria( );

RMI Registry Para el correcto funcionamiento de RMI, debe existir alguien que registre los

RMI Registry Para el correcto funcionamiento de RMI, debe existir alguien que registre los servidores que manejen objetos remotos. Es un herramienta de JAVA. Registra el par: Servidor/Objeto, para luego atender consultas de los clientes que busquen un determinado Servid objeto. or String nombre = "//200. 1. 27. 172: 12345/Motor. Calculo"; Calculo motor = (Calculo) new Motor. Calculo(); Naming. rebind(nombre, motor); Funcionamiento: Cliente String nombre = "rmi: //200. 1. 27. 172: 12345/Motor. Calculo"; Calculo comp = (Calculo) Naming. lookup(nombre);

Políticas de Seguridad. Herramienta: policytool Archivo: java. policy (para este ejemplo) Politica de Seguridad:

Políticas de Seguridad. Herramienta: policytool Archivo: java. policy (para este ejemplo) Politica de Seguridad: grant { permission java. net. Socket. Permission "*: 1024 -65535", "accept, connect, listen, resolve"; permission java. net. Socket. Permission "*: 80", "connect"; permission java. io. File. Permission "<<ALL FILES>>", "read"; };

Otras Alternativas CORBA (Common Object Request Broker Arquitecture) – – CORBA es un estándar

Otras Alternativas CORBA (Common Object Request Broker Arquitecture) – – CORBA es un estándar capaz de comunicar diferentes lenguajes. El corazón de CORBA, se llama ORB ("Object Request Broker“) y se encarga de realizar la comunicación entre los sistemas heterogéneos. Se encarga de traducir los objetos de cada, lenguaje en objetos estándar. Las empresas poseen sus propios ORB, algunos ejemplos son: Visibroker de Borland. Component Broker de IBM. Java IDL / ORB de Sun.

Otras Alternativas… IDL (Interface Definition Language) – – – Es la versión JAVA de

Otras Alternativas… IDL (Interface Definition Language) – – – Es la versión JAVA de CORBA Actualmente esta disponible en todas las versiones de JDK Se asemeja a RMI, pero convierte los objetos en objetos estándar, para trabajar con cualquier sistema CORBA.

Otras Alternativas… DCOM (Distributed Component Object Model) – – – También basado en CORBA.

Otras Alternativas… DCOM (Distributed Component Object Model) – – – También basado en CORBA. Nace a partir de Component Object Model (COM). Pero obviamente permite la comunicación distribuida de los componentes. Desarrollado por una compañía llamada Microsoft. Y aparece por primera vez 1995 con NT 4 Sin embargo, a diferencia de CORBA, quien puede correr en cualquier sistema operativo, DCOM esta implementado solo para Windows. . . ¬_¬

RMI v/s JAVA Similitudes – – Una referencia a un objeto, puede ser pasada

RMI v/s JAVA Similitudes – – Una referencia a un objeto, puede ser pasada como argumento o retornado como resultado de cualquier invocación (local o remoto). Un objeto remoto puede ser invocado sobre cualquier set de interfaces remotas soportadas por la implementación, usando la sintaxis de "castear", vale decir: Interface. Remota irem = (Interface. Remota) new Clase. Remota(); – El operador instanceof puede ser utilizado para testear la interface remota soportada por el objeto remoto. Diferencias – – – Los clientes de objetos remotos interactúan con interfaces remotas, NUNCA con la implementación de esas interfaces. Argumentos no-remotos hacia, y resultados desde, una invocación remota a un método son pasados por copia en vez de por referencia. Esto se debe a que las referencias a objetos son útiles solo dentro de una maquina virtual individual. En RMI, el cliente debe manejar una mayor cantidad de Excepciones, debido a que aumentan los tipos de fallas al invocar objetos remotos que cuando se trabaja de manera local (seguridad, red, rmiregistry, etc)

RMI v/s OTHERS Algunas de las diferencias mas relevantes: – – La diferencia principal

RMI v/s OTHERS Algunas de las diferencias mas relevantes: – – La diferencia principal con respecto a las otras tecnologías. Es que RMI, esta acotada solo a la presencia de JAVA, mientras que las otras, son estándares Multiplataforma y Multilenguaje. Además, CORBA no siempre provee mecanismos de recolección de basura. DCOM, por otra parte, esta acotado solo a ambientes Windows. IDL solo soporta paso por referencia, mientras que RMI soporta paso por valor y por referencia.

Conclusiones RMI es una muy buena alternativa para resolver el problema de aplicaciones Cliente/Servidor.

Conclusiones RMI es una muy buena alternativa para resolver el problema de aplicaciones Cliente/Servidor. Presenta una mayor simplicidad que otros sistemas. Sin embargo, esta acotada al soporte de JAVA. Una alternativa muy buena frente al problema de los “Legacy Systems” es IDL. Frente al problema de heterogeneidad, lo mejor es instaurar IDL, junto con un sistema CORBA. RMI, tampoco se recomienda en sistemas con tasa de crecimiento muy altas, no se desenvuelve bien frente a sistemas muy complicados.

¿ Preguntas ? Pueden hacer sus preguntas hasta acá. A continuación se procederá a

¿ Preguntas ? Pueden hacer sus preguntas hasta acá. A continuación se procederá a mostrar un ejemplo. . .

Ejemplo Problema: – – – El problema consiste en calcular la suma de todos

Ejemplo Problema: – – – El problema consiste en calcular la suma de todos los números enteros desde 1 hasta un numero pasado como parámetro, para ello se utiliza una formula trivial. La tarea debe ser realizada remotamente, por un servidor, que atenderá las consultas, realizará el calculo, y luego devolverá la solución. Además, debe tener un registro de todas las operaciones realizadas, para responder inmediatamente, sin calcular, cuando se realice una consulta repetida.

Solución 1: Servidor Multihilos Funcionamiento: – – – – El servidor parte y crea

Solución 1: Servidor Multihilos Funcionamiento: – – – – El servidor parte y crea un objeto del tipo Tabla el cual se encargará de guardar los cálculos realizados. Luego queda escuchando conexiones en un determinado puerto. Cuando llega una conexión, se crea un objeto Hilos, que implementa la interface Runnable, se pasa la referencia al objeto Tabla y se echa a correr el Thread. Luego se escucha la petición del cliente, se busca en la tabla (por si ya fue calculado). Se procesa (con un método de Tabla). Se guarda el resultado en un atributo de Tabla. Finalmente, se devuelve la respuesta al cliente.

Solución 1: Servidor Multihilos

Solución 1: Servidor Multihilos

Solución 2: Servidor RMI Funcionamiento: – – – El servidor (Motor. Calculo) se registra

Solución 2: Servidor RMI Funcionamiento: – – – El servidor (Motor. Calculo) se registra en RMIRegistry guardando su dirección. El cliente que necesite hacer un calculo, consulta al RMIRegistry, en busca del objeto deseado. Si existe, le es devuelta una instancia de Motor. Calculo. Luego crea un objeto: Proceso t = (Proceso) calculo. Sumatoria(int n); – – – Con estas dos instancias, se ejecuta el metodo de la clase Motor. Calculo: int ejecutar. Proceso(Proceso t); El servidor recibe un objeto Proceso, que en realidad es una instancia de calculo. Sumatoria y comienza a ejecutar los métodos de calculo. Sumatoria en el servidor, pese a que es una clase en el cliente!!! Una vez que el calculo es realizado, el servidor devuelve un entero como resultado del método ejecutar. Proceso(Proceso t).

Solución 2: Servidor RMI

Solución 2: Servidor RMI

Solución 2: Servidor RMI La implementación del sistema se hace por medio de servidores

Solución 2: Servidor RMI La implementación del sistema se hace por medio de servidores web que mantienen las clases remotas, para que así se obtenga TOTAL INDEPENDENCIA entre el servidor y el cliente.