INFORME JAVA RMI
YISEL DEL CARMEN SAEZ CASTRO
UNIVERSIDAD COOPERATIVA DE COLOMBIA
SISTEMAS DISTRIBUIDOS
1. INTRODUCCION
El siguiente informe permitirá establecer el funcionamiento del paquete RMI de Java, los
componentes que emplea y su arquitectura. El RMI facilita utilizar los recursos de un
servidor, este mismo se comunica con un cliente.
La programación orientada a objetos se adapta de manera natural a la programación de
aplicaciones distribuidas. En la programación orientada a objetos, tareas parciales de un
problema pueden ser modeladas como entidades, que llamaremos objetos, que se
comunican entre ellos durante su ejecución. En consecuencia, el uso de programación
orientada a objetos resulta una evolución natural en el desarrollo de aplicaciones
distribuidas; de forma que tareas parciales, que ahora estarán ubicadas en distintas
máquinas, son modeladas como objetos que intercambian mensajes a través de la red.
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.
2. OBJETIVO
Entender la arquitectura y funcionamiento de Java RMI.
3. DESARROLLO
RMI (Java Remote Method Invocation), es el paquete de Java encargado de invocar un
método de forma remota, se caracteriza por ser un mecanismo estándar, realizando una
comunicación entre aplicaciones distribuidas. Es un ejemplo de un sistema de objetos
distribuidos [1].
Considérese una aplicación RMI donde un objeto servidor debe notificar a los procesos
participantes la ocurrencia de algún evento. Como ejemplos, en un chat, cuando un nuevo
participante entra, se avisa al resto de los participantes de este hecho; en un sistema de
subastas en tiempo real, cuando empiezan las ofertas, se debe avisar a los procesos
participantes. Esta característica también es útil en un juego en red cuando se informa a
los jugadores de la actualización del estado del juego.
Figura 1. Java RMI
Típicamente, una aplicación RMI está compuesta de un cliente y un servidor. El servidor
se encarga de crear los objetos remotos, hacerlos accesibles y permanecer a la espera de
llamadas para esos objetos remotos. El cliente debe conseguir referencias para esos
objetos remotos y, en ese momento, puede hacer uso de ellas para realizar llamadas
remotas. Las aplicaciones con objetos distribuidos necesitan:
Localizar los objetos remotos: para ello pueden hacer uso de la utilidad de
búsqueda por nombres propia de RMI, rmiregistry.
Comunicar con los objetos remotos: los detalles de la comunicación entre objetos
remotos quedan a cargo de RMI. Para el programador, la invocación remota de
métodos es como la estándar.
Cargar el código de las clases para los objetos remotos: RMI permite no sólo el
paso de objetos completos hacia y desde los procesos remotos sino, además, la
descarga de las clases que implementan dichos objetos desde ubicaciones remotas.
La comunicación entre clientes y servidores no es directa, siempre media entre ambos
unos elementos suplentes que se conocen como stub y skeleton.
El stub actúa como un proxy local de un objeto remoto. Debe implementar las mismas
interfaces remotas que implementa el objeto al que representa.
Cuando un objeto local llama a un método de la interfaz remota de un objeto, esta llamada
se realiza en realidad sobre los métodos del stub local, desde donde se transmite hasta el
objeto remoto. Por lo tanto, no hay comunicación directa entre objetos locales y remotos,
sino que se realiza a través de los elementos suplentes. El stub se encarga de realizar la
conexión con la máquina virtual remota, enviar los argumentos para el método
especificado, esperar la respuesta y pasársela al objeto local. El skeleton es la
contrapartida del stub, es decir, actúa como proxy del objeto remoto en el lado servidor.
Se encarga de recibir las peticiones dirigidas al objeto servidor y devolver los resultados
a quien hizo la petición. En las versiones actuales del JDK (Java Development Kit) no es
necesaria la utilización de los elementos skeleton [2].
La invocación se compone de los siguientes pasos:
Encapsulado (marshalling) de los parámetros (utilizando la funcionalidad de
serialización de Java).
Invocación del método (del cliente sobre el servidor). El invocador se queda
esperando una respuesta.
Al terminar la ejecución, el servidor serializa el valor de retorno (si lo hay) y lo
envía al cliente.
El código cliente recibe la respuesta y continúa como si la invocación hubiera sido
local.
Arquitectura de Java RMI
La arquitectura RMI puede verse como un modelo de cuatro capas.
Figura 2. Arquitectura de Java RMI
Primera capa
La primera capa es la de aplicación y se corresponde con la implementación real de las
aplicaciones cliente y servidor
Segunda capa
La segunda capa 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.
Tercera capa
La tercera capa 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.
Cuarta Capa
La cuarta capa 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 [3].
4. CONCLUSIONES
A manera de conclusión, desde mi punto de vista y según lo comprendido a partir de la
investigación realizada a Java RMI, puedo concluir que:
RMI es un paquete de Java el cual emplea la programación orientada a objetos y que
permite la invocación de métodos remotos en sistemas distribuidos, es decir, es un
middleware para que un objeto que se ejecuta en otro lugar use métodos de otro objeto
que se ejecuta en otro lugar, para así, utilizar recursos de un servidor para el cliente.
5. REFERENCIAS
[1] «Informe 4 Funcionamiento de RMI - Sistemas Distribuidos», StuDocu. [En línea].
Disponible en: [Link]
americas/sistemas-distribuidos/informe/informe-4-funcionamiento-de-
rmi/5175888/view. [Accedido: 12-oct-2019].
[2] «3. API RMI». [En línea]. Disponible en:
[Link]
[Accedido: 12-oct-2019].
[3] «Java Remote Method Invocation», Wikipedia, la enciclopedia libre. 07-ago-2019.