Está en la página 1de 5

Pr

actica 5. Objetos remotos. CORBA


SCS, 2009/10
25 de noviembre de 2009

Indice
1. Ejercicio 1: Compilaci
on y uso de objetos remotos CORBA
1.1. Compilaci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2. Ejecuci
on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.3. Tareas a realizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2. Ejercicio 2: Uso de retrollamadas (callback )

2.1. Pasos a seguir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.2. Tareas a realizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3. Documentaci
on a entregar

1.

Ejercicio 1: Compilaci
on y uso de objetos remotos CORBA

Se mostrar
a el un ejemplo simple de creaci
on de objetos remotos en CORBA.
Se usar
a el c
odigo de ejemplo que implementa una calculadora remota comentado en los apuntes de la asignatura.
Descarga: corba1.tar.gz
corba1.zip
El c
odigo de partida incluye:
calculadora.idl: Especificaci
on IDL del interfaz de la calculadora remota
Define el m
odulo 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: Implementaci
on (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 registra
en 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 objeto
CORBA calculadora remota y ejecutas sus metodos

1.1.

Compilaci
on

1. Descomprimir el paquete.
$ tar xzvf corba1.tar.gz
$ cd corba1
2. Compilar el interfaz IDL (ya est
a 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.

Ejecuci
on

Desde tres terminales distintos


1. Lanzar el demonio orbd (servicios b
asicos 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 autom
aticamente por el compilador idlj
Prestad especial atenci
on a las implementaciones del servidor y el cliente para ver la dinamica tpica que se debe seguir
a la hora de crear y hacer disponibles objetos CORBA y a la hora de recuperarlos del servidor de nombres y lanzar
invocaciones sobre ellos.

2.

Ejercicio 2: Uso de retrollamadas (callback )

Se ver
a un ejemplo del uso de retrollamadas entre objetos CORBA.
De forma general el mecanismo de retrollamadas (callback ) permite que se pase un comprotamiento (codigo) como
argumento a otra pieza de c
odigo distinta
2

El caso tpico es el de un cliente que se registra en alg


un tipo de servidor que debe realizar alguna tarea, de modo que
el 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 caraterstica exclusiva de CORBA (puede hacerse en cualquier programa)
ni de los entornos orientados a objetos (aunque el uso de objetos lo simplifica)
M
as informaci
on: callbacks [Wikipedia]
En este ejercicio se ver
a el uso de retrollamadas en una sistema de subastas simulado.
Tenemos 2 tipos de objetos (en nuesto caso ser
an interfaces IDL de CORBA)
Subastador: gestiona la subasta de un producto
El producto subastado tiene un nombre y un precio mnimo
La primera puja recibida que supere ese precio mnimo ganara la subasta
Existe un n
umero m
aximo de pujas.
Si no se alcanza antes el precio mnimo, al llegar a ese lmite se determina c
ual es la puja mas alta, que ser
a la
ganadora
El Subastador recibe pujas, en forma de objetos Pujador mediante el metodo anadirPujador(), que se van
almacenado en un vector [fase de registro]
Una vez concluida la puja se notifica el resultado al ganador y a los perdedores incocando sus metodos notificarResultado() [fase de notificaci
on]
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 ser
a comunicado mediante la invocacion del metodo notificarResultado() de cada una
de los objetos Pujador implicados (callback )
Se parte de un c
odigo de ejemplo donde el comportamiento de ambos tipos de objetos y las reglas de la subasta ya est
an
implementadas. Se tratar
a de implementar un servidor y un cliente que creen los objetos CORBA Subastador y Pujador
y 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: Implementaci
on (servant) del interfaz IDL Subastador
Hereda de la clase SubastadorPOA generada por el compilador idlj
PujadorImpl.java: Implementaci
on del objeto (servant) del interfaz IDL Pujador
Hereda de la clase PujadorPOA generada por el compilador idlj
ServidorSubastas.java: Servidor vaco
ClienteSubastas.java: Cliente vaco
3

2.2.

Tareas a realizar

Se pide implementar un servidor y un cliente que hagan uso de los objetos CORBA implementados en una peque
na
subasta.
Se subastar
a un peluche rojo, con importe mnimo de 100 euros y que admite un maximo de 3 pujas
Habr
a 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.
Implementaci
on 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
Implementaci
on del cliente
1. Iniciar el ORB de CORBA
2. Obtener del servidor de nombres la referencia asociada al nombre SubastadorPeluche y hacer el narrow del
objeto CORBA generico a un objeto de tipo Subastador
3. Instanciar un servant de la clase PujadorImpl tomando los parametros que correspondan de la entrada est
andar
(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 pas
arlas como
par
ametro en la invocaci
on del metodo anadirPuja() del objeto Subastador
Pasos para compilaci
on (una vez implementado):
1. Compilar el interfaz IDL (ya est
a 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 ejecuci
on (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 m
as
pujadores, etc.

3.

Documentaci
on a entregar
Para el ejercicio 2 se entregar
an impresos los framentos de codigo fuente con el cliente y el servidor implementados.
Comentar en el c
odigo cada uno de los pasos realizados
Se debe incluir una peque
na explicaci
on del flujo de llamadas entre objetos en el ejemplo de la puja del peluche
rojo, describiendo los par
ametros que se pasan y quien los recibe.

También podría gustarte