RMI significa Invocación de método remoto. Es un mecanismo que permite a un objeto que reside en un sistema (JVM) acceder/invocar a un objeto que se ejecuta en otra JVM.
RMI se utiliza para crear aplicaciones distribuidas; proporciona comunicación remota entre programas Java. Se proporciona en el paquete java.rmi.
Arquitectura de una aplicación RMI
En una aplicación RMI, escribimos dos programas, un programa servidor (reside en el servidor) y un programa cliente (reside en el cliente).
-
Dentro del programa servidor, se crea un objeto remoto y la referencia de ese objeto se pone a disposición del cliente (utilizando el registro).
-
El programa cliente solicita los objetos remotos en el servidor e intenta invocar sus métodos.
El siguiente diagrama muestra la arquitectura de una aplicación RMI.
Ahora hablemos de los componentes de esta arquitectura.
-
Capa de transporte: Esta capa conecta el cliente y el servidor. Gestiona la conexión existente y también configura nuevas conexiones.
-
Stub – Un stub es una representación (proxy) del objeto remoto en el cliente. Reside en el sistema cliente; actúa como puerta de enlace para el programa cliente.
-
Esqueleto − Este es el objeto que reside en el lado del servidor. el stub se comunica con este esqueleto para pasar la solicitud al objeto remoto.
-
RRL (Capa de referencia remota): Es la capa que administra las referencias hechas por el cliente al objeto remoto.
Funcionamiento de una aplicación RMI
Los siguientes puntos resumen cómo funciona una aplicación RMI−
-
Cuando el cliente hace una llamada al objeto remoto, es recibido por el stub que finalmente pasa esta solicitud a la RRL.
-
Cuando la RRL del lado del cliente recibe la solicitud, invoca un método llamado invoke () del objeto remoteRef. Pasa la solicitud a la RRL en el lado del servidor.
-
El RRL en el lado del servidor pasa la solicitud al Esqueleto (proxy en el servidor) que finalmente invoca el objeto requerido en el servidor.
-
El resultado se transmite de vuelta al cliente.
Marshalling y Unmarshalling
Cada vez que un cliente invoca un método que acepta parámetros en un objeto remoto, los parámetros se agrupan en un mensaje antes de enviarse a través de la red. Estos parámetros pueden ser de tipo primitivo u objetos. En caso de tipo primitivo, los parámetros se juntan y se adjunta un encabezado. En caso de que los parámetros sean objetos, se serializarán. Este proceso se conoce como marshalling.
En el lado del servidor, los parámetros empaquetados se desagregan y luego se invoca el método requerido. Este proceso se conoce como unmarshalling.
Registro RMI
El registro RMI es un espacio de nombres en el que se colocan todos los objetos del servidor. Cada vez que el servidor crea un objeto, lo registra con el RMIregistry (usando los métodos bind() o reBind ()). Estos se registran utilizando un nombre único conocido como nombre de enlace.
Para invocar un objeto remoto, el cliente necesita una referencia de ese objeto. En ese momento, el cliente obtiene el objeto del registro usando su nombre de enlace (usando el método lookup ()).
La siguiente ilustración explica todo el proceso:
Objetivos de RMI
Los siguientes son los objetivos de RMI−
- Para minimizar la complejidad de la aplicación.
- Para preservar la seguridad del tipo.
- Recolección de basura distribuida.
- Minimice la diferencia entre trabajar con objetos locales y remotos.