Cómo ejecutar la aplicación Java RMI

Prerrequisito: RMI

RMI (invocación de método remoto) se utiliza para el sistema de referencias de objetos distribuidos. Un objeto distribuido es un objeto que publica su interfaz en otras máquinas. Un objeto remoto es un objeto distribuido cuyo estado está encapsulado. Stub y Skeleton son dos objetos que se utilizan para comunicarse con el objeto remoto.

Stub: Stub es una puerta de enlace para el programa cliente que se utiliza para comunicarse con el objeto esqueleto, estableciendo una conexión entre ellos.

Esqueleto: Reside en el programa del servidor que se utiliza para pasar la solicitud del stub a la interfaz remota.

Cómo se lleva a cabo la comunicación y el proceso en RMI:

Pasos para ejecutar la aplicación Java RMI en la consola

  1. Creación de clases e interfaces para el planteamiento del problema : Los pasos involucrados en esto son los siguientes:
    • Cree una interfaz remota que amplíe java.rmi.Remote :

      Una interfaz remota determina el objeto que el cliente puede invocar de forma remota. Esta interfaz se puede comunicar con el programa del cliente. Esta interfaz debe extender la interfaz java.rmi.Remote .

      Declaración del problema: crear una aplicación RMI para encontrar el factorial de un número

      Programa de interfaz

      import java.math.BigInteger;
        
      // Creating an Interface
      public interface Factorial
          extends java.rmi.Remote {
        
          // Declaring the method
          public BigInteger fact(int num)
              throws java.rmi.RemoteException;
      }
    • Cree una clase que amplíe java.rmi.server.UnicastRemoteObject e implemente la interfaz anterior.

      Esta clase implementará la interfaz remota. Haz el cálculo requerido para el enunciado del problema.

      Implementación de Interfaz

      import java.math.BigInteger;
        
      // Extends and Implement the class
      // and interface respectively
      public class FactorialImpl
          extends java.rmi.server.UnicastRemoteObject
          implements Factorial {
        
          // Constructor Declaration
          public FactorialImpl()
              throws java.rmi.RemoteException
          {
              super();
          }
        
          // Calculation for the problem statement
          // Implementing the method fact()
          // to find factorial of a number
          public BigInteger fact(int num)
              throws java.rmi.RemoteException
          {
              BigInteger factorial = BigInteger.ONE;
        
              for (int i = 1; i <= num; ++i) {
                  factorial = factorial
                                  .multiply(
                                      BigInteger
                                          .valueOf(i));
              }
              return factorial;
          }
      }
    • Crear una clase de servidor (con localhost y nombre de servicio)

      Para alojar un servicio, se crea el programa del servidor mediante el cual se puede llamar al método java.rmi.Naming.rebind() que toma dos argumentos, es decir, una referencia de objeto (nombre de servicio) y una referencia de instancias.

      programa servidor

      import java.rmi.Naming;
        
      public class FactorialServer {
        
          // Implement the constructor of the class
          public FactorialServer()
          {
              try {
                  // Create a object reference for the interface
                  Factorial c = new FactorialImpl();
        
                  // Bind the localhost with the service
                  Naming.rebind("rmi:// localhost/FactorialService", c);
              }
              catch (Exception e) {
                  // If any error occur
                  System.out.println("ERR: " + e);
              }
          }
        
          public static void main(String[] args)
          {
              // Create an object
              new FactorialServer();
          }
      }
    • Crear una clase de cliente (con localhost y nombre de servicio)

      El programa del cliente invocará el método java.rmi.Naming.lookup() para la URL de RMI y devolverá una instancia de tipo de objeto (interfaz factorial). Todo el RMI se realiza en este objeto.

      programa cliente

      import java.net.MalformedURLException;
      import java.rmi.Naming;
      import java.rmi.NotBoundException;
      import java.rmi.RemoteException;
        
      public class FactorialClient {
          public static void main(String[] args)
          {
        
              try {
                  // Create an remote object with the same name
                  // Cast the lookup result to the interface
                  Factorial c = (Factorial);
                  Naming.lookup("rmi:// localhost/FactorialService");
        
                  // Call the method for the results
                  System.out.println(c.fact(30));
              }
        
              // If any error occur
              catch (MalformedURLException murle) {
                  System.out.println("\nMalformedURLException: "
                                     + murle);
              }
        
              catch (RemoteException re) {
                  System.out.println("\nRemoteException: "
                                     + re);
              }
        
              catch (NotBoundException nbe) {
                  System.out.println("\nNotBoundException: "
                                     + nbe);
              }
        
              catch (java.lang.ArithmeticException ae) {
                  System.out.println("\nArithmeticException: " + ae);
              }
          }
      }
  2. Compilación de todo el programa.

    Use javac para compilar los cuatro programas y rmic (compilador RMI) para crear archivos de clase stub y skeleton.

  3. Ejecutando el sistema:

    Después de la fase de compilación, el sistema ya está listo para ejecutarse. Para ejecutar el sistema, abra tres pantallas de consola (muévase a esa ruta donde reside el programa). Uno para el cliente, uno para el servidor y otro para el Registro RMI.

    • Comience con un registro, use rmiregistry, si no hay ningún error, el registro comenzará a ejecutarse y ahora pasará a la segunda pantalla.

    • En la segunda consola ejecuta el programa servidor y aloja el FactorialService. Se iniciará y esperará la conexión del cliente y cargará la implementación en la memoria.

    • En la tercera consola, ejecute el programa cliente.

De esta forma, RMI se puede ejecutar en tres consolas para localhost. RMI utiliza la pila de red y la pila TCP/IP para la comunicación de tres JVM diferentes.

Publicación traducida automáticamente

Artículo escrito por bilal-hungund y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *