CORBA IDL by wuxiangyu

VIEWS: 41 PAGES: 23

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

PARA MÁS INFORMACIÓN...

   Common Object Request Broker Architecture and
     Specifications (revisión 2.1) del OMG.
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.

module identificador
         {     /* 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.

interface ident [ : 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.

interface A {                –La excepción E tiene
      exception E;           los nombres globales:
      void f() raises E; }
                               ::A::E
interface B: A {
      void g() raises E; }     ::B::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 ] 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 declaraciones
   Constantes:
      const tipo identificador = expresión ;
   Atributos:
      [ readonly ] attribute tipo ident [ , ... ] ] ;
   Excepciones:
      exception ident { [ 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/gui
       de/idl/index.html
   Programas CORBA:
      http://www.infosys.tuwien.ac.at/Research/Co
       rba/software.html

								
To top