Está en la página 1de 30

Repblica Bolivariana de Venezuela Ministerio PP. Educacin Superior Universidad de Margarita El valle, Edo.

Nueva Esparta

RMI (Remote Method Invocation) Mtodo de Invocacin Remota

Integrantes: Diego Garca Milagros Grillo Carlos Loyo Robert Moya Manuel Aguayo

El Valle, 4 de Junio de 2012.

INDICE Introduccin ____________________________________ Desarrollo Java 3-4 5-21

_________________________________________ _____________________________________ 5-9 9-10 10 11-12 12 12-14

Descripcin de RMI ______________________________ Caractersticas RMI _____________________________ _________________________

Arquitectura sistema RMI

Componentes RIM _______________________________ Aplicacin de objetos distribuidos ____________________ Pasos para crear una aplicacin RMI __________________ Ejemplos RMI _________________________________

14-15 15-21 22-25 22-23 23-24 24 24-25 25 26-27 28-30

Conclusiones _________________________________ Diego Garca _____________________________ Milagros Grillo _______________________________ Carlos Loyo _____________________________ Robert Moya Manuel Aguayo Bibliografa Anexos ___________________________ _________________________

_____________________________________

____________________________________

INTRODUCCIN

Desde el inicio de los tiempos, el ser humano ha venido desarrollando la necesidad de comunicarse entre si como mtodo de sobrevivencia, permitiendo el traspaso de informacin entre generaciones como piedra angular de la evolucin humana. Con el desarrollo de la tecnologa, especialmente con la aparicin de los primeros telgrafos, telfonos y tiempo despus de las primeras grandes centrales de computo, la necesidad de informacin se ha venido incrementando a lo largo de todo el planeta; los pases mas desarrollados vieron desde los inicios de las telecomunicaciones, una herramienta que les permita tomar decisiones cada vez mas precisas, rpidas y eficientes, logrando aumentar el porcentaje de victorias en guerras, decisiones polticas y hasta econmicas. No fue sino hasta finales del siglo XX e inicios del siguiente, cuando el desarrollo de lenguajes de programacin, y procesos de transmisin y encriptacin de datos comenzaron a desarrollarse, que los cientficos e ingenieros se fijaron en que la unin de los procesos a travs de la internet (que para esa fecha comenzaba su auge) facilitaba aun mas la realizacin de tareas, sin importar las distancias, compaas transnacionales podan manejar sus procesos de forma centralizada o bien distribuida pero sin perder conexin con la estacin principal de procesamiento. Desde sus inicios en los aos 90, de la mano de la compaa SunMicrosystem, un lenguaje de programacin conocido como Java, ha venido cobrando importancia en el mercado de las tecnologas de software; nacido a partir de caractersticas de otros lenguajes anteriores como C++ y C, surge como una opcin que tiempo despus adquirira

licencia de GPU para ser convertido a Software Libre, lo que impulso su desarrollo por parte de mltiples programadores, siempre bajo la tutela de la comunidad Java, dirigida por SunMricosystem. Con el aumento del uso de servidores en diferentes sedes distribuidas en cualquier parte del planeta bajo la misma compaa, SunMicrosystem desarrollo bajo el lenguaje Java, RMI (Java Remote Method Invocation) Invocacin Remota de Mtodos Java, un mecanismo para invocar mtodos de forma remota, esta herramienta permite que el servidor haga una solicitud de algn mtodo en lenguaje Java a cualquier otro servidor que forme parte de la red, esto garantizando eficiencia en procesos y hasta seguridad, pues le permite a la empresa resguardar mtodos que se considerasen de alta prioridad o seguridad en servidores diseados para estos. Es el objetivo del presente trabajo, indagar y ampliar los conocimientos sobre este mtodo, a fin de ofrecerle al lector una visin clara del funcionamiento del mismo.

