instituto tecnolÓgico superior de san …...instituto tecnolÓgico superior de san martÍn...

11
INSTITUTO TECNOLÓGICO SUPERIOR DE SAN MARTÍN TEXMELUCAN INGENIERÍA EN SISTEMAS COMPUTACIONALES Sistemas Distribuidos “PRÀCTICA 3: El servicio de “echo” en Java-RMI” Profesor: Susana Garrido Cortes Alumnos: Susana Yarell Rodríguez Contreras Nora Estrada Serrano Isaías Rodríguez Ventura Javier Cocoletzi Cuamatzi Saúl Cocoletzi Cuamatzi 8°B

Upload: others

Post on 22-Apr-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: INSTITUTO TECNOLÓGICO SUPERIOR DE SAN …...INSTITUTO TECNOLÓGICO SUPERIOR DE SAN MARTÍN TEXMELUCAN INGENIERÍA EN SISTEMAS COMPUTACIONALES Sistemas Distribuidos “PRÀCTICA 3:

INSTITUTO TECNOLÓGICO

SUPERIOR DE SAN MARTÍN

TEXMELUCAN

INGENIERÍA EN SISTEMAS

COMPUTACIONALES

Sistemas Distribuidos

“PRÀCTICA 3: El servicio de “echo” en Java-RMI”

Profesor:

Susana Garrido Cortes

Alumnos:

Susana Yarell Rodríguez Contreras

Nora Estrada Serrano

Isaías Rodríguez Ventura

Javier Cocoletzi Cuamatzi

Saúl Cocoletzi Cuamatzi

8°B

Page 2: INSTITUTO TECNOLÓGICO SUPERIOR DE SAN …...INSTITUTO TECNOLÓGICO SUPERIOR DE SAN MARTÍN TEXMELUCAN INGENIERÍA EN SISTEMAS COMPUTACIONALES Sistemas Distribuidos “PRÀCTICA 3:

El objetivo de esta práctica es crear y ejecutar una aplicación cliente servidor "echo" basada en java-RMI. La práctica tiene dos partes: La primera parte implementa un servidor sencillo basado en un objeto java-RMI con un único método "echo". La segunda parte utiliza las facilidades de movilidad de código en Java-RMI. Se trata de implementar también el servicio de “echo”, pero esta vez el servidor es una máquina de cómputo genérica, denominada "ComputeEngine", que puede ejecutar cualquier algoritmo cuyo código se le proporcione por la red. En este caso el algoritmo es el algoritmo del servicio de "echo". 3.1.- Estructura de la aplicación La aplicación Echo se estructura en tres paquetes: la interfaz, el cliente y el servidor, los cuales se describen a continuación.

3.1.1.- El paquete interfaz (rmi) Consta del siguiente fichero: • EchoInt.java: describe el servicio "echo". Este fichero se encuentra completamente implementado. Visite este código y observe que la interfaz es prácticamente igual a la interfaz especificada en la práctica anterior, excepto que el interfaz es en esta práctica es subclase de Remote: public interface EchoIntRMI extends java.rmi.Remote 3.1.2.- El paquete servidor (server) Consta, básicamente, de dos ficheros: • EchoObject.java: implementa la interfaz EchoInt y proporciona el servicio de "echo" en local (A clientes locales, no a clientes remotos). La implementación es idéntica a la práctica anterior y consiste en devolver la cadena que se envía, junto con el URL y la hora de la máquina servidora al cabo de 3 segundos. Este retraso simula que el servicio tiene un tiempo de cómputo largo y apreciable. Visite este código. • EchoObjectRMI.java: es el verdadero objeto RMI (extends UnicastRemoteObject). También implementa la interfaz EchoInt e implementa el servicio de “echo” en remoto (para clientes remotos). Su implementación se basa en crear una instancia del objeto EchoObject y delegar en el la implementación del método echo. La funcionalidad adicional que aporta esta clase es la de registrar el servicio en el servidor de nombres y proporcionarle la capacidad de ser invocado remotamente mediante el código genético que aporta la clase UnicastRemoteObject.

Page 3: INSTITUTO TECNOLÓGICO SUPERIOR DE SAN …...INSTITUTO TECNOLÓGICO SUPERIOR DE SAN MARTÍN TEXMELUCAN INGENIERÍA EN SISTEMAS COMPUTACIONALES Sistemas Distribuidos “PRÀCTICA 3:

