240 likes | 484 Views
CORBA IDL. Ramón Mª Gómez Labrador Deptº Lenguajes y Sistemas Informáticos Universidad de Sevilla. Índice. Esquemas generales sobre CORBA. Módulos e interfaces IDL. Ejemplo: cliente/servidor chat. Herencia. Partes de un interfaz IDL. Ejemplos. Comparativa de ORBs. Más información.
E N D
CORBA IDL Ramón Mª Gómez Labrador Deptº Lenguajes y Sistemas Informáticos Universidad de Sevilla
Índice • Esquemas generales sobre CORBA. • Módulos e interfaces IDL. • Ejemplo: cliente/servidor chat. • Herencia. • Partes de un interfaz IDL. • Ejemplos. • Comparativa de ORBs. • Más información.
CORBA • Interfaces
CORBA • Cliente
CORBA • Servidor
Características del IDL • Describe operaciones y parámetros de cada interfaz. • Lenguaje declarativo. • Sintáxis similar al ANSI C++. • Preprocesado como C++ (más #pragma). • Usa el código de caracteres ISO-Latin1. Common Object Request Broker Architecture and Specifications (revisión 2.1) del OMG. PARA MÁS INFORMACIÓN...
Sintaxis IDL • Palabras reservadas: any attribute boolean case char const context default double enum exception FALSE fixed float in inout interface long module Object octet oneway out raises readonly sequence short string struct switch TRUE typedef unsigned union void wchar wstring • Signos de puntuación: ; { } : , = + - ( ) < > [ ] ‘ “ \ | ^ & * / % ~ • Preprocesado: # ## ! || &&
Especifiación IDL • Módulos: • Declaración de tipos globales. • Declaración de constantes globales. • Declaración de excepciones globales. • Interfaces. • Módulos. moduleidentificador { /* Descripción */ }
Especifiación IDL • Interfaces: • Declaración de tipos. • Declaración de constantes. • Declaración de excepciones. • Declaracion de atributos. • Declaración de operaciones. interfaceident [ :herencia, ... ] { /* Descripción */ }
Especifiación IDL (ejemplo) Cliente / servidor IRC: • Definiciones IDL • Broadcaster.idl • Receiver.idl • Interfaces Java • Broadcaster_impl.java • Receiver_impl.java • Interfaces C++/Xwindows • Broadcaster_impl.cpp • Receiver_impl.java y X11/Receiver_impl.cpp
Herencia • Características: • Herencia múltiple. • Operador de resolución de nombre: :: • No pueden redefinirse las operaciones. • No se permiten declaraciones ambiguas. • La excepción E tiene los nombres globales: ::A::E ::B::E interface A { exception E; void f() raises E; } interface B: A { void g() raises E; }
Tipos de datos • Tipos básicos: • Enteros: short long long long unsigned short unsigned long unsigned long long • Coma flotante: float double long double • Carácter: char wchar • Booleano: boolean • Octal: octet • Cualquier tipo básico: any
Tipos de datos • Tipos de plantilla: • Cadena: string wstring • Secuencia: sequence • Coma fija: fixed • Tipos compuestos: • Estructura: struct • Unión: union • Enumeración: enum • Vectores: tipo[n]
Operaciones Formato de una operación [ atributo ] tipoidentificadorparámetros [ excepciones ] • Atributos: • Sentido único: oneway • Parámetros: ( [ atributotipoidentificador [ , ... ] ] ) • Atributos: in out inout • Excepciones: raises (excepción [ ,excepción ] )
Otras declaraciones • Constantes: consttipo identificador=expresión; • Atributos: [ readonly ] attributetipoident [ , ... ] ] ; • Excepciones: exceptionident { [ miembros ] } ;
Excepciones • Estados: • Operación terminada: COMPLETED_YES • Oper. no terminada: COMPLETED_NO • Indetermiante: COMPLETED_MAYBE • Tipos: • Sin excepción: NO_EXCEPTION • Del usuario: USER_EXCEPTION • Del sistema: SYSTEM_EXCEPTION
Ejemplo 1 Iniciación del BOA: module CORBA { interface ORB { typedef sequence<string> arg_list; typedef string Oaid; BOA BOA_init (inout arg_list argv, in BOA boa_identifier); // De igual modo, pueden definirse rutinas para otros AO. } }
Ejemplo 2 Referencia niciación de un objeto: module CORBA { interface ORB { typedef string ObjectId; typedef sequence<ObjectId> ObjectIdList; exception InvalidName {}; ObjectList list_initial_services (); Object resolve_initial_refernces (in ObjectId identifier) raises (InvalidName); } }
Ejemplo 3 Política de seguridad de un objeto: module CORBA { typedef unsigned long PolicyType; interface Policy { readonly attribute PolicyType policy_type; Policy copy (); void destroy (); } typedef sequence<Policy> PolicyList; }
Ejemplo 4 Gestión de dominios: module CORBA { interface DomainManager { Policy get_domain_policy (in PolicyType policy_type); } const PolicyType SecConstruction = 11; interface ConstructionPolicy: Policy { void make_domain_manager (in CORBA::InterfaceDef object_type, in boolean const_policy); } typedef sequence<DomainManager> DomaninManagerList;}
ORBs comerciales • Comparativa de características de los núcleos. • Comparativa de los servicios CORBA ofrecidos. • Comparativa de las plataformas en que pueden ejecutarse.
Más información • OMG: http://www.omg.org/ • Especificaciones CORBA/IIOP 2.2: http://www.omg.org/corbiiop.htm • Java-IDL: http://java.sun.com/products/jdk/1.2/docs/guide/idl/index.html • Programas CORBA: http://www.infosys.tuwien.ac.at/Research/Corba/software.html