DESARROLLO El mtodo para invocacin remota mejor conocido por RMI, es una especificacin que desarrollo JavaSoft, en la implementacin del JDK 1.1, a travs del cual se ejecutan mtodos localizados en objetos remotos, en una maquina virtual Java diferente, es un paso de mensajes (Anexo 1). Para entenderlo mejor se hara una descripcin de la historia de Java; fue creado como una herramienta de programacin en 1991, para ser utilizado en una operacin denominada The Green Project, el equipo estaba dirigido por James Gosling bajo su mando estaban trece personas, quienes en conjunto trabajaron 18 meses para el desarrollo, al inicio del lenguaje se le llamo Oak, luego Green y finalmente Java. Algunas fuentes sealan que su nombre podra deberse a las iniciales de sus creadores (James Gosling, Arthur Van Hoff y Andy Bechtolsheim), otros dicen que su nombre se debe a un tipo de caf disponible en la cafetera cercana, siendo su icono una taza de caf caliente. Los 4 primeros bytes de los archivos .class que genera al compilar son en hexadecimal: 0Xcafebabe. Los objetivos de Gosling eran implementar una maquina virtual y un lenguaje con estructura similar a C++. En 1994, el equipo reoriento la plataforma hacia la Web, ya que pensaban que la llegada del navegador web Mosaic hara que de internet un medio interactivo, un integrante del equipo cre un prototipo de navegador que ms tarde seria conocido como HotJava. Java 1.0a pudo descargarse por primera vez en 1994, sin embargo en mayo del 95 en las conferencias de SunWorld, dieron a luz pblica Java y HotJava. En enero del 96, Sun fundo JavaSoft (grupo empresarial), para que se encargara del desarrollo tecnolgico, saliendo la primera versin de Java luego de dos semanas. La promesa era escrbelo una vez, ejectalo en cualquier lugar, el lenguaje era independiente de la plataforma y un entorno de ejecucin ligero y gratuito, de modo que las aplicaciones Java pudiesen ejecutarse en cualquier plataforma. El entorno

para ejecutarlo era relativamente seguro, los principales navegadores web incorporaron la posibilidad de ejecutar applets Java incrustadas en las pginas web, con el transcurso del tiempo han surgido numerosos cambios, al igual que clases y paquetes que componen la biblioteca estndar. A partir del J2SE 1.4, el lenguaje ha sido regulado por el JCP, que usJava Specification Requests, el lenguaje esta especificado en la especificacin del lenguaje java, los cambios son gestionados en JSR 901. Evolucin de Java: JDK 1.0 (1996) primer lanzamiento comunicado de prensa JDK 1.1 (1997) se incluyen las primeras adiciones. Reestructuracin intensiva del modelo de eventos AWT, clases internas, JavaBeans, JDBC para integrar bases de datos, RMI. J2SE 1.2 (1998) a partir de esta versin, fueron recogidas bajo la denominacin Java2, y J2SE reemplazo a JDK, distinguiendo la plataforma de base de J2SE, incluyeron la palabra reservada (keyword), la API grafica fue integrada en las clases bsicas, la maquina virtual de Sun fue equipada con un compilador Just in Time, por primera vez, Java Plug-in, Java IDL para interoperabilidad con COBRA colecciones. J2SE 1.3 (2000) (kestrel) RMI fue cambiado para basarse en COBRA, JavaSound, Java Naming and Directory se incluyo en las bibliotecas principales., Java Platform Debuger Architecture. J2SE 1.4 (2002) (Merlin) primer lanzamiento de la plataforma desarrollado bajo el proceso de la comunidad como JSR 59, palabra reservada assert, expresiones modeladas al estilo de las expresiones regulares Perl, encadenacin de excepciones, permite a una excepcin encapsular la excepcin de bajo nivel original, non-blocking NIO (New Input/Output),

Logging API, API I/O para la lectura y escritura de imgenes en formatos como JPEG o PNG, Parser XML integrado y procesador XSLT (JAXP), seguridad integrada y extensiones criptogrficas (JCE, JSSE, JAAS), Java Web Start incluido. J2SE 5.0 (2004) (Tiger) Desarrollado bajo JSR 176, Plantillas (genricos) que provee conversin de tipos (type safety) en tiempo de compilacin para colecciones y elimina la necesidad de la mayora de conversin de tipos; metadatos, permite a estructuras del lenguaje como las clases o los mtodos, ser etiquetados con datos adicionales, que puedan ser procesados posteriormente por utilidades de proceso de metadatos; Autoboxing/unboxin, conversiones automticas entre tipos primitivos y clases de envoltura primitivas; Enumeraciones, la palabra reservada enum crea una typesafe, lista ordenada de valores; Varargs, (nmero de argumentos variable) el ltimo parmetro de un mtodo puede ser declarado con el nombre del tipo seguido por tres puntos (e.g. void drawtext(String... lines)). En la llamada al mtodo, puede usarse cualquier nmero de parmetros de ese tipo, que sern almacenados en un array para pasarlos al mtodo; Bucle for mejorado La sintaxis para el bucle for se ha extendido con una sintaxis especial para iterar sobre cada forma: void displayWidgets (Iterable<Widget> widgets) { for (Widget w : widgets) { w.display(); } } Java SE 6 (2006) (Mustang) Estuvo en desarrollo bajo la JSR 270. Sun cambi el nombre "J2SE" por Java SE y elimin el ".0" del nmero de versin. Incluye un nuevo marco de trabajo y APIs que hacen posible la miembro de un array o sobre cualquier clase que implementeIterable, como la clase estndar Collection, de la siguiente

