practica 5 - análisis de sistemas
DESCRIPTION
Análisis de SistemasTRANSCRIPT
Practica 5. Objetos remotos. CORBA
SCS, 2009/10
25 de noviembre de 2009
Indice
1. Ejercicio 1: Compilacion y uso de objetos remotos CORBA 1
1.1. Compilacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2. Ejecucion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3. Tareas a realizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Ejercicio 2: Uso de retrollamadas (callback) 2
2.1. Pasos a seguir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2. Tareas a realizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3. Documentacion a entregar 5
1. Ejercicio 1: Compilacion y uso de objetos remotos CORBA
Se mostrara el un ejemplo simple de creacion de objetos remotos en CORBA.
Se usara el codigo de ejemplo que implementa una ”calculadora remota” comentado en los apuntes de la asignatura.
Descarga: corba1.tar.gz
corba1.zip
El codigo de partida incluye:
calculadora.idl: Especificacion IDL del interfaz de la calculadora remota
• Define el modulo ejemplo y el interfaz Calculadora
ejemplo/*: Directorio con las clases e interfaces Java del paquete ejemplo generado con el compilador IDL (idlj-fall)
CalculadoraImpl.java: Implementacion (servant) del interfaz IDL
• Hereda de la clase CalculadoraPOA generada por el compilador idlj
EjemploServidor.java: Proceso servidor simple que crea un objeto servant de tipo CalculadoraImpl, lo registraen el POA y almacena el IOR resultante en el servidor de nombres con el nombre ”Calculadora”
EjempoCliente.java: Cliente simple que obtiene del servidor de nombres de CORBA una referencia a un objetoCORBA calculadora remota y ejecutas sus metodos
1
1.1. Compilacion
1. Descomprimir el paquete.
$ tar xzvf corba1.tar.gz$ cd corba1
2. Compilar el interfaz IDL (ya esta hecho)
$ idlj -fall calculadora.idl
Comprobar los ficheros Java generados en el directorio ejemplo
3. Compilar el servant y el servidor
$ javac CalculadoraImpl.java$ javac EjemploServidor.java
4. Compilar el servidor
$ javac EjemploCliente.java
1.2. Ejecucion
Desde tres terminales distintos
1. Lanzar el demonio orbd (servicios basicos de CORBA, incluido el servidor de nombres) en un puerto no privilegiado
$ orbd -ORBInitialHost localhost -ORBInitialPort 1111
Queda a la espera en el puerto 1111
2. Lanzar el servidor (queda a la espera)
$ java EjemploServidor -ORBInitialHost localhost -ORBInitialPort 1111
3. Ejecutar el cliente
$ java EjemploCliente -ORBInitialHost localhost -ORBInitialPort 1111
1.3. Tareas a realizar
Se recomienda inspeccionar los ficheros Java proporcionados y comprobar su relacion con los ficheros generador automati-camente por el compilador idlj
Prestad especial atencion a las implementaciones del servidor y el cliente para ver la dinamica tıpica que se debe seguira la hora de crear y hacer disponibles objetos CORBA y a la hora de recuperarlos del servidor de nombres y lanzarinvocaciones sobre ellos.
2. Ejercicio 2: Uso de retrollamadas (callback)
Se vera un ejemplo del uso de retrollamadas entre objetos CORBA.
De forma general el mecanismo de retrollamadas (callback) permite que se pase un comprotamiento (codigo) comoargumento a otra pieza de codigo distinta
2
El caso tıpico es el de un cliente que se registra en algun tipo de servidor que debe realizar alguna tarea, de modo queel servidor puede notificar al cliente (o clientes) cuando la operacion ha finalizado, ejecutando uno de sus metodos.
• El cliente funciona a la vez como cliente y servidor• Esquema de 2 fases: registro + notificacion
Nota: El uso de retrollamadas no es una caraterıstica exclusiva de CORBA (puede hacerse en cualquier programa)ni de los entornos orientados a objetos (aunque el uso de objetos lo simplifica)
Mas informacion: callbacks [Wikipedia]
En este ejercicio se vera el uso de retrollamadas en una sistema de subastas simulado.
Tenemos 2 tipos de objetos (en nuesto caso seran interfaces IDL de CORBA)
Subastador: gestiona la subasta de un producto
• El producto subastado tiene un nombre y un precio mınimo• La primera puja recibida que supere ese precio mınimo ganara la subasta• Existe un numero maximo de pujas.
Si no se alcanza antes el precio mınimo, al llegar a ese lımite se determina cual es la puja mas alta, que sera laganadora
• El Subastador recibe pujas, en forma de objetos Pujador mediante el metodo anadirPujador(), que se vanalmacenado en un vector [fase de registro]
• Una vez concluida la puja se notifica el resultado al ganador y a los perdedores incocando sus metodos notifi-carResultado() [fase de notificacion]
Pujador: representa la puja realiza por una persona ante el Subastador
• Almacena el nombre del pujador y el importe de su puja• Las pujas se le comunican al Subastador invocando su metodo anadirPuja()• El resultado de la puja sera comunicado mediante la invocacion del metodo notificarResultado() de cada una
de los objetos Pujador implicados (callback)
Se parte de un codigo de ejemplo donde el comportamiento de ambos tipos de objetos y las reglas de la subasta ya estanimplementadas. Se tratara de implementar un servidor y un cliente que creen los objetos CORBA Subastador y Pujadory invoquen sus metodos para similar la subasta.
Descarga: corba2.tar.gz corba2.zip
2.1. Pasos a seguir
Descomprimir el paquete.
$ tar xzvf corba2.tar.gz$ cd corba2
Contenido
• subasta.idl: Interfaces IDL para los objetos Subastador y Pujador• subasta/*: Directorio con las clases e interfaces Java del paquete subasts generado con el compilador IDL
(idlj -fall)• SubastadorImpl.java: Implementacion (servant) del interfaz IDL Subastador
◦ Hereda de la clase SubastadorPOA generada por el compilador idlj• PujadorImpl.java: Implementacion del objeto (servant) del interfaz IDL Pujador
◦ Hereda de la clase PujadorPOA generada por el compilador idlj• ServidorSubastas.java: Servidor vacıo• ClienteSubastas.java: Cliente vacıo
3
2.2. Tareas a realizar
Se pide implementar un servidor y un cliente que hagan uso de los objetos CORBA implementados en una pequenasubasta.
Se subastara un ”peluche rojo”, con importe mınimo de 100 euros y que admite un maximo de 3 pujas
Habra 4 pujadores, por ejemplo:
• ”Pepe” que puja con 50 euros
• ”Luis” que puja con 95 euros
• ”Ana” que puja con 80 euros
• ”Pedro” que puja con 85 euros
Tomad como base los ejemplos de servidor y cliente vistos en el ejercicio 1.
Implementacion del servidor
1. Iniciar el ORB de CORBA
2. Instanciar un servant de la clase SubastadorImpl con los parametros que correspondan a la subasta del”peluche rojo”, registrarlo en el POA y obtener su IOR (referencia remota)
3. Registrar esa referencia en el servidor de nombres de CORBA con el nombre ”SubastadorPeluche”
4. Quedar a la espera
Implementacion del cliente
1. Iniciar el ORB de CORBA
2. Obtener del servidor de nombres la referencia asociada al nombre ”SubastadorPeluche” y hacer el narrow delobjeto CORBA generico a un objeto de tipo Subastador
3. Instanciar un servant de la clase PujadorImpl tomando los parametros que correspondan de la entrada estandar(metodos leerNombre(), leerCantidad()), registrarlo en el POA y obtener su IORs (referencia remota)
4. Una vez registrado, convertir (narrow) esa referencia a una referencia de tipo Pujador para pasarlas comoparametro en la invocacion del metodo anadirPuja() del objeto Subastador
Pasos para compilacion (una vez implementado):
1. Compilar el interfaz IDL (ya esta hecho)
$ idlj -fall subasta.idl
2. Compilar implementaciones y compilar el servidor
$ javac SubastadorImpl.java$ javac PujadorImpl.java$ javac ServidorSubastas.java
3. Compilar el cliente
$ javac ClienteSubastas.java
Pasos para ejecucion (una vez compilado):
1. Lanzar el demonio orbd (si no estaba lanzado ya)
$ orbd -ORBInitialHost localhost -ORBInitialPort 1111
4
2. Lanzar el servidor en otro terminal (queda a la espera)
$ java ServidorSubastas -ORBInitialHost localhost -ORBInitialPort 1111
3. Ejecutar el cliente 4 veces en distintos terminales (creando las distintas pujas)
$ java ClienteSubastas -ORBInitialHost localhost -ORBInitialPort 1111
Tareas adicionales:
Se puede comprobar el funcionamiento de los objetos y las llamadas realizando pujas mas complejas, con maspujadores, etc.
3. Documentacion a entregar
Para el ejercicio 2 se entregaran impresos los framentos de codigo fuente con el cliente y el servidor implementados.
• Comentar en el codigo cada uno de los pasos realizados
Se debe incluir una pequena explicacion del flujo de llamadas entre objetos en el ejemplo de la puja del ”pelucherojo”, describiendo los parametros que se pasan y quien los recibe.
5