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