RMI (Invocación de método remoto) es una API utilizada para acceder a objetos que se ejecutan en otro lado de JVMServer. Se utiliza principalmente para la creación de sistemas distribuidos y se proporciona en Java Rome. Stub y Skeleton son los dos objetos utilizados para manejar la comunicación entre el cliente y el servidor. La siguiente figura muestra una descripción general de RMI.
Aquí,
- Objeto stub: El objeto stub en la máquina cliente construye un bloque de información y envía esta información al servidor.
- Objeto esqueleto: el objeto esqueleto pasa la solicitud del objeto stub al objeto remoto. RMI contiene un rmiregistry que contiene todos los objetos del servidor. El servidor vincula todos los objetos al registro y luego el cliente obtiene el objeto del registro respectivo, después de lo cual el cliente invoca los métodos utilizando los objetos obtenidos.
Pasos para crear Calculadora usando RMI
Paso 1: crear la interfaz remota
Primero, crearemos 4 interfaces (suma, resta, multiplicación, división). Estas interfaces son útiles para la operación. Para crear interfaces remotas necesitamos extender la interfaz remota
AddI.java
// Creating a AddInterface interface import java.rmi.Remote; public interface AddInterface extends Remote { // Declaring the method prototype public int add(int x, int y) throws RemoteException; }
SubI.java
// Creating a SubInterface interface import java.rmi.Remote; public interface SubInterface extends Remote { // Declaring the method prototype public int sub(int x, int y) throws RemoteException; }
MulI.java
// Creating a MulInterface interface import java.rmi.Remote; public interface MulInterface extends Remote { // Declaring the method prototype public int mul(int x, int y) throws RemoteException; }
DivI.java
// Creating a DivInterface interface import java.rmi.Remote; public interface DivInterface extends Remote { // Declaring the method prototype public int div(int x, int y) throws RemoteException; }
Paso 2: Implementación de la interfaz remota
Ahora es el momento de proporcionar implementación a todas las interfaces . el el el
Impl.java
// Java program to implement the AddInterface, // subInterface, MulInterface, and DivInterface import java.rmi.*; import java.rmi.server.*; public class Impl extends UnicastRemoteObject implements AddInterface, SubInterface, MulInterface, DivInterface { // Default constructor to throw RemoteException // from its parent constructor public Impl() throws Exception { super(); } // Implementation of the AddInterface, // subInterface, MulInterface, and DivInterface public int add(int x, int y) { return x + y; } public int sub(int x, int y) { return x - y; } public int mul(int x, int y) { return x * y; } public int div(int x, int y) { return x / y; } }
Paso 3: Cree y ejecute el programa de aplicación del servidor.
la
Server.java
// Program for server application import java.rmi.*; import java.rmi.registry.*; public class Server { public static void main(String[] args) throws Exception { // Create an object of the interface // implementation class Impl obj = new Impl(); // Binds the remote object by the name ADD Naming.rebind("ADD", obj); System.out.println("Server Started"); } }
Paso 4: Cree y ejecute el programa de aplicación del cliente.
Client.java
// Program for client application import java.rmi.*; import java.util.*; public class Client { public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); while (true) { // User Menu System.out.println( "\n1.Addition\n2.Subtraction\n3.multiplication\n4.division\n5.Exit"); System.out.println("Enter the option:"); int opt = sc.nextInt(); if (opt == 5) { break; } System.out.println( "Enter the the first number:"); int a = sc.nextInt(); System.out.println("Enter the second number:"); int b = sc.nextInt(); int n; switch (opt) { case 1: // lookup method to find reference of remote // object AddInterface obj = (AddInterface)Naming.lookup("ADD"); n = obj.add(a, b); System.out.println("Addition= " + n); break; case 2: SubInterface obj1 = (SubInterface)Naming.lookup("ADD"); n = obj1.sub(a, b); System.out.println("Subtraction= " + n); break; case 3: MulInterface obj2 = (MulInterface)Naming.lookup("ADD"); n = obj2.mul(a, b); System.out.println("Multiplication = " + n); break; case 4: DivInterface obj3 = (DivInterface)Naming.lookup("ADD"); n = obj3.div(a, b); System.out.println("Division = " + n); break; } } } }
Paso 5: Compilar todo el programa Java
Ahora necesitamos compilar todo el programa java. Para compilar todo el programa java necesitamos abrir el símbolo del sistema e ingresar a la carpeta respectiva. Ahora ingrese a la carpeta donde se almacenan todos los archivos. Podemos compilar todos los archivos a la vez usando el siguiente comando;
javac *.java
Paso 6: Crea un stub y un esqueleto
rmic classname
Paso: 7 Inicie el servicio de registro con la herramienta rmiregistry
Ahora inicie el servicio de registro rmi utilizando la herramienta rmiregistry. Necesitamos especificar el número de puerto. Si no especificamos el número de puerto, usa un número de puerto predeterminado, por ejemplo, estamos usando el número de puerto 5259.
rmiregistry 5259 or rmiregistry & or start rmiregistry(windows)
Después de hacer los pasos anteriores correctamente, puede verse así:
Salida: después de seguir con éxito los pasos anteriores, puede ver la siguiente salida o cualquier confusión en los pasos anteriores, puede ver el siguiente video
Publicación traducida automáticamente
Artículo escrito por prathameshnirmale y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA