Aplicación RMI de Java
Para escribir una aplicación RMI Java, deberá seguir los pasos que se indican a continuación:
- Definir la interfaz remota
- Desarrollar la clase de implementación (objeto remoto)
- Desarrollar el programa del servidor
- Desarrollar el programa del cliente
- Compila la aplicación
- Ejecuta la aplicación
Definición de la interfaz remota
Una interfaz remota proporciona la descripción de todos los métodos de un objeto remoto en particular. El cliente se comunica con esta interfaz remota.
Para crear una interfaz remota:
Cree una interfaz que amplíe la interfaz predefinida Remote que pertenece al paquete.
Declare todos los métodos comerciales que el cliente puede invocar en esta interfaz.
Dado que existe la posibilidad de problemas de red durante las llamadas remotas, una excepción denominada RemoteExceptionpuede ocurrir; tírarlo.
A continuación se muestra un ejemplo de una interfaz remota. Aquí hemos definido una interfaz con el nombreHello y tiene un método llamado printMsg().
import java.rmi.Remote;
import java.rmi.RemoteException;
// Creating Remote interface for our application
public interface Hello extends Remote {
void printMsg() throws RemoteException;
}
Desarrollo de la clase de implementación (objeto remoto)
Necesitamos implementar la interfaz remota creada en el paso anterior. (Podemos escribir una clase de implementación por separado o podemos hacer que el programa del servidor implemente esta interfaz directamente).
Para desarrollar una clase de implementación:
- Implemente la interfaz creada en el paso anterior.
- Proporcionar implementación a todos los métodos abstractos de la interfaz remota.
A continuación se muestra una clase de implementación. Aquí, hemos creado una clase llamadaImplExample e implementé la interfaz Hello creado en el paso anterior y proporcionado body para este método que imprime un mensaje.
// Implementing the remote interface
public class ImplExample implements Hello {
// Implementing the interface method
public void printMsg() {
System.out.println("This is an example RMI program");
}
}
Desarrollar el programa de servidor
Un programa de servidor RMI debe implementar la interfaz remota o extender la clase de implementación. Aquí, deberíamos crear un objeto remoto y vincularlo alRMIregistry.
Para desarrollar un programa de servidor:
Cree una clase de cliente desde donde desee invocar el objeto remoto.
Create a remote object instanciando la clase de implementación como se muestra a continuación.
Exportar el objeto remoto usando el método exportObject() de la clase nombrada UnicastRemoteObject que pertenece al paquete java.rmi.server.
Obtenga el registro RMI usando el getRegistry() método del LocateRegistry clase que pertenece al paquete java.rmi.registry.
Vincular el objeto remoto creado al registro usando el bind() método de la clase llamada Registry. Para este método, pase una cadena que represente el nombre de enlace y el objeto exportado, como parámetros.
A continuación se muestra un ejemplo de un programa de servidor RMI.
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class Server extends ImplExample {
public Server() {}
public static void main(String args[]) {
try {
// Instantiating the implementation class
ImplExample obj = new ImplExample();
// Exporting the object of implementation class
// (here we are exporting the remote object to the stub)
Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0);
// Binding the remote object (stub) in the registry
Registry registry = LocateRegistry.getRegistry();
registry.bind("Hello", stub);
System.err.println("Server ready");
} catch (Exception e) {
System.err.println("Server exception: " + e.toString());
e.printStackTrace();
}
}
}
Desarrollar el programa del cliente
Escriba un programa cliente en él, recupere el objeto remoto e invoque el método requerido usando este objeto.
Para desarrollar un programa de cliente:
Crea una clase de cliente desde donde pretendes invocar el objeto remoto.
Obtenga el registro RMI usando el getRegistry() método del LocateRegistry clase que pertenece al paquete java.rmi.registry.
Obtener el objeto del registro usando el método lookup() de la clase Registry que pertenece al paquete java.rmi.registry.
Para este método, debe pasar un valor de cadena que represente el nombre de enlace como parámetro. Esto le devolverá el objeto remoto.
El lookup () devuelve un objeto de tipo remoto, lo convierte al tipo Hello.
Finalmente, invoque el método requerido utilizando el objeto remoto obtenido.
A continuación se muestra un ejemplo de un programa de cliente RMI.
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Client {
private Client() {}
public static void main(String[] args) {
try {
// Getting the registry
Registry registry = LocateRegistry.getRegistry(null);
// Looking up the registry for the remote object
Hello stub = (Hello) registry.lookup("Hello");
// Calling the remote method using the obtained object
stub.printMsg();
// System.out.println("Remote method invoked");
} catch (Exception e) {
System.err.println("Client exception: " + e.toString());
e.printStackTrace();
}
}
}
Compilar la aplicación
Para compilar la aplicación:
- Compile la interfaz remota.
- Compile la clase de implementación.
- Compile el programa del servidor.
- Compile el programa cliente.
O,
Abra la carpeta donde ha almacenado todos los programas y compile todos los archivos Java como se muestra a continuación.
Javac *.java
Ejecución de la aplicación
Step 1 - Inicie el rmi registro usando el siguiente comando.
start rmiregistry
Esto iniciará un rmi registro en una ventana separada como se muestra a continuación.
Step 2 - Ejecute el archivo de clase del servidor como se muestra a continuación.
Java Server
Step 3 - Ejecute el archivo de clase de cliente como se muestra a continuación.
java Client
Verification - Tan pronto como inicie el cliente, verá el siguiente resultado en el servidor.