Visite este código y observe que existen EJERCICIOS. El objeto servidor lo componen el código objeto correspondiente a estos ficheros junto a los skeletons generados automáticamente por RMI. 3.1.3.- El paquete cliente (client) Lo constituye el siguiente fichero: • EchoRMI.java: es el cliente RMI. Se encarga de obtener una referencia RMI al objeto servidor a partir del servicio de nombres. Una vez obtenida esta referencia, realiza el bucle: - Leer de teclado - Invocar el objeto (a través de la referencia al objeto) - Imprimir el resultado por pantalla. Visite este código y observe que existen EJERCICIOS. El objeto cliente lo componen el código objeto correspondiente a este fichero junto a los stubs generados automáticamente por RMI. 3.2.- Realización de la parte básica de la práctica Para la realización de la parte básica de la práctica cree un proyecto prj-rmi y siga la metodología descrita en la práctica 1: 1. Descargue los ficheros de ayuda al directorio de descargas (W:\dya\descargas). 2. Cree un proyecto prj-rmi en el workspace (W:\dya) según se indica en la práctica 1 cree también los paquetes de que consta la aplicación: rmi, client, server. 3. Desarrolle el paquete rmi: - Sólo hay que copiar el fichero EchoInt.java del directorio de descargas al workspace y actualizar la visión del Package explorer, puesto que el fichero se encuentra completamente terminado. 4. Desarrolle el paquete server: - Copie los ficheros EchoObjectRMI.java y EchoObject.java del directorio de descargas al workspace. - Realice los ejercicios propuestos. - Ejecute y depure EchoObjectRMI.java utilizando el menú Run... y proporcionado los parámetros de ejecución que sean necesarios. Los parámetros fundamentales se describen en el apartado 3.2.1.-. 5. Desarrolle el paquete client: - Copie el fichero EchoRMI.java del directorio de descargas al workspace. - Realice los ejercicios propuestos. - Ejecute y depure Echo.java utilizando el menú Run... y proporcionado los parámetros de ejecución que sean necesarios. Los parámetros fundamentales se describen en el apartado 3.2.1.- 6. Compruebe el correcto funcionamiento del cliente y servidores del servicio de echo conectándose con servidores remotos desarrollados por sus compañeros (y viceversa). 3.2.1.- Compilación y ejecución de aplicaciones RMI en Eclipse El desarrollo de aplicaciones RMI en Eclipse se ve facilitado con la feature (o plugin) que puede descargarse de http://www.genady.net. No se trata de software libre por lo que deberá adquirir una licencia. Existen licencias para estudiantes

Page 4: INSTITUTO TECNOLÓGICO SUPERIOR DE SAN …...INSTITUTO TECNOLÓGICO SUPERIOR DE SAN MARTÍN TEXMELUCAN INGENIERÍA EN SISTEMAS COMPUTACIONALES Sistemas Distribuidos “PRÀCTICA 3:

válidas por cuatro meses. La licencia de prueba funciona 15 días. El plugin RMI básicamente permite: • Ejecutar el servicio de nombres RMI, denominado rmiregistry y examinar los servicios que se encuentran registrados. • Generar automáticamente stubs y skeletons para la aplicación. Para ejecutar una aplicación RMI, básicamente debe seguir los siguientes pasos: 1. Arrancar el servicio de nombres RMI rmiregistry utilizando la opción Start Local Registry (port 1099). En caso de no disponer del plugin RMI, este servicio también puede arrancarse desde una consola MS-DOS estableciendo la variable de entorno CLASSPATH y ejecutando: > start rmiregistry 2. Ejecutar el servidor EchoObjectRMI utilizando el menú Run as -> RMI Application y fijando las siguientes propiedades de la máquina virtual (menú RMI VM Properties): - java.rmi.server.codebase: permite especificar un URL para el código rmi. De esta forma, la máquina virtual puede conocer la ubicación de las clases y sus correspondientes stubs o skeletons. Fájela en el directorio bin de la aplicación (file:${workspace_loc:/prj-rmi/bin}). - java.security.policy: permite especificar el URL para un fichero con la política de seguridad necesaria para ejecutar aplicaciones RMI. Existen aquí dos opciones: o bien especificar la política de seguridad por defecto de la plataforma 1.1 o bien especificar un fichero con el siguiente contenido. grant { permission java.net.SocketPermission "*:1024-65535", "connect,accept,resolve"; }; En caso de no disponer del plugin RMI, la generación de stubs y skeletons puede realizarse desde una consola MS-DOS estableciendo la variable de entorno CLASSPATH y ejecutando el compilador de RMI, especificando como parámetros el servidor de echo: > rmic server/EchoObjectRMI.java La ejecución de aplicaciones desde consola (caso de no disponer del plugin RMI) debe especificar correctamente las propiedades de la máquina virtual: > java server/EchoObjectRMI -Djava.rmi.server.codebase= ... -Djava.security.policy=... 3. Compruebe que el servicio “Echo” ha sido registrado correctamente en le rmiregistry utilizando el RMI Registry Inspector. 4. Ejecutar el cliente EchoRMI utilizando el menú Run as -> RMI Application y especificando como parámetro de ejecución el host del servidor. Realice también pruebas utilizando el servidor de otros compañeros de prácticas. 3.3.- Realización de la aplicación “echo” utilizando movilidad de código Visite el Tutorial de Java (disponible en la web de la asignatura) y seleccione el capítulo de RMI. En este capítulo se desarrolla una aplicación donde existe un servidor de computo genérico ComputeEngine, que ejecuta un código (subclase de Task) que el cliente

Page 5: INSTITUTO TECNOLÓGICO SUPERIOR DE SAN …...INSTITUTO TECNOLÓGICO SUPERIOR DE SAN MARTÍN TEXMELUCAN INGENIERÍA EN SISTEMAS COMPUTACIONALES Sistemas Distribuidos “PRÀCTICA 3:

