JAVA RMI

The Java Remote Method Invocation

MENU

¿Que es RMI?

Antes de responder esta fundamental pregunta, debemos remontarnos a la base misma de rmi, vale decir, lo que es conocido como Remote Procedure Calling (RPC)

¿Que es RPC?
Una definicón formal de RPC seria:

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


Para que se entienda mejor, el llamado remoto de procesamiento es, procesar de manera remota algun segmento de código (utilizando una CPU, Memoria, Stack, etc, remotos), necesario localmente, sin salir del procesamiento local.

Este tema es bastante mas complicado de lo que parece, ya que hay que tener en cuenta una serie de detalles y problemas, como por ejemplo:
  • 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
  • Distribucion de Hardware: Distinta zona de memoria, stack, clock de la CPU, etc
Estos problemas, obviamente, son aplicables tambien a RMI. Pero volvemos a la pregunta inicial, ¿Que es RMI?

¿Que es RMI?
RMI es un paquete de JAVA que permite manejar objetos (y sus respectivos metodos) 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"

stubs y skeletons


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.

Otro punto importante en RMI, es el como se produce la conectividad entre el cliente y servidor. Para esto se ocupa una herramienta de JAVA, llamada RMI Registry.
El RMI Registry puede estar localizado en un lugar distinto al servidor, y se encarga de registrar un determinado objeto y asignarle un servidor que se encargará de procesar dicho objeto.

El funcionamiento general es:
  1. Se ejecuta el RMI Registry, en algún lugar de la red.
  2. El servidor que desea manejar un objeto, se registra en dicho servidor,
  3. El RMI Registry registra el par: OBJETO/SERVIDOR
  4. El cliente que necesita utilizar un determinado objeto, hace una consulta al RMI Registry, quien devuelve el STUB listo para la comunicación
Esto es, a grandes rasgos, lo mas indispensable que se debe saber a la hora de utilizar RMI. Se puede profundizar mucho mas sobre el tema, en la página oficial de JAVA, en donde se pueden encontrar mas ejemplos sobre el tema, en la API se encuentran todos los metodos y clases del paquete RMI, y en Internet.