Java RMI
Introducción.
El mecanismo RMI permite que una aplicación se comunique con objetos que se encuentran en programas que se ejecutan en máquinas distintas a la local. En decir, que en lugar de crear un objeto nuevamente, se obtiene el objeto remoto con una herramienta local, denominada como stub, el cual se encarga de servir como mensajero entre el programa local y el objeto remoto. Los mensajes dirigidos al objeto remoto se envían al stub local. El stub acepta los mensajes que se le envíen para después mandarlos al objeto remoto, el cual invoca los métodos solicitados. El resultado de la invocación de los métodos en el objeto remoto se envía de regreso al stub local, que los remite al emisor original de la llamada.
El mecanismo RMI permite que una aplicación se comunique con objetos que se encuentran en programas que se ejecutan en máquinas distintas a la local. En decir, que en lugar de crear un objeto nuevamente, se obtiene el objeto remoto con una herramienta local, denominada como stub, el cual se encarga de servir como mensajero entre el programa local y el objeto remoto. Los mensajes dirigidos al objeto remoto se envían al stub local. El stub acepta los mensajes que se le envíen para después mandarlos al objeto remoto, el cual invoca los métodos solicitados. El resultado de la invocación de los métodos en el objeto remoto se envía de regreso al stub local, que los remite al emisor original de la llamada.
"La invocación remota de métodos de Java es un modelo de objetos distribuidos, en este modelo, un objeto remoto es aquel cuyos métodos pueden ser invocados por objetos que se encuentran en una máquina virtual diferente a la local." (Sosa, 2005)
Este tipo de objetos capaces de utilizarse de manera remota, se describen por una o más interfaces remotas que contienen la definición de los métodos del objeto que es posible invocar remotamente. Aparte de ligar el stub con el objeto remoto, el código escrito para comunicar con el objeto remoto es igual al código que se utilizaría se el objeto se encontrara en una aplicación local. Es por ello que los objetos que vayan a utilizarse de esta forma, deben de ser especificados y programados con las interfaces necesarias si se planea utilizar esta tecnología.
RMI.
El sistema RMI tiene el objetivo de integrar el modelo de objetos distribuidos en el lenguaje Java sin demasiadas complicaciones en el proceso, conservando la sintaxis y la forma de manipular los objetos Java, además hacer lo más simplificadamente posible la escritura de aplicaciones distribuidas y preservar la seguridad proporcionada por el lenguaje Java, por esta misma razón, para la utilización de esta herramienta, es indispensable que, tanto la máquina local como la remota, utilicen el lenguaje Java, ya que de otra forma, la comunicación será imposible.
Este sistema funciona en base a varios componentes, donde los más importantes son los stub's, el servidor y los esqueletos.
Un stub actúa como representante de los objetos remotos ante sus clientes; es el encargado de iniciar la conexión con la máquina virtual que contiene al objeto remota para después empaquetar y transmitir los parámetros de la invocación a la máquina virtual remota, finalmente realiza el mismo proceso pero de manera inversa para la recepción de los valores de retorno. Para realizar el proceso, la aplicación cliente envía un mensaje al stub local del objeto remoto, la petición se transmite a la máquina que contiene al objeto real, donde el método es invocado y cualquier resultado es retornado al stub local, de modo que la aplicación cliente puede obtener la respuesta apropiada.
Para que un cliente localice un objeto servidor RMI necesita un mecanismo de nombramiento denominado "rmiregistry" que se encuentra en la máquina servidora y mantiene la información sobre los objetos servidores (los que van a distribuirse a otros equipos) disponibles, estos objetos estarán disponibles en forma de URL. El servidor tiene el objetivo de registrar un nombre y un lugar de un objeto remoto, además de que le permite a un cliente ligar un stub local que le de acceso al objeto remoto contenido en la aplicación servidor; simplificando, el servidor es el encargado de registrar los objetos que pueden ser accesados remotamente para después ligarlos a un stub local.
Los esqueletos son los responsables de realizar la invocación al objeto remoto, su papel es el de desempaquetar los parámetros necesarios para la ejecución del método remoto, invocar el método de la implantación del objeto remoto y empaquetar los resultados para enviarlos de vuelta al cliente.
Los objetos distribuidos solamente son accesibles a través de una interfaz remota, por lo que en el programa a utilizar, es necesario importar la clase: java.rmi.*, y contemplar la excepción "RemoteException" en cada una de las clases.
En cuanto a la seguridad del mecanismo, el RMI está basado en el protocolo HTTP, con el objetivo de permitir a los clientes invocar métodos de objetos que se encuentren del otro lado de él. Para atravesar la barrera entre los equipos o "firewall", RMI utiliza, para la llamada remota, el cuerpo de una solicitud POST, de tal forma que estos no pueden ser visualizados en el trayecto, mientras que los valores de retorno se reciben en el cuerpo de la respuesta HTTP.
Conclusión.
En resumen, el protocolo de activación del sistema RMI es el siguiente:
- Se construye un objeto remoto
- Se define la interfaz remota
- Se implanta el objeto activable
- Se compila y se ejecuta el código
Para ello, este sistema hace uso de varias herramientas que son fácilmente utilizables por cualquiera con conocimientos de sistemas distribuidos y lenguaje java, ya que su funcionamiento es parecido a otros métodos de comunicación entre redes. Además de que su funcionamiento nos permite realizar programas con una mayor eficiencia y seguridad, ya que de esta forma, el cliente optimiza recursos al no tener que ejecutar una clase adicional, mientras que el programador protege su sistema al no compartir con todos los clientes todas las clases o procesos, y principalmente parámetros, que utiliza para el funcionamiento de su programa. Sin embargo es posible que este recurso sea utilizado para mal al infiltrar un programa que invoque métodos y objetos de una computadora remota para realizar daños en la local, por lo que es necesario aplicar preferiblemente un buen uso de esta herramienta.
Bibliografía.
Oracle. (22 de Febrero de 2002). RMI Client
Application Programming Interface. Obtenido de
http://www.oracle.com/technetwork/java/embedded/javacard/downloads/rmi-client-api-2-2-1-149931.pdf
Sosa, D. V. (12 de Julio de 2005). RMI
Remote Method Invocation. Obtenido de
http://www.tamps.cinvestav.mx/~vjsosa/clases/sd/DAAI_RMI.pdf
UNAM. (8 de Agosto de 2008). Remote Method
Invocation de Java. Obtenido
de http://lya.fciencias.unam.mx/jloa/rmi.pdf
Comentarios
Publicar un comentario