le puede especificar como parámetro por valor en una invocación RMI (movilidad de código). La Task que se desarrolla en el tutorial es las Task Pi que contiene un algoritmo para calcular el número pi. Ver figura 2

Esta segunda parte de la práctica consiste en compilar y ejecutar el ejemplo del tutorial y, posteriormente, modificarlo para sustituir el algoritmo de calcular el número pi por el algoritmo de realizar el servicio “echo”. De esta manera el servidor ComputeEngine ejecutará una Task con el servicio de “echo”. Se requiere también modificar la interfaz del Compute del ComputeEngine para adaptarla a la siguiente especificación: import java.rmi.Remote; import java.rmi.RemoteException; public interface Compute extends Remote { //loadTask: Cargar una nueva task en el ComputeEngine. No ejecutarla void loadTask(Task t) throws RemoteException; //executeTask: Ejecutar una task previamente cargada con loadTask //la task admite como argumentos de entrada los proporcionados en arg y //el resultado de la Task es devuelto como resultado de executeTask Object executeTask(Object arg) throws RemoteException; } Esta segunda parte consta de los siguientes pasos: 1. Crear un nuevo proyecto prj-rmi2 con los paquetes client, compute y engine. 2. Descargar del tutorial todos los ficheros necesarios y añadirlos al proyecto: - El interfaz Compute.java - El interfaz Task.java - La máquina de cómputo genérica ComputeEngine.java - El cliente ComputePi.java - La tarea que se pasa como argumento a ComputeEngine Pi.java 3. Ejecutar la aplicación anterior. Siga los pasos del apartado 3.2.1.- 4. Modificar la aplicación anterior para ajustarse a la nueva especificación de la interfaz Compute: - Modifique las interfaces Compute y Task. - Modifique el servidor de ComputeEngine para implementar la nueva interfaz Compute. - Realice una Task que implemente el algoritmo de echo aprovechando el objeto EchoObject. java. - Realice una nueva versión del cliente de echo de la primera parte de la práctica para que invoque la nueva máquina de cómputo genérica. 5. Ejecute la nueva versión del servidor de cómputo genérico.

Page 6: INSTITUTO TECNOLÓGICO SUPERIOR DE SAN …...INSTITUTO TECNOLÓGICO SUPERIOR DE SAN MARTÍN TEXMELUCAN INGENIERÍA EN SISTEMAS COMPUTACIONALES Sistemas Distribuidos “PRÀCTICA 3:

A continuación podemos observar los paquetes del “servidor, del cliente y el common”, en el cual se encuentra las clases para los mensajes, el Gui, el IServidor y las Utils.

Para poder correr los programas debemos irnos a nuestra consola, hacer lo siguiente que se muestra:

Page 7: INSTITUTO TECNOLÓGICO SUPERIOR DE SAN …...INSTITUTO TECNOLÓGICO SUPERIOR DE SAN MARTÍN TEXMELUCAN INGENIERÍA EN SISTEMAS COMPUTACIONALES Sistemas Distribuidos “PRÀCTICA 3:

Corremos primero el MainServidor.

Nos dice que el servidor está listo y va a esperar alguna conexión de los clientes

Page 8: INSTITUTO TECNOLÓGICO SUPERIOR DE SAN …...INSTITUTO TECNOLÓGICO SUPERIOR DE SAN MARTÍN TEXMELUCAN INGENIERÍA EN SISTEMAS COMPUTACIONALES Sistemas Distribuidos “PRÀCTICA 3:

Se corre el primer cliente.

Corremos el segundo cliente.

Como podemos observar los dos clientes están corriendo junto con el servidor.

Page 9: INSTITUTO TECNOLÓGICO SUPERIOR DE SAN …...INSTITUTO TECNOLÓGICO SUPERIOR DE SAN MARTÍN TEXMELUCAN INGENIERÍA EN SISTEMAS COMPUTACIONALES Sistemas Distribuidos “PRÀCTICA 3:

Autentificamos el primer cliente llamado “Susana”

Autentificamos el segundo cliente llamado “Noris”

Observamos que en servidor están los dos clientes están listos.

Page 10: INSTITUTO TECNOLÓGICO SUPERIOR DE SAN …...INSTITUTO TECNOLÓGICO SUPERIOR DE SAN MARTÍN TEXMELUCAN INGENIERÍA EN SISTEMAS COMPUTACIONALES Sistemas Distribuidos “PRÀCTICA 3:

Debemos agregar un contacto para poder enviar y recibir mensajes.

En esta pantalla podemos observar como el primer cliente le manda un mensaje al segundo.

Ahora en el segundo cliente observamos que recibió el mensaje satisfactoriamente.

Page 11: INSTITUTO TECNOLÓGICO SUPERIOR DE SAN …...INSTITUTO TECNOLÓGICO SUPERIOR DE SAN MARTÍN TEXMELUCAN INGENIERÍA EN SISTEMAS COMPUTACIONALES Sistemas Distribuidos “PRÀCTICA 3:

En el servidor podemos observar como este puede observar lo que están haciendo los clientes.