Documentos de Académico
Documentos de Profesional
Documentos de Cultura
CORBA (y Mono )
1. Introducción y objetivos
2. La invocación remota en CORBA
3. Un ejemplo
4. La arquitectura
5. El Lenguaje de Definición de Interfaz
6. Los Servicios CORBA
7. El proyecto Mono (.NET )
• Similar al modelo:
– el programador define las interfaces remotas
– el CI genera delegados y esqueletos
• delegados: en el lenguaje del cliente
• esqueletos: en el lenguaje del servidor
• Novedades:
– LDI propio: CORBA IDL
– modelo propio de objeto
• los clientes no tienen por qué ser objetos
• objeto CORBA: un objeto remoto
– implementa una interfaz remota
– puede estar escrito en cualquier lenguaje
CORBA no soporta la noción de clase
interface Figura {
long dameVersion();
ObjetoGrafico dameEstado();
};
typedef sequence <Figura, 100> Todas;
interface Pizarra{
exception ExcepcionLleno {};
Figura creaFigura(in ObjetoGrafico g)
raises(ExcepcionLleno);
Todas dameLasFiguras();
long dameVersion();
};
#include <OB/CORBA.h>
#include <OB/CosNaming.h>
#include <Pizarra.h>
int main(int argc, char* argv[], char*[]) {
try{
CORBA::ORB_var elOrb = CORBA::ORB_init(argc, argv);
CORBA::Object_var refObj =
elOrb->resolve_initial_references(″NameService″);
CosNaming::NamingContext_var refSN =
CosNaming::NamingContext::_narrow(refObj.in());
CosNaming::Name nombre;
nombre.length(1);
nombre[0].id = CORBA::string_dup(″Pizarra");
nombre[0].kind = CORBA::string_dup("");
CORBA::Object_var obj = contextoInic->resolve(nombre);
Pizarra_var laPizarra = Pizarra::_narrow(obj.in());
Todas_var laListaFiguras;
laListaFiguras = laPizarra.dameLasFiguras();
ObjetoGrafico_var g;
g = laListaFiguras[0].dameEstado();
} catch(const CORBA::Exception& e) { ... }
}
interface RetroPizarra {
oneway void avisa(in int version);
}
• Novedades:
– adaptador de objetos,
– repositorio de interfaces,
– repositorio de implementaciones
• El núcleo del ORB
– similar al módulo de comunicaciones, más:
• operaciones para arrancarlo y pararlo,
• convertir entre RORs y cadenas,
• proveer de listas de argumentos para IMR dinámica
Tema 8 CORBA (y Mono) 22
Los componentes principales de la arquitectura CORBA
Repositorio de
Cliente Servidor
implementaciones
Adaptador de objetos
Programa cliente
Esqueleto de A
Delegado de A
Sirviente de A
Repositorio de
interfaces
Solicitud
Respuesta
Identificador de Nombre
IIOP Nombre del Número del POA
Nombre del objeto
repositorio interfaces ordenador de puerto en el POA
• IOR transitorio:
– dura lo que el proceso que aloja al objeto
– contiene los detalles del servidor
• IOR persistente:
– permanece entre activaciones del objeto CORBA
– contiene los detalles del IMR
Tema 8 CORBA (y Mono) 33
Cuestiones con los lenguajes de programación
interface NamingContext {
void bind(in Name n, in Object obj);
Enlaza en mi contexto el nombre dado y la referencia al objeto remoto
void list(in unsigned long how_many, out BindingList bl, out BindingIterator bi);
Retorna los nombres de los enlaces de mi contexto
};
A P XX T
Pizarra
B
C U W
D S R V
• Federación de SN:
– cada SN gestiona un subconjunto del árbol de
nombres
– algunos enlaces se refieren a CN en los
subconjuntos gestionados por otros SN
canal de eventos
suministrador consumidor
• Es un servicio de directorio:
– permite búsqueda de objetos por atributos
• establece una correspondencia:
{tipos y atributos de servicios} {RORs de objetos CORBA}
– donde:
• el tipo es un nombre
• cada atributo es un par (nombre, valor)
– el cliente especifica el tipo de servicio y lo
restringe con los atributos deseados
• los servidores de comercio pueden formar
federaciones
– comparten sus bases de datos
• El Servicio de Transacciones:
– Permite a los objetos CORBA participar en transacciones
• el cliente especifica una transacción como
– una secuencia de invocaciones de métodos remotos
– introducidas por un begin
– y terminadas por un commit o un rollback
• el ORB asocia un TID a las IMRs
– y se ocupa de los begin, commit y rollback
– implementa el protocolo de compromiso en dos fases
• El Servicio de Control de Concurrencia
– permite aplicar cerrojos sobre los accesos a los objetos
CORBA
– se puede usar independientemente de las transacciones
using System;
using System.IO;
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
using System;
using System.IO;
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;