RMI (Remote Method invocation)

RMI (Remote Method invocation) es una API que proporciona un mecanismo para crear aplicaciones distribuidas en java. El RMI permite que un objeto invoque métodos en un objeto que se ejecuta en otra JVM.

El RMI proporciona comunicación remota entre las aplicaciones mediante dos objetos stub y skeleton.

Comprender el stub y el esqueleto

RMI utiliza el stub y el objeto esqueleto para comunicarse con el objeto remoto.

Un objeto remoto es un objeto cuyo método se puede invocar desde otra JVM. Entendamos los objetos stub y esqueleto:

stub

El stub es un objeto, actúa como una puerta de enlace para el lado del cliente. Todas las solicitudes salientes se enrutan a través de él. Reside en el lado del cliente y representa el objeto remoto. Cuando el llamador invoca el método en el objeto stub, realiza las siguientes tareas:

  1. Inicia una conexión con una Máquina Virtual remota (JVM),
  2. Escribe y transmite (marshals) los parámetros a la Máquina Virtual remota (JVM),
  3. Espera el resultado
  4. Lee (desmarca) el valor de retorno o excepción, y
  5. Finalmente, devuelve el valor valor para la persona que llama.

esqueleto

El esqueleto es un objeto, actúa como una puerta de enlace para el objeto del lado del servidor. Todas las solicitudes entrantes se enrutan a través de él. Cuando el esqueleto recibe la solicitud entrante, realiza las siguientes tareas:

  1. Lee el parámetro para el método remoto
  2. Invoca el método en el objeto remoto real, y
  3. Escribe y transmite (marshals) el resultado al llamante.

En el SDK de Java 2, se introdujo un protocolo stub que elimina la necesidad de esqueletos. stub y esqueleto en RMI

Descripción de los requisitos para las aplicaciones distribuidas

Si alguna aplicación realiza estas tareas, puede ser aplicación distribuida.

.

  1. La aplicación necesita localizar el método remoto
  2. Necesita proporcionar la comunicación con los objetos remotos, y
  3. La aplicación necesita cargar las definiciones de clase para los objetos.

La aplicación RMI tiene todas estas características, por lo que se llama aplicación distribuida.

Ejemplo de Java RMI

Se dan los 6 pasos para escribir el programa RMI.

  1. Crear la interfaz remota
  2. Proporcionar la implementación de la interfaz remota
  3. Compilar la clase de implementación y crear los objetos stub y esqueleto utilizando la herramienta rmic
  4. Iniciar el servicio de registro mediante la herramienta rmiregistry
  5. Crear e iniciar la aplicación remota
  6. aplicación cliente

Ejemplo de RMI

En este ejemplo, hemos seguido los 6 pasos para crear y ejecutar la aplicación de rmi. La aplicación cliente solo necesita dos archivos, interfaz remota y aplicación cliente. En la aplicación rmi, tanto el cliente como el servidor interactúan con la interfaz remota. La aplicación cliente invoca métodos en el objeto proxy, RMI envía la solicitud a la JVM remota. El valor devuelto se devuelve al objeto proxy y, a continuación, a la aplicación cliente.

 Ejemplo de RMI

1) cree la interfaz remota

Para crear la interfaz remota, extienda la interfaz remota y declare la excepción remota con todos los métodos de la interfaz remota. Aquí, estamos creando una interfaz remota que amplía la interfaz remota. Solo hay un método llamado add() y declara RemoteException.

2) Proporcionar la implementación de la interfaz remota

Ahora proporcionar la implementación de la interfaz remota. Para proporcionar la implementación de la interfaz remota, necesitamos

  • Extender la clase UnicastRemoteObject,
  • o usar el método exportObject () de la clase UnicastRemoteObject

En caso de que extienda la clase UnicastRemoteObject, debe definir un constructor que declare RemoteException.

3) cree los objetos stub y esqueleto utilizando la herramienta rmic.

El siguiente paso es crear objetos stub y esqueleto utilizando el compilador rmi. La herramienta rmic invoca el compilador de RMI y crea objetos stub y esqueleto.

4)Inicie el servicio de registro con la herramienta rmiregistry

Ahora inicie el servicio de registro con la herramienta rmiregistry. Si no especifica el número de puerto, utiliza un número de puerto predeterminado. En este ejemplo, estamos utilizando el número de puerto 5000.

5) Cree y ejecute la aplicación de servidor

Ahora los servicios rmi deben hospedarse en un proceso de servidor. La clase Naming proporciona métodos para obtener y almacenar el objeto remoto. La clase de nomenclatura proporciona 5 métodos.

java estático público.rmi.Búsqueda remota(java.lang.String) lanza java.rmi.NotBoundException, java. net. MalformedURLException, java.rmi.RemoteException; Devuelve la referencia del objeto remoto.
enlace vacío estático público (java.lang.String, java.rmi.Remoto) lanza java.rmi.Ya hay una excepción de límite, java.net.Excepción malformada, java.rmi.Excepción remota; Enlaza el objeto remoto con el nombre dado.
desvinculación del vacío estático público (java.lang.String) lanza java.rmi.Excepción remota, java.rmi.NotBoundException, java.net.MalformedURLException; destruye el objeto remoto que está enlazado con el nombre dado.
rebind de vacío estático público (java.lang.String, java.rmi.Remoto) lanza java.rmi.RemoteException, java. net. MalformedURLException; Enlaza el objeto remoto con el nuevo nombre.
java estático público.lang.Lista de cadenas (java.lang.String) lanza java.rmi.RemoteException, java.net.MalformedURLException; devuelve un array con los nombres de los objetos remotos atado en el registro.

En este ejemplo, vinculamos el objeto remoto con el nombre sonoo.

6) Crear y ejecutar la aplicación cliente

En el cliente, obtenemos el objeto stub mediante el método lookup() de la clase Naming e invocamos el método en este objeto. En este ejemplo, estamos ejecutando las aplicaciones de servidor y cliente, en la misma máquina, por lo que estamos usando localhost. Si desea acceder al objeto remoto desde otra máquina, cambie el host local al nombre de host (o dirección IP) donde se encuentra el objeto remoto.

Salida de este ejemplo de RMI

 RMI RMI

Ejemplo significativo de aplicación de RMI con base de datos

Considere un escenario, hay dos aplicaciones que se ejecutan en máquinas diferentes. Digamos que MachineA y Máquinab, machineA se encuentra en Estados unidos y Máquinab en la India. Máquinab desea obtener la lista de todos los clientes de MachineA aplicación.

Desarrollemos la aplicación RMI siguiendo los pasos.

1) Crear la tabla

En primer lugar, necesitamos crear la tabla en la base de datos. Aquí, estamos utilizando la base de datos Oracle10.

 Aplicación RMI con base de datos

2) Crear clase de cliente e interfaz remota

Archivo: Cliente.java

Nota: La clase Cliente debe ser serializable.

Archivo: Banco.java

3) Cree la clase que proporciona la implementación de Interfaz remota

File: BankImpl.java

4) Compilar la herramienta de clase rmic e iniciar el servicio de registro mediante la herramienta rmiregistry

Ejemplo de RMI con base de datos

5) Crear y ejecutar el servidor

File: MyServer.java ejemplo de invocación de método remoto

6) Cree y ejecute el archivo Cliente

: MyClient.java ejemplo del mundo real de rmi