combinacin de Java con lenguajes dinmicos como PHP, Python, Ruby y JavaScript; Incluye el motor Rhino, de Mozilla, una implementacin de Java script en Java; cliente completo de Servicios Web y soporta las ltimas especificaciones para Servicios Web, como JAX-WS 2.0, JAXB 2.0, STAX y JAXP; mejoras en la interfaz grfica y en el rendimiento. Java SE 7 (2011) (Dolphin).Soporte para XML dentro del propio lenguaje; un nuevo concepto de superpaquete; soporte para closures; introduccin de anotaciones estndar para detectar fallos en el software; No oficiales: NIO2; Java Module System; Java Kernel; Nueva API para el manejo de Das y Fechas, la cual reemplazara las antiguas clases Date y Calendar. Posibilidad de operar con clases BigDecimal usando operandos. Componentes de Java: Bibliotecas de Java, que son el resultado de compilar el cdigo fuente desarrollado por quien implementa la JRE, y que ofrecen apoyo para el desarrollo en Java. Algunos ejemplos de estas bibliotecas son: Las bibliotecas centrales, que incluyen: Una coleccin de bibliotecas para implementar estructuras de datos como listas, arrays, rboles y conjuntos. Bibliotecas para anlisis de XML. Seguridad. Bibliotecas de internacionalizacin y localizacin. Bibliotecas de integracin, que permiten la comunicacin con sistemas externos. Estas bibliotecas incluyen: La API para acceso a bases de datos JDBC (Java DataBase Conectivity). La interfaz JNDI (Java Naming and Directory Interface) para servicios de directorio. RMI (Remote Method Invocation) y COBRA para el desarrollo de aplicaciones distribuidas.

Bibliotecas para la interfaz de usuario, que incluyen: El conjunto de herramientas nativas AWT (Abstract Windowing Toolkit), que ofrece componentes GUI (Graphical User Interface), mecanismos para usarlos y manejar sus eventos asociados. Las Bibliotecas de Swing, construidas sobre AWT pero ofrecen implementaciones no nativas de los componentes de AWT. APIs para la captura, procesamiento y reproduccin de audio. Una implementacin dependiente de la plataforma en que se ejecuta de la mquina virtual de Java (JVM), que es la encargada de la ejecucin del cdigo de las bibliotecas y las aplicaciones externas. Plugins o conectores que permiten ejecutar applets en los navegadores Web. Java Web Start, para la distribucin de aplicaciones Java a travs de Internet. Documentacin y licencia. Ahora nos enfocaremos en lo que se refiere directamente a RMI, donde Java le permite a un objeto que se est ejecutando en una mquina virtual, llamar a mtodos de otro objeto que est en otra mquina diferente posiblemente en diferentes hosts, la comunicacin remota se realiza a travs de programas escritos en Java, si alguno esta en otro lenguaje se debe considerar la utilizacin del IDL en su lugar. Forma parte del entorno ofrecido por Java para invocar un mtodo de forma remota, proporciona un mecanismo simple para la comunicacin de servidores en aplicaciones distribuidas basadas en Java; para comunicacin entre otras tecnologas se utiliza CORBA o SOAP. Al estar diseado para Java, ofrece facilidad en la programacin, proporcionando paso de objetos por referencia, recoleccin de basura distribuida y paso de tipos arbitrarios. Se puede exportar un objeto, siendo accesible a travs de la red y el programa permanece a la espera de peticiones en un puerto TCP, permitindole a un cliente conectarse e

invocar los mtodos proporcionados por el objeto. Para realizar la invocacin se deben cumplir los siguientes pasos: 1. Encapsulado (marshalling) de los parmetros (utilizando la funcionalidad de serializacin de Java). 2. Invocacin del mtodo (del cliente sobre el servidor). El invocador se queda esperando una respuesta. 3. Al terminar la ejecucin, el servidor serializa el valor de retorno (si lo hay) y lo enva al cliente. 4. El cdigo cliente recibe la respuesta y contina como si la invocacin hubiera sido local. Vindolo de una forma ms sencilla, es una forma de utilizar funciones de un programa desde otro programa que se encuentra en otro equipo, se permite a un programa A, utilizar las funciones de otro B, ubicado en otro equipo, se ejecuta algo en B desde A, y parece que est en B. esto significa grandes ventajas, ya que se puede distribuir un programa en diferentes equipos, y as dividir la carga de procesos en varios hosts, haciendo el programa ms rpido. Es muy til cuando el equipo donde se encuentra un cliente no tiene suficiente capacidad de procesamiento. Caractersticas de RMI: Orientado a Objetos: Java. Permite la invocacin de mtodos de objetos remotos Java entre diferentes mquinas virtuales. Incorpora el modelo de objetos distribuido en el modelo Java manteniendo su semntica. Uso de las APIs de Java, con todas sus posibilidades. Permite un desarrollo sencillo de las aplicaciones distribuidas. Permite que un DSSOHW pueda llamar a un programa Java en el servidor. Mantiene el esquema de seguridad de Java.

