CORBA IDL Ramón Mª Gómez Labrador Deptº Lenguajes y Sistemas Informáticos Universidad de...

Preview:

Citation preview

CORBA IDLCORBA IDL

Ramón Mª Gómez Labrador

Deptº Lenguajes y Sistemas Informáticos

Universidad de Sevilla

ÍndiceÍ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.

CORBACORBA

CORBACORBA

•Interfaces

CORBACORBA

• Cliente

CORBACORBA

•Servidor

Características del IDLCaracterí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 IDLSintaxis 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 IDLEspecifiación IDL

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 IDLEspecifiación IDL

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)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

HerenciaHerencia

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 datosTipos 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 datosTipos 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]

OperacionesOperaciones

Formato de una operación[ atributo ] tipo identificador parámetros [ excepciones ]

Atributos:– Sentido único: oneway

Parámetros:( [ atributo tipo identificador [ , ... ] ] )

– Atributos: in out inout

Excepciones:raises ( excepción [ , excepción ] )

Otras declaracionesOtras declaraciones

Constantes:const tipo identificador = expresión ;

Atributos:[ readonly ] attribute tipo ident [ , ... ] ] ;

Excepciones:exception ident { [ miembros ] } ;

ExcepcionesExcepciones

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 1Ejemplo 1

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.}

}

–Iniciación del BOA:

Ejemplo 2Ejemplo 2

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); }

}

–Referencia niciación de un objeto:

Ejemplo 3Ejemplo 3

module CORBA {

typedef unsigned long PolicyType;

interface Policy {

readonly attribute PolicyType policy_type;

Policy copy ();

void destroy ();

}

typedef sequence<Policy> PolicyList;

}

–Política de seguridad de un objeto:

Ejemplo 4Ejemplo 4

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;}

–Gestión de dominios:

ORBs comercialesORBs 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ónMá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