Sistemas de
Información
Tecnologías de objetos distribuidos:
OMG-CORBA. Invocación dinámica
Agradecimientos: Juan Pavón Mestras (UCM), Jesus Villamor Lugo y Simon Pickin (UC3M), Juan José Gil Ríos (Terra)
1
CORBA
DII (Dinamic Invocation Interface)
DII
Ejemplos
[email protected]
2
Motivación
¿Qué es?
¿Para qué sirve?
¿Cómo se usa?
¿Cómo funciona?
¿Qué es?
¿Para qué sirve?
¿Cómo se usa?
¿Cómo funciona?
Repositorio de interfaces
CORBA Invocación dinámica
Motivación
El problema:
El modelo basado en stubs tiene algunas restricciones
Los stubs son generados en tiempo de compilación
Un cambio en el IDL implica rehacer todos los clientes
Hay algunas aplicaciones (navegadores, depuradores, intérpretes) que
requieren flexibilidad mayor porque:
No saben de antemano que interfaz tendrán los objetos a los que accederán
Necesitan la existencia de mecanismos que les permitan:
Descubrir esas interfaces
Crear de forma dinámica la petición de operación
La solución: CORBA ofrece una solución basada en:
El repositorio de interfaces: IR (Interface Repository)
Guarda la descripción de las interfaces
La interfaz de invocación dinámica: DII (Dinamic Invocation Interface)
Permite construir en tiempo de ejecución una petición de una determinada
operación
[email protected]
3
CORBA
DII (Dinamic Invocation Interface)
¿Qué es?
Interfaz Corba que permite la construcción dinámica
de invocaciones en tiempo de ejecución para un
determinado objeto remoto
¿Para qué sirve?
Para dar más flexibilidad al cliente ya que no necesita
conocer el interfaz de los objetos a los que va a
invocar en tiempo de compilación puede:
descubrir el interfaz de los objetos
construir la invocación
en tiempo de ejecución
[email protected]
4
CORBA
DII (Dinamic Invocation Interface)
¿Cómo se usa?
Todos estos datos se obtienen del Repositorio de Interfaces (IR)
De cara al servidor la invocación es idéntica a una que llega a través
de la interfaz estática, pero dentro del cliente se logra una
flexibilidad fundamental en arquitecturas complejas y dinámicas.
[email protected]
5
En vez de utilizar una llamada a una función determinada de un
objeto concreto, que el cliente puede especificar a través de una
llamada o conjunto de ellas:
el objeto
la invocación
los parámetros a pasar a la invocación
Una invocación dinámica se compone de:
Una referencia al objeto,
Una operación
Una lista de parámetros
CORBA (Invocación dinámica)
¿Cómo funciona?
La interfaz del servidor se descubre en tiempo de
ejecución, utilizando el repositorio de interfaces
La petición se construye con la interfaz de invocación
dinámica DII
Client
Object
Implementation
Dynamic
Dynamic
Invocation
Invocation
Client
Client
IDLIDL
Stubs
Stubs
Server
Server
IDL Stubs
Stubs
IDL
Object
Object
Adapter
Adapter
Request
Request
Object Request
Object
Request Broker
Broker CoreCore
El Cliente no necesita Stubs de compilación
El Servidor percibe la misma llamada
[email protected]
6
CORBA IR (Interface Repository)
¿Qué es?
Un repositorio de información que permite:
Es un servicio estándar CORBA disponible a través del
ORB que ofrece objetos persistentes que representan
la información IDL de los interfaces disponibles en
CORBA, de una forma accesible en tiempo de
ejecución (run-time)
Localizar los objetos en tiempo de ejecución
Activar la implementación de los objetos (esta funcionalidad
ahora la realiza el POA)
[email protected]
7
CORBA IR (Interface Repository)
¿Para qué sirve?
Proporciona información de los objetos en tiempo de
ejecución puede ser utilizado:
Por el ORB para realizar peticiones.
Por el Programador de aplicaciones
Para acceder a objetos cuya interfaz no se conocía en tiempo de
compilación
Para determinar que operaciones son válidas para un objeto.
Otras funcionalidades de IR:
Instalación de implementaciones
Control de las políticas para la activación y ejecución de las
implementaciones de los objetos. Por ejemplo, los permisos por
usuario para acceder e invocar los objetos son especificados aquí.
Con la introducción de POA en CORBA 2.2, las políticas de
activación y ejecución se localizan ahora dentro de POA, en el
propio código del servidor en lugar de hacerlo en IR
[email protected]
8
CORBA IR (Interface Repository)
¿Cómo funciona?
Hay que obtener una referencia al Servicio proporcionado por el ORB
El servicio IR proporciona una base de datos de definiciones de objetos
Cada objeto representa una definición IDL
Los objetos están anidados en una estructura que refleja las definiciones IDL
Es posible navegar y buscar definiciones en dicha estructura
Las definiciones pueden suministrarse al Repositorio de Interfaces:
Usando una utilidad (irfeed en ORBacus, putidl en OrbixWeb, idl2ir en Visibroker)
Desde cualquier programa usando las funciones de escritura de la interfaz del
Repositorio de Interfaces
Se puede acceder al Repositorio de Interfaces como un servicio bien
definido (se accede al objeto Repository raíz de la jerarquía):
org.omg.CORBA.Object obj = orb.resolve_initial_references(“InterfaceRepository”);
org.omg.CORBA.Object obj = orb.resolve_initial_references(“InterfaceRepository”);
org.omg.CORBA.Repository intfRepository = org.omg.CORBA.RepositoryHelper.narrow(obj);
org.omg.CORBA.Repository intfRepository = org.omg.CORBA.RepositoryHelper.narrow(obj);
9
[email protected]
CORBA IR (Interface Repository)
¿Cómo funciona?
Está implementado como un conjunto de objetos
persistentes (metadatos) que representan la información
que contiene (un objeto por cada tipo de construcción IDL)
ModuleDef
InterfaceDef
OperationDef
ParameterDef
AttributeDef
ConstantDef
ExceptionDef
TypeDef
además del objeto
Repository, que contiene a todos
[email protected]
10
CORBA IR (Interface Repository)
Contained
Container
Repository
ConstantDef
TypeDef
ModuleDef
ExceptionDef
InterfaceDef
ConstantDef
TypeDef
InterfaceDef
ExceptionDef
ModuleDef
ConstantDef
TypeDef
OperationDef
ExceptionDef
AttributeDef
ParameterDef
ExceptionDef
11
CORBA
Invocación Estática vs Dinámica
Invocaciones Estáticas
Más fáciles de programar
Chequeo de tipos más robusto
Buen rendimiento
Autodocumentado
Invocaciones Dinámicas
Sistema más extensible
Soporte de búsqueda de servicios en “run-time”
Permite escribir código más genérico
[email protected]
12
CORBA: Invocación Dinámica
Procedimiento
1.
2.
4.
5.
6.
Partiendo del IR obtener:
la interfaz
la descripción del método (si no se utiliza create_operation_list)
Crear y configurar el objeto request. (2 formas):
crear una lista de argumentos NVList y luego un objeto request
crear un objeto request y luego añadirle los argumentos
Solicitar al ORB que envie la petición al objeto destino con invoke
(3 formas de invocar la petición):
Síncrona
síncrona diferida
asíncrona
Recoger los resultados (con return_value del objeto request)
Liberar los recursos (del objeto request y la NVList si existe)
[email protected]
13
CORBA: Invocación Dinámica
Procedimiento
Client Object
1. Obtener el nombre de la interfaz
get_interface()
2. Obtener la descripción del método
lookup_name ()
describe ()
3. Crear la lista de argumentos
create_list ()
add_item ()...add_item ()...add_item ()
Object
Interface
Repository
4. Crear la petición
create_request ()
5.
Invocar el método remoto
obien
asíncrona(“oneway”):
send ()
14
invocaciónsíncrona:
obien
síncronadiferida:
3 formas de
hacer la
invocación
remota
invoke ()
send()
get_response ()
Modelos de Interacción
invoke()
bloquear
send()
versiones anteriores:
send_deferred()
get_response()
bloquear
send()
versiones anteriores:
send_oneway()
Síncrono
Síncrono Diferido
Asíncrono
Invocación síncrona (bloqueante): se envía la petición y se obtiene un
resultado. (semántica de “exactly-once” y si hay una excepción “at-most-once”)
Invocación sincrónica diferida (no bloqueante): disponible únicamente con
invocación dinámica. Antes de invocar get_response(), se puede invocar
poll_response() para saber si la respuesta está lista.
Invocación asíncrona o oneway (semántica de “best-effort” ¡CUIDADO! )
[email protected]
15
La Interfaz de Invocación
Dinámica (DII)
Existen 4 interfaces de pseudo-objetos CORBA:
Operaciones que soportan todos los objetos CORBA. Para
CORBA::Object
invocaciones dinámicas:
get_interface()
create_request()
_request()
CORBA::Request
Representa una petición de operación y ofrece métodos para darle
parámetros, para invocarla, y leer los resultados
CORBA::NVList
CORBA::ORB
Permite construir listas de parámetros
Permite crear objetos NVList, y enviar y recibir múltiples peticiones
[email protected]
16
Interfaces de Invocación Dinámica
get_implementation
get_implementation
get_interface
get_interface
is_nill
is_nill
duplicate
duplicate
release
release
is_a
is_
Comentarios de: Tecnologías de Objetos Distribuidos: OMG-CORBA (Invocación Dinámica) (0)
No hay comentarios