Un sistema RMI tiene la siguiente arquitectura: (Anexo 2) 1. Capa de aplicacin: es la implementacin real de las aplicaciones cliente y servidor; tienen lugar las llamadas a alto nivel para acceder y exportar objetos remotos. Cualquier aplicacin que quiera que sus mtodos estn disponibles para su acceso por clientes remotos debe declarar dichos mtodos en una interfaz que extienda java.rmi.Remote, usada bsicamente para "marcar" un objeto como remotamente accesible. Una vez que los mtodos han sido implementados, el objeto debe ser exportado. Esto puede hacerse de forma implcita si el objeto extiende la clase UnicastRemoteObject (paquete java.rmi.server), o puede hacerse de forma explcita con una llamada al mtodo exportObject() del mismo paquete. 2. Capa proxy o stub-skeleton: Interacta directamente con la capa de aplicacin. Los objetos se transmiten entre emisor y receptor a travs de una serializacin. El stub implementa la inicializacin de la llamada a la capa de referencia remota, la serializacin de los argumentos del mtodo remoto llamado y la deserializacin de los resultados. El esqueleto cumple la funcin complementaria para el programa servidor responsable del objeto. El compilador rmic genera tanto el stub como el esqueleto a partir de la definicin del objeto en el programa fuente Java. 3. Capa de referencia remota: es responsable del manejo de la parte semntica de las invocaciones remotas, se espera una conexin de tipo stream (stream-oriented connection) desde la capa de transporte. Responsable de los detalles de transmisin de la llamada a los mtodos remotos.

Implementa varios protocolos de comunicaciones. Estos permiten: Invocacin punto a punto. Invocacin a un grupo de objetos. Soporte de persistencia y activacin de objetos remotos en el servidor. Estrategias de Recuperacin de conexin. 4. Capa de transporte: realiza las conexiones necesarias y manejo del transporte de los datos de una mquina a otra, el protocolo de transporte subyacente para RMI es JRMP (Java Remote Method Protocol), que solamente es "comprendido" por programas Java. Crear y mantener las conexiones existentes entre las capas de referencia de diferentes mquinas virtuales Java. Adems mantiene las tablas de correspondencias entre mquinas virtuales y objetos disponibles en una direccin URL dada. Las aplicaciones RMI generalmente estn formadas por dos partes: un servidor y un cliente; donde el servidor crea objetos remotos con referencias para hacerlos accesibles y espera a que el cliente los invoque, y un cliente que obtiene la referencia a objetos remotos en el servidor y los invoca. RMI proporciona el mecanismo por el que se comunican y se pasan informacin del cliente al servidor y viceversa. Cuando es una aplicacin, nos referimos a ella como Aplicacin de Objetos Distribuidos, las cuales necesitan localizar los objetos remotos que se encuentran en otro equipo, comunicar los mismos y cargar bytecodes para objetos que son enviados. Un servidor llama al registro para asociar un nombre con un objeto remoto, el cliente busca el objeto remoto por su nombre en el registro del servidor y luego llama a un mtodo, se utiliza un servidor web para cargar los bytecodes de la clase Java del servidor al cliente y del cliente al servidor, para los objetos que necesita (Anexo 3 y 4). Este mtodo puede ser utilizado a nivel profesional cuando existe el problema de distribuir aplicaciones, nos permite transparencia del mtodo

de distribucin para el programador, ya que las codificaciones ya que las modificaciones que se hacen sobre un proyecto existente son pocas y la mayor eficiencia en trminos de invocacin de mtodos comparada con el uso de servlets o cgis. Una aplicacin distribuida construida utilizando RMI, est compuesta por interfaces y clases. Los interfaces definen mtodos, mientras que las clases implementan los mtodos definidos en los interfaces y quizs, tambin definen algunos mtodos adicionales. En una aplicacin distribuida, se asume que algunas implementaciones residen en diferentes mquinas virtuales. Los objetos que tienen mtodos que pueden llamarse por distintas mquinas virtuales son los objetos remotos. Un objeto se convierte en remoto implementando una interfaz remota, que tenga estas caractersticas. Un interface remoto desciende del interface java.rmi.Remote. Cada mtodo de la interfaz declara que lanza una java.rmi.remoteException adems de cualquier excepcin especfica de la aplicacin. El RMI trata a un objeto remoto de forma diferente a como lo hace con los objetos no-remotos cuando el objeto es pasado desde una mquina virtual a otra. En vez de hacer una copia de la implementacin del objeto en la mquina virtual que lo recibe, RMI pasa un stub para un objeto remoto. El stub acta como la representacin local o proxy del objeto remoto y bsicamente, para el llamador, es la referencia remota. El llamador invoca un mtodo en el stub local que es responsable de llevar a cabo la llamada al objeto remoto. Un stub para un objeto remoto implementa el mismo conjunto de interfaces remotos que el objeto remoto. Esto permite que el stub sea tipado a cualquiera de los interfaces que el objeto remoto implementa. Slo aquellos mtodos definidos en un interface remoto estn disponibles para ser llamados en la mquina virtual que lo recibe.

