viernes, 22 de abril de 2016

Sencillo ejemplo de JAVA RMI

Hola a todos. El día de hoy he estado trabajando en la creación de un sencillo proyecto JAVA RMI (el famoso hola mundo). Para los que no saben que es JAVA RMI les comentó así brevemente que es una solución diseñada por JAVA para la creación de aplicaciones distribuidas con el objetivo de invocar de forma remota código que ha sido programado en el lado del servidor pero que se quiere que se ejecute desde el cliente; para ello se pensó en la posibilidad de crear objetos remotos y que esos objetos a su vez tuviesen métodos remotos; los métodos remotos ofrecen su funcionalidad mediante la invocación remota que se tendrá que realizar desde el lado del cliente. Lo más bonito de todo ello es que el código es bastante reducido y no se programan muchos aspectos referentes a la red (IP, nombre, etc.)

La arquitectura que propongo para el ejercicio es la siguiente; tres proyectos creados en Eclipse:

Lado común (common); es utilizado tanto en el servidor como en el cliente
  • IServidor - Es la interfaz que contendrá todos los métodos remotos

Lado del servidor
  • MainServidor - Es la clase que contiene el main del servidor y exporta los objetos remotos para que puedan ser utilizados por los clientes
  • ServidorImpl - Es la clase que implementa la interfaz IServidor y que contiene el código de lo que hacen los métodos remotos

Lado cliente
  • MainCLiente - Es la clase que contiene el main del cliente y que utiliza los objetos remotos proporcionados por el servidor

Para hacer esto se requiere tener instalado Eclipse, JAVA JDK y entender un poco la forma de trabajar con un lenguaje de programación orientado a objetos, específicamente JAVA.

Los códigos de cada una de las clases e interfaces descritas anteriormente son los siguientes:

Primero se debe empezar creando la interfaz que servirá para definir los métodos que serán utilizados como remotos. Esta interfaz debe estar ubicada en el proyecto common, dentro del archivo IServidor.java.

Luego se debe codificar una clase que implemente dicha interfaz y que a su vez codifique el cuerpo de los métodos remotos incluyéndose ahí la funcionalidad que se quiera obtener. En nuestro caso devolver el famoso "Hola mundo" desde un método remoto denominado "devolverMensaje()". Esta clase debe estar ubicada en el proyecto servidor, dentro del archivo ServidorImpl.java.

Ahora restaría programar la parte correspondiente al servidor en donde se debe exportar el objeto remoto a través de un ID de tipo cadena de caracteres. Para nuestro caso el objeto remoto a exportar es de tipo IServidor y su ID es "remoteServidor". Esta clase debe estar ubicada en el proyecto servidor, dentro del archivo MainServidor.java.

Para verificar que todo lo que se ha codificado hasta este punto este correcto; se deberá hacer lo siguiente:

En el proyecto del servidor
Clic derecho New → File
Poner en File name:
security.policy
Escribir dentro de ese archivo lo siguiente:
grant
{
permission java.security.AllPermission;
};


Luego hay que decirle al servidor que al compilar debe usar el proyecto common para ello se debe hacer lo siguiente:
Clic derecho en el archivo MainServidor.java
  Seleccionar Build Path
    Luego dirigirse a Configure Build Path...
      Java Build Path
        Projects
  Add...
    En Select project to add: marcar el que dice common
      Clic en OK


Ahora hay que configurar unas variables de entorno para la JAVA Virtual Machine para que el proceso de ejecución no de problemas:
Editar el archivo MainServidor.java
  Ir a: Run -> Run configurations...
    Seleccionar MainServidor
      Luego dirigirse a Arguments
Luego escibir en VM arguments:
  -Djava.security.policy=file:${workspace_loc}/servidor/security.policy
  -Djava.rmi.server.codebase=file:${workspace_loc}/common/bin/
Clic a Apply
      Clic a Close

Por último antes de ejecutar el servidor es obligatorio ejecutar el servicio de rmiregistry. Para ello desde el terminal se debe ejecutar lo siguiente:

Ahora si estamos listos para ejecutar el servidor. Para ello nos dirigimos al código dentro del archivo MainServidor.java y damos clic derecho Run As → Java Application

Al ejecutar el servidor debería salir algo como lo siguiente:

Dejemos el servidor ejecutándose y pasemos a codificar el código del cliente. Aquí se debe hacer uso del objeto remoto (referido a partir del ID "remoteServidor") e invocar al método remoto "devolverMensaje()" proporcionado por dicho objeto.

Probemos finalmente la ejecución del cliente y su respectiva invocación hacia el método remoto. Para ello nos dirigimos al código dentro del archivo MainCLiente.java y damos clic derecho Run As → Java Application

Al ejecutar el cliente debería salir algo como lo siguiente:

Espero que este pequeño ejemplo de como usar JAVA RMI les sea de utilidad para introducirse en este mundo ahora solo resta cambiar, mejorar, ampliar las funcionalidades ofrecidas por los métodos remotos y adaptarlas a una implementación en concreto.

Por acá les dejo el link con el código de los tres proyectos aquí descritos.

Algunas referencias que pueden ser de utilidad son las siguientes:

No hay comentarios.:

Publicar un comentario