Está en la página 1de 6

MODELO JAVA RMI

¿Qué es RMI?
RMI es un paquete de JAVA que permite manejar objetos (y sus respectivos métodos) de
manera remota, para utilizar los recursos de un servidor de manera transparente para el
usuario local.

La manera en que RMI (y RPC en general) logra hacer esto, es por medio de lo que se conoce
como STUBs. En el caso del STUB servidor, se conoce como SKELETON. Estos Stubs y
Skeletons permiten que al momento de ser invocada la función remota esta pueda ser
"simulada localmente"

Para la comunicación entre el servidor y el cliente, se trabaja con interfaces, que deben ser
implementadas por el servidor y/o cliente, para que los STUBs puedan realizar la
transparencia para ambos. Además esto evita que deba existir una definición local real de
la clase remota, vale decir, en el cliente solo debe estar definida la interface, no la clase
remota.
Arquitectura
La arquitectura RMI puede verse como un modelo de cuatro capas.

Primera capa
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.

Segunda capa
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.

Tercera 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.
Cuarta Capa
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.

Ventajas del modelo Java RMI


 Es REALMENTE facil de usar si ya se conoce JAVA.
 Portable a traves de plataformas con soporte JAVA.
 Bajo costo al convertir sistema existente.
 Soporta paso de objetos por referencia y/o valor.

Desventajas del modelo Java RMI


 A veces, no es tan intuitivo.
 No soportado por otros lenguajes
 Disminuye el rendimiento con el crecimiento del sistema

Elementos del modelo Java RMI


Toda aplicación RMI normalmente se descompone en 2 partes:

 Un servidor, que crea algunos objetos remotos, crea referencias para hacerlos
accesibles, y espera a que el cliente los invoque.
 Un cliente, que obtiene una referencia a objetos remotos en el servidor, y los invoca.
Ejemplo
CONCLUSIONES
Como conclusión general, se debe tener en cuenta el uso de RMI para aplicaciones tipo
cliente/servidor a mediana escala, en donde los clientes estén muy distribuidos y sea difícil
la diversificación de los códigos o el trabajo en equipo.

La posibilidad de separar el trabajo, encapsulándolo en aplicaciones cliente servidor, en


donde el cliente y el servidor se desligan a tal grado que no deben saber nada sobre el
trabajo del uno y del otro. Esto es sumamente útil en los tiempos actuales en donde las
aplicaciones cliente servidor son cada vez más abundantes y la complejidad de ellas hace
fundamental la separación del código en módulos independientes.

Java RMI esencialmente permite que objetos JAVA distribuidos en distintas máquinas
puedan comunicarse entre sí, enviarse mensajes, ejecutar código remoto, etc. sin que el
programador tenga que preocuparse del proceso de construir paquetes, gestionar
problemas de conexión, controlar errores, etc., intenta simular que el programa está
trabajando siempre con objetos en la máquina local.
Referencias Bibliográficas
[1] http://www.ctr.unican.es/asignaturas/procodis_3_II/Doc/Procodis_7_01.pdf
[2]http://profesores.elo.utfsm.cl/~agv/elo330/2s05/projects/CesarVasquez/sitio_web/co
mparacion02.html
[3] http://www.infor.uva.es/~fdiaz/sd/doc/rmi
[4] https://gist.github.com/ProgDan/1943316
[5] http://www.chuidiang.com/java/rmi/rmi.php
[6] http://laurel.datsi.fi.upm.es/~ssoo/SD.dir/practicas/guiarmi.html