Una de las principales caractersticas de RMI es la habilidad de descargar los bytecodes (cdigo) de una clase de un objeto si la clase no est definida en la mquina virtual del recibidor. Los tipos y comportamientos de un objeto, anteriormente slo disponibles en una sola mquina virtual, ahora pueden ser transmitidos a otra. RMI pasa los objetos por su tipo verdadero, por eso el comportamiento de dichos objetos no cambia cuando son enviados a otra mquina virtual. Esto permite que los nuevos tipos sean introducidos en mquinas virtuales remotas, y as extender el comportamiento de una aplicacin dinmicamente. Para crear una aplicacin distribuida utilizando RMI, debemos seguir los siguientes pasos: 1. Disear e implementar los componentes de la aplicacin: decidimos la arquitectura de la aplicacin y determinamos los objetos locales y cuales podrn ser accedidos remotamente. Se definen los interfaces remotos, que especifica los mtodos que pueden ser llamados remotamente por un cliente. Los clientes programan los interfaces remotos, no la implementacin de clases en ellos. Parte del diseo es la determinacin de cualquier objeto local que sea utilizado como parmetro y los valores de retorno de los mtodos, si no existen tambin se deben definir. Los objetos remotos deben implementar uno o varios interfaces, la clase podra incluir implementacin de otros interfaces (locales o remotos) y otros mtodos (locales). Si una clase se va a utilizar como parmetro o valor de retorno, tambin se debe implementar. Los clientes utilizan objetos remotos que se pueden implementar luego de definir los interfaces remotos, incluso despus de que los objetos remotos hayan sido desplegados. 2. Compilar las fuentes y generar stubs: primero se utiliza javac para compilar los ficheros fuentes de Java, los cuales contienen las

implementaciones de los interfaces remotos, las clases (servidor y cliente); luego se utiliza el compilador rmic para crear los stubs de los objetos remotos. RMI utiliza una clase stub del objeto remoto como un proxy en el cliente para que los clientes puedan comunicarse con un objeto remoto particular.

3. Hacer las clases accesibles a la red: se hacen los ficheros de clases Java asociados con los interfaces remotos, stubs y otras clases que se necesiten descargar en los clientes accesibles a travs de un servidor web. 4. Arrancar la aplicacin: se ejecuta el registro de objetos remotos de RMI, el servidor y el cliente. Ejemplos de RMI: Ejemplo 1: Construir un Motor de Clculo Genrico Esta seccin se enfoca a una sencilla pero potente aplicacin distribuida llamada motor de clculo. Este motor de clculo es un objeto remoto en el servidor que toma tareas de clientes, las ejecuta, y devuelve los resultados. Las tareas se ejecutan en la mquina en la que se est ejecutando el servidor. Este tipo de aplicacin distribuida podra permitir que un nmero de mquinas clientes utilizaran una mquina potente, o una que tuviera hardware especializado. El aspecto novedoso del motor de clculo es que las tareas que ejecuta no necesitan estar definidas cuando se escribe el motor de clculo. Se pueden crear nuevas clases de tareas en cualquier momento y luego entregarlas el motor de clculo para ejecutarlas. Todo lo que una tarea requiere es que su clase implemente un interface particular. Por eso una tarea puede ser enviada al motor de clculo y ejecutada, incluso si la

clase que define la tarea fue escrita mucho despus de que el motor de clculo fuera escrito y arrancado. El cdigo necesita conseguir que una tarea sea descargada por el sistema RMI al motor de clculo, y que ste ejecute la tarea utilizando los recursos de la mquina en la que est ejecutando el motor de clculo. La habilidad para realizar tareas arbitrarias est permitida por la naturaleza dinmica de la plataforma Java, que se extiende a travs de la red mediante RMI. El RMI carga dinmicamente el cdigo de las tareas en la mquina virtual del motor de clculo y ejecuta la tarea si tener un conocimiento anterior de la clase que implementa la tarea. Una aplicacin como sta que tiene la habilidad de descargar cdigo dinmicamente recibe el nombre de "aplicacin basada en comportamiento". Dichas aplicaciones normalmente requieren infraestructuras que permitan agentes. Con RMI, dichas aplicaciones son parte del mecanismo bsico de programacin distribuida de Java. Escribir un Servidor RMI El servidor del motor de clculo acepta tareas de los clientes, las ejecuta, y devuelve los resultados. El servidor est compuesto por un interface y una clase. El interface proporciona la definicin de los mtodos que pueden ser llamados desde el cliente. Esencialmente, el interface define lo que el cliente ve del objeto remoto. La clase proporciona la implementacin. Disear un Interface Remoto Esta pgina muestra cmo el interface Compute es el pegamento que conecta el cliente y el servidor. Tambin aprenderemos sobre el API de RMI que soporta esta comunicacin. Implementar un Interface Remoto En esta pgina exploraremos la clase que implementa el interface Compute, que implementa un objeto remoto. Esta clase tambin proporciona el resto del cdigo que configura el programa servidor: un mtodo main que crea un ejemplar del objeto

