Download Sistemas Distribuidos con CORBA
Document related concepts
no text concepts found
Transcript
Programación
Concurrente y Distribuida
Prácticas
Tema 2: Sistemas Distribuidos
con CORBA
1
Tema 2: Sistemas Distribuidos con CORBA
Índice:
1. ¿Qué es CORBA?
2. Arquitectura de un sistema CORBA
3. Alternativas a CORBA
4. El lenguaje IDL
2
Tema 2: Sistemas Distribuidos con CORBA
1. ¿Qué es CORBA?
CORBA NO es:
Ni un lenguaje de programación
Ni un sistema operativo
CORBA es un estándar de la OMG que:
Establece una forma de construcción de software ínter
operativo empleando tecnología orientada a objetos
CORBA es sólo una especificación
Dicha especificación es implementada por las distintas
plataformas que construyen los fabricantes
Dicha especificación recoge:
La forma en que se define la interfaz de los objetos
Cómo dichos objetos interactúan con ellos
Servicios y facilidades disponibles a los objetos
3
Tema 2: Sistemas Distribuidos con CORBA
1. ¿Qué es CORBA?
CORBA nos proporciona…
Independencia de lenguaje de programación
IDL (Interface Definition Language): Lenguaje neutral que
permite definir las interfaces de los objetos
Los objetos se implementan en nuestro lenguaje habitual de
programación
La traducción de IDL a los distintos lenguajes de
programación está estandarizada (¡y automatizada!)
Independencia de sistema operativo y hardware
La especificación recoge…
• Los protocolos por los que interactúan los objetos
• La forma en la que se representan y transmiten los datos
Independencia de localización física de los objetos
4
op1()
metodo2()
op2()
opA()
metodoA()
…
metodo1()
…
atributo1
opAtrib1()
atributo2
…
Tema 2: Sistemas Distribuidos con CORBA
1. ¿Qué es CORBA?
5
Tema 2: Sistemas Distribuidos con CORBA
Índice:
1. ¿Qué es CORBA?
2. Arquitectura de un sistema CORBA
3. Alternativas a CORBA
4. El lenguaje IDL
6
Tema 2: Sistemas Distribuidos con CORBA
2. Arquitectura de un sistema CORBA
Objeto 1
AO
ORB
Objeto 2
Facilidades
CORBA
Servicios
CORBA
ORB
IIOP
AO
ORB
7
Tema 2: Sistemas Distribuidos con CORBA
2. Arquitectura de un sistema CORBA
Servicios CORBA
Implementan funciones de bajo nivel de uso habitual
Interfaz estandarizada
Implementación de cada servicio es opcional
Algunos servicios definidos en estándar:
Servicio de nombres
Servicio de localización
Servicio de eventos
Servicio de propiedades
Objeto 1
AO
Objeto 2
Servicios
CORBA
Facilidades
CORBA
ORB
AO
ORB
IIOP
8
Tema 2: Sistemas Distribuidos con CORBA
2. Arquitectura de un sistema CORBA
Facilidades CORBA
Implementan funciones de alto nivel de uso habitual
Tipos de facilidades:
Horizontales: común a cualquier tipo de aplicación
Verticales: específicas a un ámbito determinado
Facilidades horizontales:
Interfaz de usuario
Administración de información
Administración de sistemas
Administración de tareas
Objeto 1
AO
Objeto 2
Servicios
CORBA
Facilidades
CORBA
ORB
AO
ORB
IIOP
9
Tema 2: Sistemas Distribuidos con CORBA
2. Arquitectura de un sistema CORBA
ORB (Object Request Broker)
Actúa como un bus de interconexión de objetos
Gestiona:
comunicación entre objetos
Transferencia de datos (Marshalling/Unmarshalling)
IIOP (Internet Inter-ORB Protocol)
Permite interoperación entre
ORB’s
Basado en TCP/IP
No es el único protocolo InterORB
Objeto 1
AO
Objeto 2
Servicios
CORBA
Facilidades
CORBA
ORB
AO
ORB
IIOP
10
Tema 2: Sistemas Distribuidos con CORBA
2. Arquitectura de un sistema CORBA
Adaptador de Objetos
Actúa como interfaz entre ORB y objetos
CORBA estandariza interfaz de adaptador
CORBA 1.0: BOA (Basic Object Adapter)
CORBA 2.0, 3.0: POA (Portable Object Adapter)
Funciones:
Activación de objetos
Mapeo entre interfaces y sus
implementaciones
…
Objeto 1
AO
Objeto 2
Servicios
CORBA
Facilidades
CORBA
ORB
AO
ORB
IIOP
11
Tema 2: Sistemas Distribuidos con CORBA
Índice:
1. ¿Qué es CORBA?
2. Arquitectura de un sistema CORBA
3. Alternativas a CORBA
4. El lenguaje IDL
12
Tema 2: Sistemas Distribuidos con CORBA
3. Alternativas a CORBA
Programación mediante interfaz de sockets
¡Muy bajo nivel!
RPC (Remote Procedure Call)
Protocolo de llamada a procedimientos remotos
Más bajo nivel
DCE (Distributed Computing Environment)
Conjunto de servicios estandarizados de OSF
Idea similar a CORBA
Murió
DCOM (Distributed Component Object Model)
Tecnología propietaria de Microsoft
Sólo para plataformas Windows
Relativamente robusto
Abandonada a favor de .NET
13
Tema 2: Sistemas Distribuidos con CORBA
3. Alternativas a CORBA
PVM (Parallel Virtual Machine)
Librerías C/C++ para programación distribuida
Muy usado en ingeniería y matemáticas
Versión 3: ¡1993!
http://www.csm.ornl.gov/pvm/
SR (Synchronizing Resources)
Lenguaje de programación de la universidad de Arizona
Exclusivamente empleado en ámbito universitario
http://www.cs.arizona.edu/sr/
MPD (Multithreaded, Parallel and Distributed)
Sucesor de SR
http://www.cs.arizona.edu/mpd/
14
Tema 2: Sistemas Distribuidos con CORBA
3. Alternativas a CORBA
Java RMI
Arquitectura muy similar a CORBA (compatible desde JDK 1.2)
Ventaja: paso de objetos por valor
Inconveniente: implementación ligada a interfaz
.NET Remoting
Interfaz de invocación remota de plataforma .NET
Similar a CORBA y a Java RMI
Sólo plataforma .NET (.NET 3.0 forma parte de Windows Vista)
Servicios Web
Colección de protocolos y estándares que sirve para
intercambiar datos entre aplicaciones
Especificación de interfaces: WSDL
Transporte: HTTP
Invocación remota: SOAP
Representación de datos: XML
15
Tema 2: Sistemas Distribuidos con CORBA
3. Alternativas a CORBA
Inconvenientes de CORBA
Complejo y extenso
Diferencias importantes entre fabricantes de plataformas
Tecnología en evolución
¿Poco futuro?
16
Tema 2: Sistemas Distribuidos con CORBA
Índice:
1. ¿Qué es CORBA?
2. Arquitectura de un sistema CORBA
3. Alternativas a CORBA
4. El lenguaje IDL
17
Tema 2: Sistemas Distribuidos con CORBA
4. El lenguaje IDL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Notas generales
Concepto de mapping
El tipo interface
Tipos predefinidos
Constantes
Tipos compuestos
Creación de tipos
Tipos contenedores
Herencia
Excepciones
Módulos
18
Tema 2: Sistemas Distribuidos con CORBA
4. El lenguaje IDL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Notas generales
Concepto de mapping
El tipo interface
Tipos predefinidos
Constantes
Tipos compuestos
Creación de tipos
Tipos contenedores
Herencia
Excepciones
Módulos
19
Tema 2: Sistemas Distribuidos con CORBA
4.1 Notas generales
Interface Definition Language: no hay sentencias
“ejecutables”
Permite definir:
Interfaces, compuestas por
• Atributos
• Operaciones
Tipos y constantes
Excepciones
Agrupaciones de todo lo anterior (módulos)
20
Tema 2: Sistemas Distribuidos con CORBA
4.1 Notas generales
Aspectos léxicos
Mayúsculas y minúsculas:
Son distintas, PERO…
…en un mismo ámbito, dos identificadores no se pueden
diferenciar sólo en su uso
Toda declaración termina en “;”
Comentarios:
Estilo C++: // comentario hasta final de línea
Estilo C: /* Comentario hasta cierre de comentario */
Existe preprocesador léxico:
#define, #include, #ifdef…#endif, #ifndef...#endif, etc.
Normalmente: archivos con terminación “.idl”
21
Tema 2: Sistemas Distribuidos con CORBA
4. El lenguaje IDL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Notas generales
Concepto de mapping
El tipo interface
Tipos predefinidos
Constantes
Tipos compuestos
Creación de tipos
Tipos contenedores
Herencia
Excepciones
Módulos
22
Tema 2: Sistemas Distribuidos con CORBA
4.2 Concepto de mapping
Definición: Elementos o construcciones del lenguaje
destino al que se traduce cada elemento IDL
Mapping está normalizado para los distintos lenguajes:
Java
C++
Ada
…
23
Tema 2: Sistemas Distribuidos con CORBA
4. El lenguaje IDL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Notas generales
Concepto de mapping
El tipo interface
Tipos predefinidos
Constantes
Tipos compuestos
Creación de tipos
Tipos contenedores
Herencia
Excepciones
Módulos
24
Tema 2: Sistemas Distribuidos con CORBA
4.3 El tipo interface
Es un tipo compuesto en IDL
Define una interfaz de objetos
Mapping: se traduce a una interfaz Java
El traductor genera cierta infraestructura para cada interfaz
Sintaxis de la declaración básica:
interface nombre
{
// declaración de atributos
[readonly] attribute tipo nombre_atributo;
readonly attribute long contador;
attribute string nombre;
// declaración de operaciones
};
[oneway] tipo nombre_operacion (modo tipo nombre_param1, …);
long calculo (in long a, in long b);
void generar (inout long clave, out string resultado);
oneway void registrar (in string nombre);
25
Tema 2: Sistemas Distribuidos con CORBA
4.3 El tipo interface
No hay sobrecarga en IDL
¿La soportaría cualquier lenguaje al que se traduzca?
No pueden coincidir los nombres de una operación y un
atributo
No existen
Constructores
Destructores
Modificadores de acceso (private, public, protected)
Mapping atributos:
Una operación de lectura y otra de escritura (si no readonly)
interface nombre
{
attribute long
contador;
readonly
attribute
long contador;
…
interface nombre
{
int contador(); // Accessor
void contador(int value); // Mutator
…
26
Tema 2: Sistemas Distribuidos con CORBA
4.3 El tipo interface
Mapping operaciones: métodos Java
Parámetros en modo out o inout: clases envoltura
Usa clases envoltura específicas de CORBA en lugar de Java:
Ejemplo: org.omg.CORBA.intHolder
En CORBA: tipo interfaz siempre es un tipo por
referencia
Nunca se pasan objetos CORBA por valor
27
Tema 2: Sistemas Distribuidos con CORBA
4. El lenguaje IDL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Notas generales
Concepto de mapping
El tipo interface
Tipos predefinidos
Constantes
Tipos compuestos
Creación de tipos
Tipos contenedores
Herencia
Excepciones
Módulos
28
Tema 2: Sistemas Distribuidos con CORBA
4.4 Tipos predefinidos
Descripción
Tipo IDL
Mapping
Java
void
Tipo nulo
void
boolean
Tipo lógico
boolean
char
Carácter básico
char
wchar
Carácter ampliado (dep. implementación) char
float
Número real
float
double
Número real de doble precisión
double
long double
Número real largo de doble precisión
double
long
Número entero (32 bits)
int
long long
Número entero largo (64 bits)
long
unsigned long Número entero (32 bits) sin signo
int
unsigned long Número entero largo (64 bits) sin signo
long
long
29
Tema 2: Sistemas Distribuidos con CORBA
4.4 Tipos predefinidos
Descripción
Tipo IDL
short
Entero corto (16 bits)
Mapping
Java
short
unsigned short Entero corto (16 bits) sin signo
short
octect
Byte (8 bits)
byte
string
Cadena de caracteres
String
30
Tema 2: Sistemas Distribuidos con CORBA
4. El lenguaje IDL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Notas generales
Concepto de mapping
El tipo interface
Tipos predefinidos
Constantes
Tipos compuestos
Creación de tipos
Tipos contenedores
Herencia
Excepciones
Módulos
31
Tema 2: Sistemas Distribuidos con CORBA
4.5 Constantes
Sintaxis:
const tipo nombre= valor;
Se puden declarar…
Dentro de una interfaz
Fuera de cualquier interfaz
Mapping:
const tipo nombre=valor;
interface nombreInterface
{
const tipo nombre=valor;
…
}
interface nombre
{ public static final tipo value=valor; }
interface nombreInterface
{
public static final tipo nombre=valor;
…
}
32
Tema 2: Sistemas Distribuidos con CORBA
4. El lenguaje IDL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Notas generales
Concepto de mapping
El tipo interface
Tipos predefinidos
Constantes
Tipos compuestos
Creación de tipos
Tipos contenedores
Herencia
Excepciones
Módulos
33
Tema 2: Sistemas Distribuidos con CORBA
4.6 Tipos compuestos
Enumerados
Sintaxis:
enum nombre_enumerado {literal1, literal2, … literaln};
Mapping:
public class nombre_enumerado implements org.omg.CORBA.portable.IDLEntity
{
private int __value;
…
public static final int _literal1 = 0;
public static final nombre_enum literal1 = new nombre_enum(_literal1);
…
protected nombre_enum (int value)
{
__value = value;
…
}
…
34
Tema 2: Sistemas Distribuidos con CORBA
4.6 Tipos compuestos
Enumerados (cont.)
No se puede suponer relación de orden entre los
literales
nombre_enumerado
literal1
Uso:
nombre_enumerado var1= nombre_enumerado.literal1;
nombre_enumerado var2= var1;
…
if (var1 == var2)
…
literal2
literaln
Cierto si var1 y var2
apuntan al mismo objeto
35
Tema 2: Sistemas Distribuidos con CORBA
4.6 Tipos compuestos
Estructuras
Sintaxis:
struct nombre_structura
{
tipo1 campo1;
…
tipon campon;
};
Mapping:
public final class nombre_struct implements org.omg.CORBA.portable.IDLEntity
{
public tipo1 campo1 = …;
…
public nombre_struct (tipo1 _campo1, …)
{
campo1 = _campo1;
…
}…
36
Tema 2: Sistemas Distribuidos con CORBA
4. El lenguaje IDL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Notas generales
Concepto de mapping
El tipo interface
Tipos predefinidos
Constantes
Tipos compuestos
Creación de tipos
Tipos contenedores
Herencia
Excepciones
Módulos
37
Tema 2: Sistemas Distribuidos con CORBA
4.7 Creación de tipos
Sintaxis:
typedef tipo nombre_tipo;
Mapping: No ha lugar
El nombre de tipo creado se sustituye por el tipo equivalente
Uso principal: tipos contenedores
Sólo se pueden crear mediante typedef
38
Tema 2: Sistemas Distribuidos con CORBA
4. El lenguaje IDL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Notas generales
Concepto de mapping
El tipo interface
Tipos predefinidos
Constantes
Tipos compuestos
Creación de tipos
Tipos contenedores
Herencia
Excepciones
Módulos
39
Tema 2: Sistemas Distribuidos con CORBA
4.8 Tipos contenedores
Arrays
Los atributos de tipo array deben declararse mediante
typedef
Sintaxis:
typedef tipo_base tipo_array [tamaño];
…
interface I
{
attribute tipo_array atributo1;
…
};
Mapping: array Java del tipo resultante de aplicar
mapping al tipo base
Tamaño de array siempre es fijo
Rango del índice: depende de lenguaje de programación
40
Tema 2: Sistemas Distribuidos con CORBA
4.8 Tipos contenedores
Secuencias
Secuencia: sucesión de elementos del mismo tipo (lista)
Los atributos de tipo secuencia deben declararse
mediante typedef
Dos tipos de secuencias:
Limitadas (bounded)
Ilimitadas (unbounded)
Sintaxis:
typedef sequence<tipo_base> tipo_secuencia;
// Ilimitada
typedef sequence<tipo_base,tamaño> tipo_secuencia; // limitada
…
interface I
{
attribute tipo_secuencia atributo1;
…
41
Tema 2: Sistemas Distribuidos con CORBA
4.8 Tipos contenedores
Secuencias (cont.)
Mapping: array Java del tipo resultante de aplicar
mapping al tipo base
En Java, tanto arrays como secuencias:
¡Una referencia nula a un array java no es una
secuencia ni un array válido!
42
Tema 2: Sistemas Distribuidos con CORBA
4. El lenguaje IDL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Notas generales
Concepto de mapping
El tipo interface
Tipos predefinidos
Constantes
Tipos compuestos
Creación de tipos
Tipos contenedores
Herencia
Excepciones
Módulos
43
Tema 2: Sistemas Distribuidos con CORBA
4.9 Herencia
IDL soporta herencia múltiple
Sintaxis:
A
B
C
1
interface A
{
…
};
interface B
{
…
};
interface C:A,B
{
…
};
Mapping: las interfaces Java generadas reflejan la
relación de herencia entre las interfaces IDL
(En Java sí es posible herencia múltiple entre interfaces)
44
Tema 2: Sistemas Distribuidos con CORBA
4.9 Herencia
Los métodos no se pueden…
Sobrecargar
Redefinir
Ocultar
Si se emplea herencia múltiple: no se puede heredar de
clases con nombres coincidentes de atributos y/o
operaciones
¿Lo soportaría el lenguaje destino?
45
Tema 2: Sistemas Distribuidos con CORBA
4. El lenguaje IDL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Notas generales
Concepto de mapping
El tipo interface
Tipos predefinidos
Constantes
Tipos compuestos
Creación de tipos
Tipos contenedores
Herencia
Excepciones
Módulos
46
Tema 2: Sistemas Distribuidos con CORBA
4.10 Excepciones
Las operaciones de los objetos CORBA pueden lanzar
excepciones
Excepciones se lanzan en servidor y se capturan en cliente
IDL permite por tanto:
Declarar tipos de excepciones
Declarar qué excepciones puede lanzar cada operación
Sintaxis de declaración de tipo excepción:
exception nombre
{
tipo_campo1 campo1;
tipo_campo2 campo2;
…
};
exception otraexcepcion { };
Se pueden declarar
excepciones dentro o
fuera de una interfaz
No se pueden crear
jerarquías de excepciones
mediante herencia
47
Tema 2: Sistemas Distribuidos con CORBA
4.10 Excepciones
Sintaxis de declaración de excepciones lanzadas por
una operación
interface nombre_interface
{
tipo nombre_oper (modo tipo nombre_param1, …) raises (excep1, excep2…);
…
};
public final class nombre extends
org.omg.CORBA.UserException
{
Mapping:
tipo_campo1 campo1;
tipo_campo2 campo2;
exception nombre
…
{
public nombre() {…}
tipo_campo1 campo1;
public nombre(tipo_campo1 campo1,…) {…}
tipo_campo2 campo2;
public nombre (String $reason, tipo_campo1
…
campo1, …) {…}
};
}
48
Tema 2: Sistemas Distribuidos con CORBA
4.10 Excepciones
Mapping (cont.)
interface nombre_interface
{
tipo nombre_oper (modo tipo nombre_param1, …) raises (excep1, excep2…);
…
};
…
tipo nombre_oper (tipo nombre_param1, …) throws excep1, excep2, …
{
…
}
…
En Java, todas las excepciones declaradas en IDL
heredan de org.omg.CORBA.UserException
Si implementación de una operación lanza excepción no
49
declarada en IDL: UNKNOWN_EXCEPTION
Tema 2: Sistemas Distribuidos con CORBA
4. El lenguaje IDL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Notas generales
Concepto de mapping
El tipo interface
Tipos predefinidos
Constantes
Tipos compuestos
Creación de tipos
Tipos contenedores
Herencia
Excepciones
Módulos
50
Tema 2: Sistemas Distribuidos con CORBA
4.11 Módulos
Módulo=agrupación lógica de declaraciones en IDL
Puede contener declaraciones de todo lo expuesto hasta el
momento (incluso módulos)
Sintaxis:
module nombre
{
// declaraciones IDL
…
};
Mapping: paquetes Java
Por cada módulo, se genera un paquete de mismo nombre
Todo lo declarado en dicho módulo se incluye dentro de
dicho paquete
51
52