Documentos de Académico
Documentos de Profesional
Documentos de Cultura
con el Proyecto Nacional Simn Bolvar (PPNS) Vinculacin con el eje proyecto
Independencia tecnolgica
Cooperacin tecnolgica sin interdependencia
Objetivo
Comprender
la tecnologa de aplicaciones distribuidas usando Java RMI Disear, compilar y programar una aplicacin simple usando tecnologa Java RMI
Definicin.
Remote Method Invocation.
Exclusivo de Java *. Mecanismo/sistema que permite que un objeto ejecutndose en un JVM llame a mtodos de otro objeto que esta en una JVM diferente. Para plataformas diferentes se necesitara SOAP o CORBA. RMI proporciona el mecanismo para transferir informacin entre procesos de diferentes mquinas.
Estructura.
Formado bsicamente por 2 programas remotos:
Servidor. Crea objetos remotos. Referencia a ellos. Espera por la solicitud de los clientes. Cliente. Obtiene referencia a los objetos remotos. Ejecuta sus mtodos.
Una aplicacin...
Pasos en los que se observa el desarrollo de una aplicacin distribuida RMI:
1. Se inicia el servidor y registra sus objetos y mtodos a invocarse en un servicio de nombramiento. Asocia un nombre con el objeto remoto. 2. Se inicia el cliente y localiza los objetos y/o mtodos a invocar de manera remota en el directorio de nombres del servidor obteniendo la referencia al objeto.
3. El cliente invoca a los mtodos remotos mediante la referencia al objeto obtenida. Espera por respuesta.
Serializacin de los datos para ser enviados. Invocacin del mtodo en el servidor. 4. Termina la ejecucin del mtodo en el servidor y se regresa el valor de retorno serializado al cliente.
Esquema de funcionamiento.
El objeto que realiza una llamada remota invoca el mtodo en el stub local. Implementa exactamente el mismo conjunto de interfaces remotas que el objeto remoto. Los pasos que realiza son:
1. Inicia una conexin con la JVM remota que contiene el objeto
remoto.
2. Escribe (serializa) y transmite los parmetros a la JVM remota. 3. Espera los resultados de la invocacin remota. 4. Lee (deserializa) los valores de retorno o excepciones devueltas. 5. Devuelve el valor al objeto que inicio la llamada.
Es responsable de enviar la llamada a la implementacin del objeto remoto. Pasos que realiza son:
1. Lee (deserializa) los parmetros del mtodo remoto. 2. Invoca al mtodo en la implementacin del objeto remoto. 3. Escribe (serializa) y transmite el resultado.
A partir del JDK 1.2 (versin de Java 2) se ha introducido un protocolo stub adicional que elimina la necesidad del uso de los esqueletos.
El contacto directo se tiene con el stub proporcionado por el objeto remoto. Almacena internamente la etiqueta y el objeto stub en un hashmap. Devuelve el stub al cliente que solicito el objeto remoto. En caso de no hacer uso de este ejecutable de Java se encuentran la interfaz Registry y la clase LocateRegistry (con sus mtodos createRegustry y getRegistry).
o o
Stub
Bibliografa recomendada
Java RMI William Grosso Editorial: O'Reilly Primera Editicin Octubre 2001 ISBN: 1-56592-452-5, 572 pginas
Disponible en http://www.iutllado.edu.ve/descargas/libro_java_rmi.pdf
Prctica
Diseo
de una aplicacin sencilla que usa Java RMI para comunicar un cliente con un servidor remoto.
Procedimiento
Cliente Servidor
Un servidor RMI consiste en definir un objeto remoto que va a ser utilizado por los clientes. Para crear un objeto remoto, se define una interfaz, y el objeto remoto ser una clase que implemente dicha interfaz. Veamos como crear un servidor de ejemplo mediante 3 pasos: Definir el interfaz remoto Cuando se crea un interfaz remoto:
El interfaz debe ser pblico. Debe extender (heredar de) el interfaz java.rmi.Remote, para indicar que puede llamarse desde cualquier mquina virtual Java. Cada mtodo remoto debe lanzar la excepcin java.rmi.RemoteException en su clasula throws, adems de las excepciones que pueda manejar. public interface MiInterfazRemoto extends java.rmi.Remote { public void miMetodo1() throws java.rmi.RemoteException; public int miMetodo2() throws java.rmi.RemoteException; }
Vamos ahora a definir un cliente que acceder a el/los objeto/s remoto/s que creemos. Para ello seguimos los siguientes pasos: Definir la clase para obtener los objetos remotos necesarios La siguiente clase obtiene un objeto de tipo MiInterfazRemoto, implementado en nuestro servidor:
public class MiClienteRMI { public static void main(String[] args) { try { MiInterfazRemoto mir = (MiInterfazRemoto)java.rmi.Naming.lookup("//" + args[0] + :" + args[1] + "/PruebaRMI"); // Imprimimos miMetodo1() tantas veces como devuelva miMetodo2() for (int i=1;i<=mir.miMetodo2();i++) mir.miMetodo1(); } catch (Exception e) { e.printStackTrace(); } } } }
Ya tenemos definido el servidor. Ahora tenemos que compilar sus clases mediante los siguientes pasos: Compilamos el interfaz remoto. javac MiInterfazRemoto.java Luego, compilamos las clases que implementen los interfaces. Y para cada una de ellas generamos los ficheros Stub para mantener la referencia con el objeto remoto, mediante el comando rmic: javac MiClaseRemota.java rmic -d . MiClaseRemota No olvide copiar el objeto stub generado en la carpeta cliente
Para ejecutar el servidor, seguimos los siguientes pasos: Se arranca el registro de RMI para permitir registrar y buscar objetos remotos. El registro se encarga de gestionar un conjunto de objetos remotos a compartir, y buscarlos ante las peticiones de los clientes. Se ejecuta con la aplicacin rmiregistry distribuida con Java, a la que podemos pasarle opcionalmente el puerto por el que conectar (por defecto, el 1099): start rmiregistry 1234 Nota:Aparecer una ventana vaca, no la cierre Por ltimo, se lanza el servidor: java -Djava.rmi.server.hostname=127.0.0.1 MiClaseRemota 1234
Compilar
y ejecutar el cliente Una vez que ya tenemos definido el cliente, para compilarlo hacemos:
javac
MiClienteRMI.java
Luego,
Resultado
Veremos