jueves, 8 de abril de 2010

Java RMI en 5 minutos

RMI en 5 minutos

Para este ejemplo estoy usando Ubuntu 9.10 y JDK1.6

Es importante tambien tener definidas la variable de entorno JAVA_HOME

La exposición de los métodos remotos se da por medio de Interfaces, por eso para este ejemplo vamos a seguir el siguiente orden

  1. Creamos una Interface

  2. Implementamos esa interface en una clase

  3. Creamos los Stubs y Skeletons

  4. Creamos un servidor

  5. Creamos un cliente

  6. Habilitamos el registro RMI

  7. Ejecutamos el servidor

  8. Ejecutamos el cliente

Creación de la interface:


Como sabemos en una interface definimos nombre de métodos que serán luego implementados por alguna clase

Esta interface utiliza Remote y RemoteException que se encuentran dentro del paquete java.rmi


import java.rmi.*;

public interface MensajeInterface extends Remote{

public String saludar() throws RemoteException;

}

Implementación de MensajeInterface en la clase Mensaje:

Creamos una clase llamada Mensaje, que tendrá una variable miembro llamada cadena, un constructor que inicializa esta variable e implementamos la función saludar. Además esta clase debe extender la clase UnicastRemoteObject, para que tenga funcionalidad remota.



import java.rmi.*;

import java.rmi.server.*;

public class Mensaje extends UnicastRemoteObject implements MensajeInterface{

private String cadena;

public Mensaje(String cadena) throws RemoteException{

this.cadena=cadena;

}

public String saludar() throws RemoteException{

return "el mensaje ingresado fue:"+cadena;

}

}


Creación de Stubs y Skeletons:

Compilamos las clases anteriores por medio del comando javac. Una vez hecho esto ejecutamos el comando “rmic Mensaje” para la generación de Stubs y Skeletons.


Creación de un Servidor:

Esta clase hace que el Servidor se ejecute y espere alguna conexión remota. Cuando algún cliente se conecte a este servidor recibirá un mensaje.


import java.rmi.Naming;

public class Server{

public static void main(String ... args){

try{

Naming.rebind("Mensaje",new Mensaje("Esta es una prueba de RMI :)"));

System.out.println("El servidor se encuentra listo para su uso");

}catch(Exception ex){

ex.printStackTrace();

}

}

}


Creamos una clase Cliente:

Para mi caso, la clase Mensaje, se encuentra en la dirección 192.168.0.100, por eso usamos Naming lookup, que nos sirve para buscar una clase en una localización remota.

import java.rmi.Naming;

public class Cliente{

public static void main(String ... args){

try{

MensajeInterface mensaje=(MensajeInterface)Naming.lookup("//192.168.0.100/Mensaje");

System.out.println(mensaje.saludar());

}catch(Exception e){

e.printStackTrace();

}

}

}

Compilamos las clases Servidor y Cliente por medio del comando javac.

Registro RMI

Luego desde un terminal habilitamos el registro rmi, por medio del comando rmiregistry & (el caracter & se usa para ejecutar rmiregistry en background).


Ejecución del Servidor


Ejecutamos el servidor por medio de “java Server“ y obtenemos el mensaje:
“El servidor se encuentra listo para su uso”

Ejecución del Cliente
Ejecutamos el cliente por medio de “java Cliente” y obtenemos la salida
“el mensaje ingresado fue:Esta es una prueba de RMI :)”

No hay comentarios:

Publicar un comentario