jueves, 16 de noviembre de 2017

API RMI

Introducción
Los sistemas distribuidos requieren que las operaciones corran en diferentes hosts. Es un mecanismo necesario en la actualidad, debido a todas las innovaciones tecnológicas a las que estamos acostumbrado, esto como hemos visto antes se soporta con java sockets.
El uso de sockets permite la elaboración de aplicaciones distribuidas. Sin embargo, en ocasiones, son necesarios enfoques con un mayor grado de abstracción que el proporcionado por éstos. Al utilizar sockets, las aplicaciones deben desarrollar sus propios mecanismos para manejar de forma eficiente los mensajes intercambiados, con la consecuente complicación que esto conlleva.
En Java encontramos una herramienta que nos permite ejecutar código de forma remota (basándose en el principio que usa Remote Procedure Calling), a la cual se le denomina RMI (Remote Method Invocation) la cual nos permite ejecutar remotamente métodos de objetos ubicados en un servidor.

Desarrollo
La API RMI (Remote Method Invacation) proporciona un mecanismo para facilitar la elaboración de aplicaciones distribuidas. Integrado dentro de la jerarquía de paquetes oficiales del lenguaje de programación Java, se adapta perfectamente al modelo de programación de dicho lenguaje.

RMI integra este concepto en el lenguaje de programación Java, de manera que el manejo de objetos en aplicaciones distribuidas mantenga la semántica propia de los objetos locales de Java. En consecuencia, RMI puede ser fácilmente integrada con otras APIs de dicho lenguaje.

El uso de interfaces remotas proporciona una serie de ventajas, como son: las implementaciones de los métodos no son visibles por los clientes y no hace falta comunicar a los clientes cambios realizados en las implementaciones de los métodos.

RMI es, entonces, un paquete de Java que nos brinda la oportunidad de manejar objetos (lo que incluye también a sus métodos) de manera remota para hacer uso de líneas de código de un servidor haciendo parecer que dichas líneas de código se ejecutan en la máquina cliente de manera local. Para que esto se logre, existe algo denominado stub.

Un stub permite que la ejecución de una función invocada de manera remota pueda ser simulada localmente. En el caso del servidor, su stub se conoce como skeleton. 
Para que la comunicación entre el cliente y el servidor se pueda llevar a cabo, es necesario que se implemente, ya sea por el cliente o por el servidor, determinadas interfaces. Esto ayuda en el sentido de que se evita que se defina localmente la clase remota, lo cual hace el cliente al definir la interfaz y no la clase remota.

Mecanismo de RMI (Procesos fundamentales)
Cliente: Proceso que invoca un método en un objeto remoto.
Servidor: Proceso que posee el objeto remoto.
Registro de objetos: Se usa para el registro de objetos, para obtener acceso a objetos remotos utilizando su nombre.

Arquitectura
El sistema RMI consta de tres capas.
La capa sub/skeleton: Es la interfaz entre la capa de aplicación y el resto del sistema RMI. Transmite datos desde la capa remota a través de un flujo ordenado. Este flujo emplea un mecanismo llamado serialización, el cual habilita los objetos java a ser transmitidos entre espacio de direcciones.
Tareas que realiza el sub:
·         Iniciar una llamada a un objeto remoto
·         Ordenar los argumentos del flujo
·         Informar a la capa de referencia remota que la llamada sebe ser hecha
·         Retomar el valor o excepción de un flujo
·         Decodificar el flujo de datos
·         Hacer la llamada de la implementación del objeto remoto actual

La capa de referencia visual.
La capa de transporte.



Conclusión
Los orígenes de RMI se remontan a la invención de la tecnología RPC (Remote Procedure Calling). Aquí lo que buscamos es poder utilizar código de forma remota, lo que nos lleva, evidentemente, a la transferencia de datos. RMI, siendo una tecnología de Java, nos facilita el trabajo de implementar código que nos permita manejar objetos remotamente. Su arquitectura simula la arquitectura cliente-servidor, sin embargo, en este caso tenemos un componente más: registry, el cual nos permite crear relaciones objeto-servidor que le facilitan al cliente encontrar el objeto que requiere utilizar. 

A diferencia de Socket Datagrama o Socket Stream, resulta mucho más fácil codificar en RMI. Así, si deseamos hacer una aplicación distribuida, RMI puede representar una excelente opción. Por último, cabe destacar la gran utilidad que tiene el stub dentro de toda esta gestión, ya que nos permite visualizar una aplicación como si la estuviéramos ejecutando localmente cuando en realidad se está ejecutando remotamente.

Referencias
Acervos Digitales UDLAP (2017). Remote Method Invocation. Obtenido de http://catarina.udlap.mx/u_dl_a/tales/documentos/msp/picen_x_pg/capitulo3.pdf
González, A. (2017). Universidad Técnica Féderico Santa María. Obtenido de http://profesores.elo.utfsm.cl/~agv/elo330/2s05/projects/CesarVasquez/sitio_web/que_es.html

UNAM. (2017). Programación Avanzada. Obtenido de Posgrado en Ciencia e Ingeniería de la Computación: http://lya.fciencias.unam.mx/jloa/rmi.pdf

No hay comentarios:

Publicar un comentario