remoto, lo registra con la facilidad de nombrado, y configura un controlador de seguridad. Ejemplo 2: Pasos seguidos para elaborar una aplicacin con objetos distribuidos RMI. Esta aplicacin ejemplo proporcionar un servicio que acepta peticiones de tareas concretas especificadas por parte de los clientes. Es decir, cada cliente puede especificar la tarea que desea que el servidor le realice, utilizando para ello el paso de objetos serializados. Esquema del proceso paso por paso en la elaboracin de una aplicacin RMI. (Anexo 5) En primer lugar se escribe la interfaz remota del servidor, que en este caso se llamar ejecutor. Toda interfaz remota debe declararse como public y debe extender la interfazjava.rmi.Remote. Adems, esta interfaz debe definir los mtodos que sern accesibles remotamente. Por ltimo cada uno de estos mtodos debe manejar la excepcinjava.rmi.RemoteException. La segunda interfaz necesitada para este ejemplo define el tipo Tarea. Este tipo es utilizado como un argumento del mtodo ejecutar del interfazejecutor. Esta segunda interfaz permite definir desde el lado cliente la tarea (Tarea) que debe realizar el servidor y ser pasada dinmicamente como argumento del mtodo remoto. Observamos que la interfaz Tarea extiende el interfaz java.io.Serializable. RMI utiliza el mecanismo de serializacin de objetos para transportar objetos entre mquinas virtuales. Tarea no es un objeto accesible remotamente, sino que es enviada por el cliente como argumento al servidor. En definitiva el objeto ejecutor del lado servidor queda a disposicin de ejecutar tareas Tarea que le soliciten los clientes. El cdigo de la interfaz remota ejecutor es el siguiente: package callback; import java.rmi.*; public interface ejecutor

extends Remote{ public String ejecutar(Tarea t) throws RemoteException; } El cdigo de la interfaz Tarea es el siguiente: package callback; import java.io.Serializable; public interface Tarea extends Serializable{ public String recado(); } La interfaz ejecutor contiene un nico mtodo ejecutar, que recibe como argumento un objeto de la clase Tarea, que es la interfaz definida por el cliente. De esta forma el cliente implementa la tarea (de clculo, por ejemplo) que desea realice el servidor. Para ello define el mtodo recado. Se implementa la interfaz remota. La clase que la implementa debe heredar de RemoteServer y lo habitual es hacerlo heredando de UnicastRemoteObject. El cdigo de la implementacin ejecutor_Imp es el siguiente: package callback; import java.rmi.*; import java.rmi.server.*; public class ejecutor_Imp extends UnicastRemoteObject implements ejecutor { protected ejecutor_Imp() throws RemoteException { super(); } public String ejecutar(Tarea t) throws RemoteException { return t.recado(); } } sta es la implementacin desde el lado servidor de la interfaz ejecutor. Utiliza el constructor de la clase de la que hereda, UnicastRemoteObject y

define el mtodoejecutar(Tarea t), que devuelve la resolucin del mtodo recado() del objeto Tarea que ha sido pasado como parmetro. Se generan los archivos stub y skeleton a partir de la clase que implementa la interfaz remota. Para ello se utiliza el compilador rmic. Para ejecutarlo hacemos rmic nombre_claseo bien rmic -d directorio nombre_clase para especificar una ubicacin destino concreta. Como resultado de esta operacin se obtienen dos archivos: ejecutor_Imp_Stub.class ejecutor_Imp_Skel.class Se inicia el servicio de registro RMI, rmiregistry. Un host que quiera exportar referencias remotas a sus mtodos de modo que los stubs puedan acceder a ellos, debe estar ejecutando un servidor de registro RMI. Este servicio se inicia en entornos Linux: rmiregistry & En entornos Windows: start rmiregistry La aplicacin rmiregistry crea un objeto Registry, que escucha por un puerto, a la espera de peticiones de procesos clientes que busquen objetos remotos en el registro RMI. Cabe destacar que, cara al servidor de registro RMI, todos los procesos actan como clientes, tanto los servidores de objetos remotos como los clientes. Un servidor que va a registrar sus objetos remotos debe estar en el mismo host que ejecuta el servidor de registro RMI. Se inicia un proceso servidor y se registra en el rmiregistry. Una vez compilada y ejecutada, queda registrada. (Anexo 6). El cdigo para la implementacin del servidor es el siguiente: package callback; import java.rmi.*; public class servidor { private servidor(){

try{ if (System.getSecurityManager()==null) System.setSecurityManager(new RMISecurityManager()); ejecutor imp=new ejecutor_Imp(); Naming.rebind("rmi://192.168.2.2/Motor_Computo",imp); }catch(Exception e){ System.out.println("Error: "+e.getMessage()); e.printStackTrace(); } } public static void main(String args[]){ System.out.println("Levantando el servidor..."); servidor server=new servidor(); } } El servidor, en primer lugar, instala un gestor de seguridad. A continuacin crea un objeto de la clase que implementa la interfaz remota y lo publica. En el ejemplo que nos ocupa estamos suponiendo que las clases necesarias residen en las mquinas implicadas, por lo que no sera necesario el uso de un gestor de seguridad. Se escribe la clase cliente. En esta parte se incluye la implementacin de la interfaz Tarea vista previamente, que utilizar el cliente para solicitar la ejecucin de una tarea determinada. El cdigo de la clase que implementa la interfaz Tarea es el siguiente: package callback; public class tarea_Imp implements Tarea{ public String recado() { return "Hello World"; } }

