RMI

RMI

Introducción:

Dentro de la programación existen varios tipos de métodos, pero con características diferentes para cada uno y su funcionamiento varia de igual forma, en la computación distribuida se puede apreciar un método como el RMI.

Desarrollo:

Es un mecanismo que permite realizar llamadas a métodos de objetos remotos situados en distintas (o la misma) máquinas virtuales de Java, compartiendo así recursos y carga de procesamiento a través de varios sistemas.

En las aplicaciones RMI podemos distinguir entre programas clientes y servidores:

  • El programa servidor es el encargado de crear objetos remotos, poner accesibles mediante RMI referencias a ellos para que los programas clientes puedan acceder a sus métodos.
  • El programa cliente obtiene referencias de objetos remotos que el servidor ha puesto disponibles y puede invocar sus métodos Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 19 el servidor ha puesto disponibles y puede invocar sus métodos.
  • Además el cliente puede pasar los bytecodes de clases que necesite el servidor porque se le hayan pasado como parámetro. RMI es la herramienta que soporta todo esto.
  • Para todo ello se usa JAVA.


La arquitectura RMI puede verse como un modelo de cuatro capas:

La primera capa: es la de aplicación y se corresponde con la implementación real de las aplicaciones cliente y servidor. Aquí tienen lugar las llamadas a alto nivel para acceder y exportar objetos remotos. Cualquier aplicación que quiera que sus métodos estén disponibles para su acceso por clientes remotos debe declarar dichos métodos en una interfaz que extienda java.rmi.Remote. Dicha interfaz se usa básicamente para “marcar” un objeto como remotamente accesible. Una vez que los métodos han sido implementados, el objeto debe ser exportado. Esto puede hacerse de forma implícita si el objeto extiende la clase UnicastRemoteObject (paquete java.rmi.server), o puede hacerse de forma explícita con una llamada al método exportObject() del mismo paquete.

La capa 2: es la capa proxy, o capa stub-skeleton. Esta capa es la que interactúa directamente con la capa de aplicación. Todas las llamadas a objetos remotos y acciones junto con sus parámetros y retorno de objetos tienen lugar en esta capa.

La capa 3: es la de referencia remota, y es responsable del manejo de la parte semántica de las invocaciones remotas. También es responsable de la gestión de la replicación de objetos y realización de tareas específicas de la implementación con los objetos remotos, como el establecimiento de las persistencias semánticas y estrategias adecuadas para la recuperación de conexiones perdidas. En esta capa se espera una conexión de tipo stream (stream-oriented connection) desde la capa de transporte.

La capa 4: es la de transporte. Es la responsable de realizar las conexiones necesarias y manejo del transporte de los datos de una máquina a otra. El protocolo de transporte subyacente para RMI es JRMP (Java Remote Method Protocol), que solamente es “comprendido” por programas Java.





La capa de transporte de RMI intenta abrir sockets directamente a puertos de los servidores a los que se desea conectar, pero en el caso de que los clientes se encuentren detrás de algún firewall que no permita este tipo de conexiones, la capa de transporte estándar de RMI proporciona un mecanismo alterno basado en el protocolo HTTP (confiable para el firewall), para permitir a los clientes que se encuentran detrás del firewall, invocar métodos de objetos que se encuentren del otro lado de él.

Para atravesar el firewall, la capa de transporte de RMI incluye la llamada remota dentro del protocolo HTTP, como el cuerpo de una solicitud POST, mientras que los valores de retorno se reciben en el cuerpo de la respuesta HTTP. La capa de transporte de RMI puede formular la solicitud POST, de alguna de las dos maneras siguientes:

  • Si el proxy firewall permite entregar una solicitud HTTP directamente sobre cualquier puerto de la máquina destino, la solicitud se dirige directamente al puerto donde el servidor RMI se encuentra escuchando. La capa de transporte RMI en la máquina destino escucha con un socket que es capaz de entender y decodificar llamadas RMI, que se encuentren dentro de una solicitud POST.
  • Si el proxy firewall sólo entrega solicitudes HTTP a ciertos puertos HTTP bien conocidos, la llamada se envía a un servidor HTTP que se encuentre escuchando en el puerto 80, donde se puede ejecutar un guión (script) CGI que se encargue de enviar la llamada RMI al puerto específico del servidor.


Características

.:.Concurrencia
Para cada cliente que trate de acceder a un objeto remoto, el servidor creará un nuevo hilo que se encargará de darle servicio.

.:.Nombrado de objetos
Utiliza la notación URL. Por Ejemplo: rmi://localhost:8080/miObjeto

.:.Paso de parámetros
La Serialización se encarga de informar al compilador y al entorno de ejecución de Java que deberá pasar por valor copias de los objetos de este tipo desde la JVM local a la JVM remota.

Conclusiones:

Este es un método que te puede ayudar a tu desarrollo de las aplicaciones que tengas pendientes, el apoyo que se requiere con los hilos va de la mano y ayuda para el buen funcionamiento del programa.

Referencias:

Henry Tenorio (2008) Aplicaciones Distribuidas con Java Remote Method Invocation
Recuperado el 25/11/17, de
http://asteriscus.com/presentacion/RMI%20-%20Henry%20Tenorio.pdf

Rolando Menchaca Méndez, Félix García Carballeira (2001) Java RMI
Recuperado el 25/11/17, de
http://www.revista.unam.mx/vol.2/num1/art3/

Pedro J. Muñoz Merino (2008) Servicios Web y RMI
Recuperado el 25/11/17, de
http://www.it.uc3m.es/pedmume/DAT/ficheros/08_RMI_ServiciosWeb.pdf

Enrique Medina Montenegro (2003) PROGRAMACIÓN DISTRIBUIDA CON RMI
Recuperado el 25/11/17, de
https://www.adictosaltrabajo.com/tutoriales/rmi/


Comentarios