JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I....

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

Transcript of JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I....

Page 1: JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I. 9821040-7.

JAVA RMIThe Java Remote Method Invocation

ELO330 – Programación de Sistemas

Cesar Vásquez I.9821040-7

Page 2: JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I. 9821040-7.

¿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.”

Page 3: JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I. 9821040-7.

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, UTF8 v/s ASCII – Distribución de Hardware: Distinta zona de memoria, stack,

clock de la CPU, etc.

Page 4: JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I. 9821040-7.

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

Page 5: JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I. 9821040-7.

Uso de STUBs y SKELETONs

Page 6: JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I. 9821040-7.

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 ejecutarProceso(Proceso t) throws RemoteException;

} Al crear un objeto remoto se debe “castear” la

interface. En este caso, calculoSumatoria Implementa a Proceso.

Proceso p = (Proceso) new calculoSumatoria( );

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

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

Funcionamiento:String nombre = "//200.1.27.172:12345/MotorCalculo";Calculo motor = (Calculo) new MotorCalculo();Naming.rebind(nombre, motor);

String nombre = "rmi://200.1.27.172:12345/MotorCalculo";Calculo comp = (Calculo) Naming.lookup(nombre);

Servidor

Cliente

Page 8: JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I. 9821040-7.

Políticas de Seguridad.

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

grant { permission java.net.SocketPermission "*:1024-65535", "accept, connect, listen,

resolve"; permission java.net.SocketPermission "*:80", "connect"; permission java.io.FilePermission "<<ALL FILES>>", "read"; };

Page 9: JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I. 9821040-7.

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.

Page 10: JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I. 9821040-7.

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.

Page 11: JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I. 9821040-7.

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 NT4– Sin embargo, a diferencia de CORBA, quien puede correr

en cualquier sistema operativo, DCOM esta implementado solo para Windows... ¬_¬

Page 12: JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I. 9821040-7.

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:

InterfaceRemota irem = (InterfaceRemota) new ClaseRemota();

– 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)

Page 13: JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I. 9821040-7.

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.

Page 14: JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I. 9821040-7.

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.

Page 15: JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I. 9821040-7.

¿ Preguntas ?

Pueden hacer sus preguntas hasta acá.

A continuación se procederá a mostrar un ejemplo...

Page 16: JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I. 9821040-7.

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.

Page 17: JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I. 9821040-7.

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.

Page 18: JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I. 9821040-7.

Solución 1: Servidor Multihilos

Page 19: JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I. 9821040-7.

Solución 2: Servidor RMI

Funcionamiento:– El servidor (MotorCalculo) 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 MotorCalculo.

– Luego crea un objeto: Proceso t = (Proceso) calculoSumatoria(int n);

– Con estas dos instancias, se ejecuta el metodo de la clase MotorCalculo:

int ejecutarProceso(Proceso t);– El servidor recibe un objeto Proceso, que en realidad es una instancia de

calculoSumatoria y comienza a ejecutar los métodos de calculoSumatoria 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 ejecutarProceso(Proceso t).

Page 20: JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I. 9821040-7.

Solución 2: Servidor RMI

Page 21: JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I. 9821040-7.

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.

Page 22: JAVA RMI The Java Remote Method Invocation ELO330 – Programación de Sistemas Cesar Vásquez I. 9821040-7.