El cdigo para la implementacin del cliente es el siguiente: package callback; import java.rmi.*; public class cliente { public static void main(String args[]){ try{ if (System.getSecurityManager()==null) System.setSecurityManager(new RMISecurityManager()); ejecutor ej=(ejecutor) Naming.lookup("rmi://192.168.2.2/Motor_Computo"); Tarea tarea=new tarea_Imp(); String respuesta=ej.ejecutar(tarea); System.out.println(respuesta); }catch(Exception e){ System.out.println("Error: "+e.getMessage()); } } } La clase Tarea_Imp implementa la interfaz Tarea, vista anteriormente. En este caso, define el mtodo recado() como un simple "Hello World". Es decir, la tarea que el cliente quiere que realice el servidor es devolverle la frase "Hello World". Al igual que en el lado servidor, el cliente empieza creando e instalando un gestor de seguridad. A continuacin localiza el objeto remoto y crea un objeto de la clase Tarea_Imppara solicitar al servidor que ejecute esa tarea. Se compila la clase cliente Se inicia un proceso cliente. (Anexo 7)

CONCLUSIONES Diego Garca: Es imposible menospreciar la evolucin humana y su necesidad de transmitir informacin como herramienta de supervivencia, desde los inicios de la humanidad hasta hoy en da los cambios han acelerado cada vez ms los procesos del ser humano, llegando a globalizar el planeta en una sola red, casi sin importar las barreras de idiomas, polticas, religiones o sexo. Compaas como SunMicrosystem a travs de su lenguaje para desarrollo de software Java, ha aportado herramientas cada vez ms eficientes al mercado, ajustndose a las necesidades de cambios constantes, en un mundo donde el dinero cobra cada vez ms valor, y la informacin se ha convertido en el activo ms importante de las compaas. Soluciones como RMI (Java Remote Method Invocation) o por su traduccin: Invocacin Remota de Mtodos Java, han permitido a las empresas con capacidades de cmputos o procesamiento de datos distribuidos, almacenar procesos informticos crticos o de mayor seguridad en servidores configurados para ofrecer la mxima seguridad posible, en un mundo donde la informacin es ms importante cada da, estos mtodos aseguran un mayor nivel de confianza en los procesos de cada una de las sedes de las compaas transnacionales o de amplia cobertura. La invocacin remota de Mtodos de Java, permite hacer un llamado a objetos de Java almacenados en diversos servidores, teniendo la capacidad de traer consigo sus atributos y mtodos. Consiste en la encapsulacin de la data a procesar, una vez serializada se lleva a cabo

la solicitud del mtodo del cliente al servidor, en este caso, el RMI alojado en el servidor esta a la espera de la apertura de un puerto TCP, terminada la conexin el cliente se encuentra a la espera de la respuesta del procesamiento, y una vez recibida el cdigo seguir ejecutndose con total normalidad en la maquina cliente. El RMI permite procesar un conjunto de datos importantes en un servidor seguro, salvaguardando as el procesamiento, a tal punto que el cliente no conoce el proceso, simplemente enva la data a ser procesada y recibe respuesta de la misma una vez trabajada, para continuar as con su proceso. Milagros Grillo: En lo que respecta tecnologa el mundo est en constante desarrollo y bsqueda de herramientas que nos ayuden a trabajar desde cualquier lugar, en este caso la invocacin remota de mtodos, por sus siglas RMI con lenguaje de programacin Java, nos permite trabajar en un equipo remotamente, es decir a travs de un puerto de comunicacin TCP se reciben y envan peticiones desde un cliente a un servidor y viceversa, en diferentes lugares del mundo. Las invocaciones se hacen hacia objetos previamente descritos, los cuales vienen con sus atributos y mtodos desde el servidor. Es una tcnica que nos permite acceder al programa de un equipo y utilizar sus funciones en otro equipo, ayudndonos a tener ms memoria en los equipos clientes, ya que se pueden dividir los procesos en varios servidores, resultando un procesamiento final ms rpido, nos ayuda igualmente en los equipos clientes con baja capacidad de procesamiento. Para entender un poco mejor, tenemos a un sistema RMI compuesto por un servidor que se encarga de crear los objetos que tienen referencias para luego ser accedidos por un cliente, quien lo invoca

