Sistemas basados en Objetos distribuidos.

Anuncio
Sistemas Basados en Objetos
Distribuidos
CORBA: Un caso de Estudio
Prof. Mariela Curiel
Sept-Dic 2009
Basado en el Capítulo del mismo nombre
de Tanenbaum y Van Steen.
Programación Orientada por
Objetos
„
„
„
Código Monolítico (Spaguetti)
Distintos Archivos, Librerías
Objetos
„
Ventajas: código más modular, reusabilidad,
mantenibilidad, división del trabajo.
Modelos de Programación para
Aplicaciones Distribuidas
„
„
„
Llamadas a procedimientos
remoto (RPC)
Invocación a un método remoto
(RMI)
Modelo de programación basado
en eventos (Ejem. Java Beans)
1
Programa Distribuido (RPC)
Computador1
main
Computador2
Comp. local
Comp. remoto
Cliente
Funciones del
Servidor
func(void ){
func()
}
proc1
proc2
proc3
proc5
proc4
Thread de ejecución
Thread bloqueado
Llamada a proc.
remota
Proceso en el Servidor
Proceso en el Cliente
Cliente
Funciones del Serv.
retorno
llamada
Remota
Llamada
y retorno lógico
Retorno
Marshaled
Req.
Marshaled
Servicios de
red
retorno
llamada
Stub del Servidor
Stub del Cliente
Req.
Marshaled
Red
kernel del cliente
Retorno
Marshaled
Servicios de
red
Kernel del servidor
Proceso en el Servidor
Proceso en el Cliente
Funciones del Serv.
Cliente
llamada
Remota
retorno
Infaz. servidor
Stub del Cliente
Comm. servidor
Comm. Cliente
Req.
Marshaled
Req.
Marshaled
Retorno
Marshaled
RPC
Servicios de
red
kernel del cliente
retorno
llamada
Infaz. cliente
Retorno
Marshaled
Servicios de
red
Kernel del servidor
2
Qué deseamos hacer con objetos
remotos?
Servidor
Cliente
Result = Obj.method1(val1)
Def Obj {
int method1(int v)
{}
string method2(string v)
{}
int
method3(int v)
{}
int
method4(int v)
{}
}
Modelo de Objetos
„
„
„
„
Un programa OO consta de un conjunto de objetos
que interactúan entre ellos.
Cada objeto se compone de un conjunto de datos
(estado) y un conjunto de métodos.
Los métodos se ponen a disposición mediante una
interfaz. Dada una definición de interfaz, puede
haber varios objetos que ofrezcan una forma de
implementarla.
Esta separación entre interfaces y objetos que las
implementan es crucial en los SD. Se pudieran
colocar las interfaces en una máquina, mientras
que el objeto reside en otra.
Objectos Distribuidos
Figure 10-1. Common organization of a
remote object with client-side proxy.
3
Objetos Distribuidos
„
„
El estado de un objeto distribuido
reside en una sola máquina,
solamente las interfaces están
disponibles en varias máquinas.
Estos objetos también se conocen
como objetos remotos.
Modelo de Objetos
Distribuidos
„
La interfaz define las firmas o
signatures de los métodos (tipos de
sus argumentos, valores devueltos y
excepciones) sin especificar su
implementación.
Modelo de Objetos
„
„
Un objeto se comunica con otro objeto
invocando sus métodos, generalmente
pasándole argumentos y recibiendo
resultados
Se puede acceder a los objetos
mediante referencias a objetos.
4
Modelo de Objetos
Distribuidos
Existen dos conceptos fundamentales:
„ Referencia de objeto remoto:
{
{
Otros objetos pueden invocar los
métodos de un objeto remoto si tienen
acceso a su referencia de objeto remoto.
Las referencias a objetos remotos se
pueden pasar como argumentos y
resultado de las invocaciones de
métodos remotos.
Modelo de Objetos Distribuidos
Interfaz remota:
„
{
{
Cada objeto tiene una interfaz remota que
especifica cuáles de sus métodos pueden
invocarse remotamente.
El sistema CORBA proporciona un IDL que
permite definir interfaces remotas. Las clases de
los objetos remotos y los programas de los
clientes pueden implementarse en cualquier
lenguaje. Los clientes CORBA no tienen que
estar en el mismo lenguaje que el objeto remoto.
Invocación
Remota
Invocaciones
locales
Invocación
Remota
C
A
B
Interfaz Remoto
D
E
Interfaz Remoto
Modelo de Objetos
Distribuidos
„
En el modelo C/S, los objetos son
administrados por servidores y sus
clientes invocan sus métodos
utilizando una invocación de métodos
remota (RMI)
„
Cuando el cliente invoca un método de
un objeto remoto, se envía un mensaje
al servidor que lo administra.
5
Modelo de Objetos
Distribuidos
„
La invocación se lleva a cabo
ejecutando el método del objeto en el
servidor y el resultado se devuelve al
cliente en otro mensaje.
Objetos Distribuidos
Objetos a tiempo de ejecución vs objetos a
tiempo de compilación
Objetos a tiempo de compilación: son objetos
soportados por el lenguaje de programación
(C++, Java, etc). En este caso el objeto se
define como una instancia de una clase.
Una clase es una descripción de un tipo
abstracto de datos.
Objetos Distribuidos
Objetos a tiempo de compilación: Un
objeto se define mediante su clase y
las interfaces que implementa. Las
interfaces pueden compilarse en
resguardos del lado del cliente y del
servidor, lo cual permite la invocación
remota de objetos. Desventaja:
dependencia de un lenguaje de
programación.
6
Modelo de Objetos Distribuidos
„
Tiempo de compilación vs tiempo de
ejecución
{
{
{
Otra forma de construir objetos es hacerlo a
tiempo de ejecución. Se puede implementar de
cualquier forma.
Puede ser una librería de funciones en C que
acceden a un archivo de datos, pero cómo hago
que parezcan métodos de un objeto???
Uso un adaptador de objetos, es como una
envoltura sobre la implementación para darle
forma de objeto. El adaptador “se comunica”
con la librería de C y abre un archivo de datos
que representa el estado actual del objeto.
Objetos Distribuidos
Este método se sigue en muchos
sistemas distribuidos basados en
Objetos (Corba). Es independiente del
lenguaje de programación en el que
están escritas las aplicaciones
distribuidas. Los objetos pueden
escribirse en varios lenguajes.
Objetos Distribuidos
Los objetos deben registrarse con el
adaptador quién posteriormente hace
que la interfaz esté disponible para
invocaciones remotas.
7
Objetos Distribuidos
Objetos Persistentes y Transistorios
Objetos Persistentes: continúan
existiendo aun cuando ya no esté
contenido en el espacio de direcciones
de cualquier proceso servidor. El
servidor puede almacenar el objeto en
memoria secundaria y después
terminar.
Objetos Distribuidos
Objetos Transistorios: un OT existe sólo
en tanto el servidor que lo está
alojando exista.
Procesos: Servidores de Objetos.
Modelo de Objetos
Distribuidos
„
„
„
Un servidor de objetos es un servidor
diseñado para soportar objetos distribuidos.
La diferencia más importante entre un
servidor general y un servidor de objetos, es
que un servidor de objetos no proporciona
por sí mismo un servicio específico.
Los servicios son implementados por los
objetos que existen en el servidor. Al
cambiar los objetos cambian los servicios.
8
Modelo de Objetos
Distribuidos
Cada proceso servidor contiene un conjunto
de objetos, algunos de los cuales pueden
recibir tanto invocaciones locales como
remotas. Otros objetos sólo pueden recibir
invocaciones locales.
„
Invocación
Remota
Invocaciones
locales
Invocación
Remota
C
B
A
D
E
Objeto Remoto
Objeto Remoto
Modelo de Objetos Distribuidos
{
{
Un servidor puede tener un solo hilo de
control para atender todas las solicitudes.
Tener varios hilos de control, uno por
cada objeto que maneja. Si llega una
solicitud al método de un determinado
objeto se pasa al hilo correspondiente, si
está ocupado, se encola la solicitud. Los
objetos quedan protegidos contra acceso
concurrente, las invocaciones se
serializan a través del hilo
correspondiente.
Servidores de Objetos:
Políticas
„
Objetos Transitorios:
{
{
Crearlo a la primera solicitud de
invocación y destruirlo en cuanto ya
ningún cliente esté ligado a tal objeto.
Crear todos los objetos transitorios en el
momento en el que el servidor se
inicializa (nungún cliente pudiera utilizar
el objeto).
9
Servidores de Objetos:
Políticas
„
Colocación de los Objetos en la Memoria:
{
{
Cada objeto tiene su propio espacio de
direcciones, los objetos no comparten el código
ni los datos (útil cuando los objetos tienen que
separarse por razones de seguridad).
Permitir que los objetos compartan el código.
Una BD que contiene objetos pertenecientes a
la misma clase puede ser implementada
eficientemente si la clase se carga sólo una vez
en el servidor. Cuando llega una solicitud de
invocación, el servidor sólo necesita buscar el
estado del objeto.
Servidores de Objetos:
Políticas
„
Hilos:
{
{
Implementar el servidor con un solo hilo
de control.
Tener varios hilos, uno por cada objeto.
Los objetos quedan protegidos
automáticamente contra acceso
concurrente.
Servidores de Objetos: Políticas
„
Servidores
{
{
También es posible utilizar un hilo por
cada solicitud de invocación. En este
caso los objetos deben estar protegidos
para el acceso concurrente.
Crear hilos por demanda o tener un
conjunto fijo de hilos.
10
Adaptador de Objetos
„
Las políticas anteriores se conocen
como políticas de activación, para
enfatizar que la mayoría de las veces
el objeto debe ser llevado primero al
espacio de direcciones del servidor
(activado) antes de que puedan
invocarse sus métodos.
Adaptador de Objetos
„
„
„
Se requiere entonces un mecanismo para
agrupar objetos por política de activación.
Tal mecanismo es lo que se conoce como
adaptador de objetos.
El adaptador es un software que
implementa una política de activación
específica.
Un adaptador controla uno o más objetos
Adaptador de Objetos
„
„
„
Varios adaptadores de objetos pueden
residir en un servidor al mismo tiempo.
El adaptador de objeto no tiene
conocimiento de las interfaces específicas
de los objetos que controlan (si así fuera no
podrían ser genéricos).
Un adaptador de objetos extrae una
referencia a objeto de una solicitud de
invocación y posteriormente despacha la
solicitud al objeto referido.
11
Adaptador de Objetos
„
„
En lugar de pasar la solucitud
directamente al objeto la pasa al
resguardo del lado del servidor.
Sirviente: es el término usado para la
implementación del objeto
Server with three objects
Server machine
Object's stub
(skeleton)
Object adapter
Object adapter
Request
demultiplexer
Local OS
Comunicación
Vinculación de un Cliente a un Objeto.
- Los sistemas RPC tradicionales que
soportan objetos distribuidos
proporcionan referencias a objetos a
través de todo el sistema.
- Las referencias pueden pasarse como
parámetros de invocaciones remotas o
ser valores de retorno.
12
Comunicación
Vinculación de un Cliente a un Objeto.
Cuando un proceso tiene una referencia a
un objeto, primero debe vincular al objeto
referido antes de invocar a cualquiera de
sus métodos. La vinculación hace que se
coloque un proxy en el espacio de
direcciones del proceso, y así se
implementa una interfaz que contiene los
métodos que se pueden invocar. La
vinculación también se puede hacer
automáticamente.
Comunicación
Vinculación de un Cliente a un Objeto.
ƒ Vinculación Implícita: al cliente se le ofrece
un mecanismo simple que le permite
invocar directamente los métodos utilizando
sólo la referencia a objeto. C++ se
sobrecarga el operador -> y se utilizan
referencias a objetos como si fueran
apuntadores ordinarios. El cliente se vincula
automáticamente al objeto.
Comunicación
Vinculación de un Cliente a un Objeto.
ƒ Vinculación Explícita: el cliente debe
invocar una función especial para
ligarse al objeto antes de que pueda
invocar sus métodos. La vinculación
explícita regresa un apuntador a un
proxy que luego llega a estar
localmente disponible.
13
Distr_object obj_ref; // Referencia a objeto distribuido, abarca todo el sistema
obj_ref = ....; // Inicializar una referencia a un objeto distribuido
obj_ref->do_somthing(); // Vincular e invocar implícitamente un métodoEjemplo de Vinculación Implícita.
Distr_object obj_ref; // Referencia a objeto distribuido, abarca todo el sistema
Local_object* obj_ptr; // Apuntador a objetos locales.
obj_ref = ....; // Inicializar una referencia a un objeto distribuido
obj_ptr = bind(obj_ref); // Vinculación explícita.
obj_ptr->do_something() // Invocar el método en el proxy local
Ejemplo de Vinculación Explícita
Comunicación
Invocaciones a Métodos Remotos:
Estáticas Vs. Dinámicas.
-
-
try {
Invocaciones Estáticas:
Calculator c = (Calculator)
Invocar al objeto usando las
definiciones que se ofrecen en Naming.lookup( "rmi://remotehost
la interfaz. Se requiere que se /CalculatorService");
System.out.println( c.sub(4, 3) );
conozcan las interfaces de los
System.out.println( c.add(4, 5) );
objetos, cuando la aplicación
del cliente se está
desarrollando.
Si cambian las interfaces, la
aplicación tiene que
recompilarse.
Comunicación
Invocaciones a Métodos Remotos:
Estáticas Vs. Dinámicas.
- Invocaciones Dinámicas: Se puede
componer la invocación a un método a
tiempo de ejecución. La diferencia es
que la aplicación selecciona, a tiempo
de ejecución, qué método invocará de
un objeto remoto.
14
Comunicación
Invocaciones a Métodos Remotos:
Estáticas Vs. Dinámicas.
Una invocación dinámica adopta la
siguiente forma:
Invoke(object, object_method, input.parameters, out_put.parameters)
Comunicación
Invocaciones a Métodos Remotos:
Estáticas Vs. Dinámicas.
Estática:
fobject.append(int)
Dinámica:
invoke(fobject, id(append), int)
Pase de Parámetros
„
Sistema donde sólo existen objetos
distribuidos (presentan una interfaz remota).
En este caso se pueden utilizar
consistentemente las referencias a los
objetos comó parámetros de invocaciones
remotas. Las referencias son pasadas por
valor y por lo tanto copiadas de una
máquina a otra. Cuando un proceso recibe
una referencia a objeto, se vincula a él y lo
utiliza.
15
Pase de Parámetros
Sistemas dende existen objetos locales y remotos
„ Las referencias a objetos remotos y las referencias
a objetos locales a menudo se tratan de forma
distinta.
{
{
Si se invoca a un método con una referencia a
objeto como parámetro, dicha referencia se copia y
pasa como un parámetro por valor sólo cuando se
refiere a un objeto remoto.
Cuando dicha referencia se refiere a un objeto local
(un objeto situado en el mismo espacio de
direcciones del cliente) el objeto referido se copia en
su totalidad y se pasa junto con la invocación.
Machine A
Local
reference L1
Client code with
RMI to server at C
(proxy)
Machine B
Local object
O1
Remote
reference R1
New local
reference
Remote object
O2
Copy of O1
Remote
invocation with
L1 and R1 as
parameters
Copy of R1 to O2
Machine C
Server code
(method implementation)
Comunicación Síncrona y
Asíncrona
„
Una invocación de método asíncrona
es análoga a un RPC asíncrono: el
invocador continua después de
realizar la invocación sin esperar el
resultado. CORBA ofrece
comunicación asíncrona a través del
modelo de llamada automática.
16
Comunicación Síncrona y
Asíncrona
„
„
Un cliente proporciona un objeto que
implementa una interfaz que contiene métodos
de llamada automática. Estos métodos pueden
ser invocados por el sistema de comunicación
subyacente para pasar el resultados de una
invocación asíncrona.
Las invocaciones asíncronas no afectan no
afectan la implementación del objeto, en otras
palabras es responsabilidad del cliente el
transformar una invocación síncrona original en
una invocación asíncrona.
Comunicación Síncrona y
Asíncrona
„
Cómo se implementa:
{
{
{
la interfaz original, tal y como la implementa el objeto
se reemplaza por dos nuevas interfaces que deben
ser implementadas únicamente por el software del
lado del cliente.
Una interfaz contiene el/los métodos que el cliente
invoca. Ninguno de estos métodos regresa ningún
valor.
La segunda interfaz es la automática y para cada
operación de la interfaz anterior contiene un método
que será invocado por el sistema subyacente para
pasar al cliente los resultados de la invocación del
método.
Comunicación Síncrona y
Asíncrona
„
Ejemplo:
int add (in int i, in int j, out int k)
Método que ofrece
el objeto en el servidor
void sendcb_add(in int i, in int j) // LLamada realizada por el cliente
void replycb_add(in int ret_val, in int k) // Upcall al cliente
17
Comunicación Síncrona y
Asíncrona
„
„
Posteriormente se compilan las
intefaces generadas. Al cliente se le
ofrece un resguardo que le permite
invocar sendcb_add.
El cliente debe proporcionar una
implementación para la interfaz de
llamada automática replycb_add.
Client application
1. Call by the
application
Client
proxy
Callback
interface
4. Call by the RTS
3. Response from server
Client
RTS
2. Request to server
Comunicación Síncrona y
Asíncrona
„
Como alternativa de las llamadas
automáticas, CORPA ofrece un
modelo encuestador. En éste se le
ofrece al cliente un conjunto de
operaciones útiles para “interrogar” a
su sistema a tiempo de ejecución
(RTS) local sobre los resultados
entrantes de una invocación previa.
18
Comunicación Síncrona y
Asíncrona
„
Ejemplo:
int add (in int i, in int j, out int k)
void sendcb_add(in int i, in int j) // LLamada realizada por el cliente
void replypoll_add(out int ret_val, out int k) // También invocado por
el cliente
Comunicación Síncrona y
Asíncrona
„
El método replypoll_add tendrá que
ser implementado por el RTS
Client application
1. Call by the
application
4. Call by the
application
Client
proxy
Polling
interface
3. Response from server
Client
RTS
2. Request to server
Sincronización
„
„
En sistemas orientados por objetos,
los detalles de implementación se
encuentran ocultos detrás de las
interfaces.
Cuando un proceso invoca a un objeto
remoto, no sabe si dicha invocación
conducirá a la invocación de otros
objetos.
19
Sincronización
„
„
Si uno de esos objetos está protegido
contra accesos concurrentes puede ser que
tenga un conjunto de locks de los que el
proceso invocador no esté al tanto.
Por el contrario, cuando se trata de un
proceso solicitando recursos, el proceso
puede ejercer más control en tiempo de
ejecución cuando las cosas van mal, tal
como renunciar a los candados (si las
llamadas se lo permiten)
Object
Object
Lock
Process
Process
Unlock
(a)
(b)
Sincronización
„
„
En SD basados en Objetos es
importante saber dónde ocurre la
sincronización.
Una ubicación evidente para la
sincronización es en el servidor. Si llegan
varias solicitudes en serie para el mismo
objeto, el servidor puede decidir ponerlas
en serie (pudiera hacerlo a través de
hilos)
20
Sincronización
„
„
„
También se pudiera hacer el bloqueo del
lado del cliente utilizando soporte del
lenguaje.
Se bloquea al llamador en el cliente si está
invocando un método “sincronizado”.
Se tienen que sincronizar otros clientes en
otras máquinas que estén accediendo al
mismo método. La sincronización distribuida
puede ser bastante compleja.
Consistencia y Replicación
„
Existen 2 temas a resolver para
implementar la consistencia :
{
{
Se requiere una forma de evitar el acceso
concurrente de varias invocaciones al
mismo objeto. Es decir, si se está
ejecutando un método, ningún otro método
dentro del mismo objeto puede estarse
ejecutando.
Este requerimiento garantiza la serialización
de los datos internos del objeto.
Consistencia y Replicación
„
Existen 2 temas a resolver para
implementar la consistencia :
{
En el caso de que un objeto esté replicado,
se debe garantizar que los cambios del
estado del objeto replicado sean los
mismos. Es decir, debemos garantizar que
no ocurran dos invocaciones independientes
a un método en diferentes réplicas al mismo
tiempo.
21
Consistencia y Replicación
„
Existen 2 temas a resolver para
implementar la consistencia :
{
{
Se tienen que ordenar las invocaciones a
métodos de tal forma que todas las réplicas
vean las invocaciones en el mismo orden.
Este requerimiento se satisface de dos formas:
1. Utilizando el método basado en réplicas
primarias
2. Mediante multitransmisión en orden total para
las réplicas.
Casos de Estudio
Enterprise Java Beans
„
„
Un EJB es un objeto Java alojado en
un servidor especial que ofrece
diferentes formas para que los clientes
remotos lo invoquen.
El servidor puede separar la
funcionalidad orientada a la aplicación
de la funcionalidad orientada al
sistema.
22
Container
EJB
EJBEJB
Server
RMI
JDBC
JNDI
JMS
Services
Server kernel
Local OS
Network
EJB
{
División de Trabajo: La posibilidad de dividir
"Servicios"(EJB Container) de "Componentes
Principales"(EJB'S) permite una clara división
de trabajo, esto es, un diseñador de
"componentes"(EJB's) puede concentrar sus
esfuerzos en la "lógica de proceso" sin
preocuparse del diseño de servicios. Y de la
misma manera un "diseñador" de
servicios("Middleware") concentrarse en su
área.
EJB
„
Los servicios típicos incluyen aquellos
necesarios para la invocación de
métodos remotos (RMI), el acceso a
BD (JDBC), la asignación de nombres
(JNDI) y la mensajería (JMS).
23
EJB
Se distinguen 4 clases de EJB:
1. Beans de sesión sin estado.
2. Beans de sesión con estado
3. Beans de entidad
4. Beans dirigidos por mensajes
EJB
Beans de sesión sin estado: es un objeto
transitorio que se invoca una vez,
realiza su trabajo, tras de lo cual
desecha cualquier información
utilizada para realizar el servicio que
ofrecía al cliente.
EJB
Beans de sesión con estado: matiene el
estado relacionado con el cliente.
Por ser un bean de sesión, cuando el
cliente termina (posiblemente
después de haber invocado al objeto
varias veces) el bean se destruye.
24
EJB
Beans de Entidad: es un objeto
persistente de larga duración. Se
guarda en una BD y normalmente
forma parte de transacciones
distribuidas. Típicamente guardan
información que puede necesitarse la
próxima vez que el cliente acceda al
servidor (datos de un cliente:
domicilio, tarjeta de crédito, etc).
EJB
Beans dirigidos por mensajes: se utilizan
para programar objetos que deberán
reaccionar a los mensajes que llegan.
También son capaces de enviar
mensajes. Modelo publicaciónsuscripción.
Globe
„
„
„
Es un sistema en el cual la escalabilidad
desempeña un rol central. Metas: soporte a
múltiples usuarios, funcionar en una red de área
amplia.
Al igual que otros sistemas orientados por objetos,
en Globe se espera que los objetos encapsulen
estado y operaciones incluidas en el estado.
Pero..cada objeto determina cómo se distribuirá el
estado entre sus réplicas. Cuándo y donde debe
replicarse el estado. Un objeto puede además
determinar su política de seguridad.
25
Globe: Modelo de Objetos
„
„
A diferencia de la mayoría de los SD
basados en objetos, no se adopta el modelo
de objeto remoto.
Los objetos pueden estar físicamente
distribuidos, ello implica que el estado de un
objeto puede distribuirse y replicarse a
través de múltiples procesos. Modelo de
objetos compartidos-distribuidos.
Globe
Distributed shared object
Local object
Process
Network
Interface
Globe
„
A un objeto que está ligado a un
objeto compartido-distribuido se le
ofrece una implementación local de la
interfaz que provee dicho objeto
26
Same interface as implemented
by semantics subobject
Control
subobject
Replication
subobject
Semantics
subobject
Communication
subobject
Communication
with other local
objects
Organización de un Objeto
Local
„
„
Subobjeto Semántica: implementa la
funcionalidad provista por un objeto
compartido distribuido. Corresponde a
objetos remotos ordinarios, es similar a los
EJB.
Subobjeto comunicación: Provee una
interfaz a la red subyacente. Ofrece varios
primitivas de traspaso de comunicación.
Existen subojetos de comunicación
avanzados que implementan interfaces de
multitransmisión.
Organización de un Objeto
Local
„
„
Subobjeto replicación: implementa la
estrategia de distribución para un
objeto. Garantiza que todas las
invocaciones a un método sean
realizadas en el mismo orden en cada
réplica.
Subobjeto Control: exporta las
interfaces del subobjeto semántica.
Coordina las llamadas al sub-objeto
semántica y al sub-objeto replicación.
27
Corba: un estándar para
construir objetos distribuidos.
Object Management Group
(OMG)
¾
Es un consorcio internacional que
promueve el desarrollo de software
orientado por objetos
¾
El objetivo del OMG es proveer un
marco de arquitectura común para
permitir la interacción de objetos en
plataformas heterogéneas y
distribuidas.
Object Management Group
(OMG)
¾
Fue fundado en 1989.
¾
Inicialmente estuvo conformado por 8
compañías: 3Com Corpotation, American
Airlines, Canon Inc., Data General,
Hewlett-Packard, Philips
Telecommunications N.V., Sun
Microsystems y Unisys Corporation.
¾
Actualmente hay más de 500 miembros
28
Object Management Group (OMG)
¾
¾
El OMG no realiza trabajos de
desarrollo e implementación, más
bien se basa en la tecnología
existente ofrecida por sus miembros.
Propone especificaciones para el
desarrollo de computación
distribuida basada en objetos: OMA
(Object Management Architecture).
Object Management Architecture
(OMA)
¾
¾
OMA es una arquitectura de
referencia sobre la cual se pueden
construir aplicaciones.
Define, a un alto nivel de abstracción
las “facilidades” necesarias para el
desarrollo de aplicaciones
distribuidas orientadas por objetos.
Object Management Architecture
(OMA)
• Posee 4 componentes:
Common
Facilities
Application
Interfaces
Object Request Broker (ORB)
Object Services
29
Object Management Architecture (OMA)
¾
ORB (intermediario de petición de objetos).
Permite o facilita la comunicación entre
objetos. La tecnología adoptada para los
ORBs es lo que se conoce como CORBA
(common object request broker architecture)
Common
Facilities
Application
Interfaces
Object Request Broker (ORB)
Object Services
Object Management Architecture (OMA)
Corba (Common Object Request
Broker Architecture) es un diseño de
middleware que permite que los
programas de aplicación se
comuniquen unos con otros con
independencia del lenguaje de
programación, sus plataformas de
hw y sw, las redes sobre las que se
comunican y sus implementadores.
Object Management Architecture (OMA)
¾
Object Services: definen un conjunto de objetos
que implementan servicios fundamentales de bajo
nivel como servicio de nombres, seguridad,
persistencia, ejecución concurrente y transacciones,
etc. Permiten a los desarrolladores construir
aplicaciones sin tener que reinventar la rueda.
Common
Facilities
Application
Interfaces
Object Request Broquer (ORB)
Object Services
30
Object Management Architecture (OMA)
¾ Common Facilities (CF): son servicios
de más alto nivel orientados a las
aplicaciones (accounting, intercambio de
información entre aplicaciones, correo
electrónico o facilidades para imprimir).
¾ Application Interfaces: interfaces
desarrolladas para aplicaciones en
particular. Estos objetos hacen uso del
resto de los componentes. OMG
probablemente no llegue a desarrollar
estándares de este tipo.
CORBA
¾
¾
¾
Fue creada en 1991 (Corba 1.1). Propone
una implementación específica del ORB
(IDL)
En 1994 surge CORBA 2.0 (1994), que
definió estándares para permitir la
comunicación entre implementaciones
realizadas por desarrolladores diferentes.
Este estándar se denomina GIOP
(General Inter-ORB Protocol).
CORBA 3.0 (1997) incrementa
interoperabilidad y funcionalidad (POA)
Modelo de Objetos CORBA
„
„
„
„
Los clientes no son necesariamente objetos;
un cliente podrá ser cualquier programa que
envía mensajes de petición a objetos
remotos y reciba respuestas.
El término objeto CORBA se refiere a
objetos remotos.
Un objeto CORBA implementa una interfaz
IDL, tiene asociado una referencia de objeto
remoto y es capaz de responder a las
invocaciones de los métodos en su interfaz
IDL.
Se puede implementar un objeto CORBA en
un lenguaje que no sea OO.
31
Corba IDL
IDL: Interface Definition Language
La interfaz especifica un nombre y un conjunto de
métodos que podrán utilizar los clientes.
¾
¾
Define tipos de objetos
especificando sus interfaces
estáticas
Sintaxis derivada de C++ con
palabras adicionales
Enfoque CORBA: IDL
// Ejemplo de especificación de
IDL: forma.idl y
ListaForma.idl
interface Forma {
struct Rectangulo {
long ancho;
long alto;
long x;
long y;
};
struct ObjetoGrafico{
string tipo;
Rectangle enmarcado;
boolean estaRelleno;
};
referencia a objeto
CORBA
long dameVersion();
ObjetoGrafico DameTodoEstado();
};
Typedef sequence <Forma, 100> Todo
Interface ListaForma {
exception ExceptionLlena{};
Forma nuevaForma(in ObjetoGrafico g)
raises (ExceptionLlena)
Todo TodasFormas();
long dameVersion();
};
Lista de Ref. a objetos
CORBA
Enfoque CORBA: IDL
„
Los parámetros se etiquetan como in,
out, inout.
{
{
{
in: se pasa del cliente al objeto CORBA
invocado.
out: lo devuelve el objeto CORBA
inout: el valor de este parámetro puede
pasarse en ambas direcciones.
32
Enfoque CORBA: IDL
„
Si no se devuelve ningún valor el tipo
retornado se coloca como void.
„
Oneway indica que el cliente que invoca el
método no se bloqueará mientras el destino
lleva a cabo el método.
Cuando se lanza una excepción que
contiene variables, el servidor puede utilizar
las variables para devolver información al
cliente sobre la excepción.
oneway void retrollamada (in int version)
„
exception ExceptionLlena{};
exception ExceptionLlena{ObjetoGrafico g};
CORBA: IDL
Value
Tipos IDL
Constructed value
Object Reference
array
struct sequence
Basic Values
Integer
Union
Float Point
Short Long UshortUlong Float
Double
char
string
octal
boolean
any
enum
Semántica de las operaciones
„
La invocación remota en CORBA
define, por defecto, la semántica
como máximo una vez. Si una
operación retorna exitosamente, se
garantiza que se ejecutó
exactamente 1 vez. Si retorna una
excepción fue ejecutada a lo sumo 1
vez.
33
La Arquitectura de CORBA
in args
Operation()
CLIENT
OBJECT
IMPLEMENTATION
out args + return value
Request
ORB
La Arquitectura de CORBA
INTERFACE
REPOSITORY
IDL COMPILER
CLIENT
DII
IMPLEMENTATION
REPOSITORY
SERVANTS
IDL
STUBS
ORB
INTERFACE
IDL
SKELETON
DSI
OBJECT ADAPTER
ORB CORE
GIOP/IIOP
Client
REQUEST
DII
IDL Stub
ORB Core
¾IDL
Stubs (resguardos o proxies):
ƒFunciones generadas desde la interfaz IDL (mediante un
compilador de IDL) para “enlazarlas” a los clientes, en el lenguaje del
cliente. Empaqueta los argumentos y desempaqueta las respuestas.
ƒProvee una interfaz de invocación estática
¾Dynamic Invocation Interface (DII)
ƒPermite especificar y construir requerimientos a tiempo de ejecución
ƒOperaciones: create_request, invoke, get_response, etc.
ƒ El cliente especifica el objeto, la operación y los parámetros. Se
obtienen a través del repositorio de interfaz (se tiene que poseer la
referencia al objeto)
34
Enfoque CORBA
¾IDL
Skeleton (Esqueletos):
ƒFunciones generadas desde la interfaz IDL para “enlazarlas” a
las implementaciones de objetos. Se generan mediante un compilado
de IDL. Desempaqueta argumentos y empaqueta las respuestas y
excepciones.
¾Dynamic Skeleton Interface (DSI)
ƒAnálogo al DII del lado de la implementación de objetos.
ƒInspecciona la petición para descubrir el objeto destino, el método
Servant
que se invoca y los argumentos.
IDL Sk
DSI
ORB
Interface Object Adapter
ORB Core
Arquitectura de CORBA
ORB Interface:
¾
ƒ
ƒ
ƒ
Provee funciones para acceder
directamente al ORB core desde los
clientes y desde las implementaciones
de objetos
Operaciones que permiten su arranque
y parada
Operaciones para convertir referencias
a objetos remotos en cadenas de texto
y viceversa.
La Arquitectura de CORBA
INTERFACE
REPOSITORY
IDL COMPILER
CLIENT
DII
IDL
STUBS
IMPLEMENTATION
REPOSITORY
SERVANTS
ORB
INTERFACE
IDL
SKELETON
DSI
OBJECT ADAPTER
GIOP/IIOP
ORB CORE
35
Repositorio de Implementaciones
(Implementation Repository):
ƒ
ƒ
ƒ
Contiene información que permite al ORB
localizar y activar implementaciones de
objetos
Un IR almacena la correspondencia de los
nombres de ciertos adaptadores de objeto
con las rutas de los archivos que contienen
las implementaciones de los objetos.
Los objetos se registran en este repositorio
cuando se instalan los servidores.
Entrada en el repositorio de implementación:
Nombre
del Adaptador de
Objetos
¾
Ruta de implemtación
del objeto
host y
número de puerto
Repositorio de Interfaces (Interface
Repository):
ƒ
ƒ
ƒ
ƒ
Su información permite que un programa
encuentre un objeto cuya interfaz no conoce en
tiempo de compilación.
Para una interfaz puede aportar los nombres de
los métodos, y para cada método los nombres y
tipos de argumentos y las excepciones.
Las aplicaciones que utilicen la invocación estática
con resguardos en el cliente y esqueletos en el
servidor no necesitan repositorio de interfaz.
No todos los ORBs proporcionan repositorio de
interfaz.
Enfoque CORBA
ADAPTADOR DE
OBJETOS
Servant
IDL Sk
ORB
Interface
DSI
Object Adapter
ORB Core
36
Funciones de un Adaptador de Objetos
ƒ
ƒ
ƒ
ƒ
ƒ
Genera referencias a objetos que se
registran en CORBA. IOR (Interoperate
object reference)
Da a cada objeto CORBA un único nombre
que forma parte de su referencia a objeto
remoto.
Medio de comunicación entre
implementaciones de objetos y el ORB.
Despacha cada RMI vía un esqueleto hacia
el sirviente apropiado (implementación del
objeto)
Activación/Desactivación de sirvientes
utilizando el repositorio de implementación
Funciones de un Adaptador de
Objetos
„
„
El ORB y el OA cooperan para permitir que
las aplicaciones cliente invoquen métodos
de objetos CORBA y aseguran que cada
objeto CORBA se asocie a un sirviente.
El ORB y el OA cooperan para, de forma
transparente, localizar e invocar a los
sirvientes adecuados, una vez que se tiene
la información en las referencias.
Funciones de un Adaptador de
Objetos
„
Diferentes OAs pueden soportar
diferentes estilos de implementación
de sirvientes. Por ejemplo, el Orbix
Object Database Adapter Framework,
permite implementar objetos usando
una base de datos OO. Otro ejemplo
es el Real Time Object Adapter
(objetos a tiempo real.)
37
Object Adapter
„
Figure 10-5.
Organization of
an object server
supporting
different OAs
Estructura de un Adaptador de Objetos
¾
Adaptadores de Objetos adoptados
por el estándar CORBA:
ƒ
ƒ
Basic Object Adapter (BOA)
Portable Object Adapter (POA)
Referencia a un objeto remoto
„
Una referencia es un identificador de
objeto que puede usarse en todo el
sistema distribuido y se refiere a un
objeto único.
38
Referencia a Objetos
Un objeto CORBA puede identificarse, localizarse y direccionarse
por su referencia a objeto.
Nombre de tipo
de Interfaz IDL
Identificador
de repositorio
de interfaz
Protocolo y dirección
detallada
Nombre de
IIOP Dominio
del host
Número
de puerto
Clave del
Objeto
Nombre del Nombre o
adaptador
ID del objeto
Referencia a Objetos
„
„
Las referencias pueden pasarse
libremente entre los objetos de
diferentes máquinas (como
parámetros o valores de retorno)
La referencia a un objeto debe
contener suficiente información como
para permitir que un cliente se vincule
a un objeto.
Inter-Operabilidad
¾
¾
¾
El protocolo General Inter-ORB
(GIOP) satisface las necesidades de
comunicación entre ORB´s y trabaja
sobre cualquier protocolo de
transporte.
La implementación del GIOP que
funciona sobre TCP/IP se denomina
Internet Inter-ORB Protocol (IIOP)
Se unifica la definición de
referencias.
39
Implementaciones de ORBs
¾
Residente en el cliente y en la
implementación de objeto
¾
Basado en un Servidor
¾
Basado en el Sistema
Semánticas de Ejecución y
Modelos de interacción
¾
Semánticas:
¾
¾
¾
At-most-once
Best effort (oneway): no se espera
ningún resultado
Modelos de interacción:
¾
¾
Con la interfaz estática: Operaciones
síncronas
Con la interfaz dinámica: síncrona,
síncrona diferida, oneway.
Servicios de CORBA
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
Ciclo de vida de los objetos
Manejo de nombres
Persistencia
Notificación de eventos
Concurrencia y transacciones: lleva a
cabo un protocolo de consumación de
dos fases. Se emplean bloqueos para
controlar accesos concurrentes a los
objetos CORBA.
Seguridad
40
Manejo de Nombres
struct NameComponent {string id, string clase};
typedef sequence <NameComponent> Name;
Interface NamingContext {
void bind(int Name n, int Object obj);
enlaza el nombre y la referencia en el contexto propio.
Object resolve (in Name n);
busca el nombre en el contexto y devuelve su referencia a
objeto remoto.
void unbind () ;
. ....
}
Interfaz IDL NamingContext del Servicio de Nombres de Corba.
CORBA
„
„
„
„
Ejemplo del uso de comunicación de
objetos usando CORBA, con la
implementación JAVAORB.
Principales componenetes de la
arquitectura: Cliente, ORBs, Adaptador de
Objetos, Servant, Servidor de Nombres.
Los objetos que se comunican están
programados en JAVA.
Archivo
Bibliografía
„
„
„
CORBA: A Platform for Distributed Object
Computing. Zhonghua Yang and Keith
Duddy.
Objet Interconnections. Object adapters:
Concepts and Terminology. Douglas
Schmidt and Steve Vinosky. SIGS C++
Report magazine 1997.
Sistemas Distribuidos Conceptos y Diseño.
Coulouris, Dollimore and Kindberg. Tercera
Edición. Addison Wesley.
41
Descargar