obteniendo la referencia a los objetos remotos en el servidor. Al mantener la seguridad de Java, ofrece confianza a los usuarios, garantizando el cifrado y confidencialidad de la informacin enviada y recibida. Carlos Loyo: La invocacin remota de Mtodos de Java, permite hacer un llamado a objetos de Java almacenados en diversos servidores, teniendo la capacidad de traer consigo sus atributos y mtodos. lo cual permite la reutilizacin de cdigo haciendo de estos procesos accesibles para los usuarios suscritos a dichos servidores. otra caracterstica importante es el abaratamiento de los procesos puesto a que ciertos clculos o procesos que se realizan de esta manera requieren de hardwares especializados que no estn al alcance de todos los usuarios que solicitan dichos procesos, as como tambin facilitan la complejidad de los mismos debido a que los usuarios normalmente no tienen que preocuparse de como realizar estos complejos clculos simplemente invocan remotamente estos procesos para solucionar sus problemas. Este tipo de operaciones permite el procesamientos de importantes cantidades de datos en un servidor privado y probablemente cuya seguridad salvaguarde los procedimientos de la informacin Robert Moya: Debido a la importancia del desarrollo de nuevos sistemas que utilizan la tecnologa en diferentes formas de comunicacin, se realiz de manera favorable un estudio de estos lenguajes y protocolos que favorecen su uso como lo es el RMI(java). Obteniendo con ello conocimiento nuevo, actual y sobre todo de gran ayuda para nuevos proyectos de desarrollo de software, brindando que los usuarios van realizando de manera automtica y garantice el cifrado y confidencialidad

informacin acerca de las diferentes plataformas que existen para el desarrollo de sistemas, protocolos de comunicacin, lenguajes, etc. Adems se propusieron elementos importantes que se tomaran en cuenta para el desarrollo y diseo de cualquier sistema, como lo es el lenguaje y la plataforma de java. Tambin como un complemento al estudio se establecieron puntos clave para la elaboracin de un protocolo de comunicacin para sistemas compatibles con este lenguaje.

BIBLOGRAFIA

http://www.cad.com.mx/versiones_del_lenguaje_java.htm Fecha de Bsqueda: Jueves 31 Mayo, 10pm aprox. http://www.programacion.com/articulo/invocacion_remota_de_meto dos_rmi_107/1 Fecha de Bsqueda: Jueves 31 Mayo, 10pm aprox. ftp://ftp.etsii.ull.es/asignas/asignas/INGSOF3/tema4.PDF Fecha de Descarga: Jueves 31 Mayo, 10.30pm aprox. http://es.wikipedia.org/wiki/Java_(lenguaje_de_programaci %C3%B3n) Fecha de Bsqueda: Jueves 31 Mayo, 11pm aprox. http://casidiablo.net/rmi-%C2%BFque-es-un-ejemplo-sencillo-conrmi/ Fecha de Bsqueda: Jueves 01 Junio, 2pm aprox. http://cupi2.uniandes.edu.co/site/index.php/tutoriales/rmi Fecha de Bsqueda: Jueves 01 Junio, 2pm aprox. http://notes.corewebprogramming.com/student/RMI.pdf Fecha de Descarga: Jueves 01 Junio, 2.30pm aprox. http://www.daimi.au.dk/~mailund/scripting2005/lecturenotes/rmi.html Fecha de Bsqueda: Jueves 01 Junio, 2.30pm aprox http://www.javacoffeebreak.com/articles/javarmi/javarmi.html

Fecha de Bsqueda: Jueves 01 Junio, 2pm aprox http://es.wikipedia.org/wiki/Java_Remote_Method_Invocation Fecha de Bsqueda: Jueves 01 Junio, 3pm aprox http://docs.oracle.com/javase/tutorial/rmi/index.html Fecha de Bsqueda: Jueves 03 Junio, 7pm aprox http://www.oracle.com/technetwork/java/javase/tech/index-jsp136424.html Fecha de Bsqueda: Jueves 03 Junio, 7pm aprox

ANEXOS

Anexo 1

Anexo 2

Anexo 3

Anexo 4

Anexo 5

Anexo 6.

Anexo 7.