Está en la página 1de 27

CORBA Una arquitectura para integrar ambientes distribuidos y heterog eneos

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

Contenido

Introducci on Arquitectura OMA CORBA Object Services Application Object Ejemplo

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

Motivaci on

Un proveedor le ofrece un componente escrito en c++ que implementa cierta funcionalidad y solamente puede ser ejecutado en UNIX. Sus aplicaciones Windows escritas en Java requieren dicha funcionalidad. Como puede integrar ambas aplicaciones?

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

Introducci on

Complejidad de los sistemas distribuidos Los datos est an distribuidos


Diferentes lenguajes Diferentes formatos

La computaci on es distribuida
Diferentes servidores (Plataforma y S.O) Diferentes clientes (Plataforma y S.O)

Los usuarios est an distribuidos

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

...Continuaci on

Ventajas de los sistemas distribuidos Se logra hacer uso de las ventajas de cada proveedor de plataformas Los componentes pueden ser desarrollados por diferentes proveedores Los componentes bien denidos pueden ser reutilizados Desventajas: Se pierde un poco de control La depuraci on puede llegar a ser muy compleja Sin herramientas adecuadas la gesti on y administraci on puede salirse de las manos

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

Arquitectura OMA
Una soluci on al problema

Propuesta por OMG (Object Managment Group) Soluci on al problema de los ambientes distribuidos Intenta promover un est andar para la comunicaci on y construcci on de componentes distribuidos

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

ORB

Canal de comunicaci on Invocaciones est aticas y din amicas Transparencia en el lenguaje Transparencia local / remota Sistema autodescribible Seguridad en las transacciones Mensajes polim orcos

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

Object Services

Aumento de la funcionalidad del ORB Los servicios incluyen:

Collection Query Concurrency Transaction Event Notication Externalization

Life Cycle Licensing Naming Property Trading Relationship Security Time

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

Common Facilities

Son colecciones de componentes que proveen servicios para la construcci on de aplicaciones: Vertical Facilities. Servicios para aplicaciones espec cas:
Salud Comercio Electr onico Producci on, etc

Horizontal Facilities. Servicios de prop osito general:


GUIs Administraci on de la informaci on Administraci on del sistema Manejo de tareas (WorkFlow)

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

Application Objects

Objetos propios de la aplicaci on Deben ser componentes bien denidos Deben poder ser reutilizables Deben ser distribuibles Auto describibles

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

Arquitectura de un Sistema CORBA

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

ORB

Canal de Comunicaci on Cuenta con las caracter sticas del ORB de OMA (transparencia, seguridad, transaccionalidad, etc) CDRs (Common Data Representation) Interoperabilidad entre ORBS gracias a los protocolos IIOP, GIOP y ESIOP Posibilidad de crear puentes entre ORBs y crear federaciones

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

Como se denen componentes?

... por medio de IDL (Interface Denition Language): Lenguaje puramente declarativo Debe describir cualquier componente que viva en el ORB Contrato entre el cliente y el servidor Se puede precompilar para generar clases en un lenguaje de alto nivel que implemente el componente

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

Ejemplo

module C a l c u l o { e x c e p t i o n DivCero {} ; t y p e d e f s e q u e n c e <d o u b l e > D o u b l e A r r a y ; interface Calculadora { d o u b l e suma ( i n d o u b l e A , i n d o u b l e B) ; d o u b l e r e s t a ( i n d o u b l e A , i n d o u b l e B) ; d o u b l e m u l t i p l i c a c i o n ( i n d o u b l e A , i n d o u b l e B) d o u b l e d i v i s i o n ( i n d o u b l e A , i n d o u b l e B) r a i s e s ( DivCero ) ; d o u b l e p r o m e d i o ( i n D o u b l e A r r a y D) ; }; };

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

Del lado del Cliente

Invocaciones Est aticas Se generan los IDL stubs por medio de un compilador de IDL al lenguaje de implementaci on Se obtienen referencias a los objetos implementados (servidor) con ayuda del ORB Se realizan las invocaciones como si fueran objeto locales Invocaciones Din amicas Descubrir los m etodos provistos por los objetos (Servidor) Construir una invocaci on (request) y realizar el llamado a invoke()

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

Del lado del servidor

Se generan los esqueletos a partir del IDL Se implementan los componentes (servants) Se instancian los componentes

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

Referencias de los Objetos

En CORBA se utilizan IORs (Interoperable Object References) para representar las referencias a los objetos. Con los m etodos object to string y string to object se puede generar el IOR para una instancia de un objeto y generar una referencia dado un IOR respectivamente. Ejemplo: IOR:000000000000001c49444c3a43616c63756c6f2f43616c6....

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

Servicio de Nombres (COSNaming)

Adem as de los m etodos object to string y string to object es posible obtener referencias de objetos remotos mediante el servicio de nombres Este servicio organiza los objetos dentro de una jerarqu a de contextos
C a l c u l a d o r a CObj = new C a l c u l a d o r a S e r v a n t ( ) ; o r g . omg . CORBA . O b j e c t Obj = o r b . r e s o l v e i n i t i a l r e f e r e n c e s ( N a m e S e r v i c e ) ; NamingContext N a m i n g C o n t e x t = N a m i n g C o n t e x t H e l p e r . n a r r o w ( Obj ) ; NameComponent C o m p o n e n t L i s t e n e r = new NameComponent ( C a l c u l a d o r a , ) ; NameComponent p a t h L i s t e n e r [ ] = { C o m p o n e n t L i s t e n e r } ; N a m i n g C o n t e x t . r e b i n d ( p a t h L i s t e n e r , CObj ) ; o r b = ORB . i n i t (A , n u l l ) ; o r g . omg . CORBA . O b j e c t r e f = o r b . r e s o l v e i n i t i a l r e f e r e n c e s ( N a m e S e r v i c e ) ; NamingContext n c r e f = N a m i n g C o n t e x t H e l p e r . n a r r o w ( r e f ) ; NameComponent nc = new NameComponent ( C a l c u l a d o r a , ) ; NameComponent p a t h [ ] = { nc } ; Cref = C a l c u l a d o r a H e l p e r . narrow ( n c r e f . r e s o l v e ( path ) ) ;

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

Application Object

Deben ser reutilizables (bien denidos) Objetos tal cual como se ven en la realidad Denidos por interfaces IDL Interacci on transparente con ayuda de los servicios CORBA Flexibles (no atados a un sistema monol tico) Deben ser libres del contexto (utilizables en diferentes situaciones)

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

Modelo de Objetos
Bussiness Objects:
Encapsulan los datos, reglas del negocio (como reaccionar a eventos) Denen como cambiar su estado

Bussiness Process Objects:


Encapsulan la l ogica del negocio a nivel m as general (procesos) Implementan procesos que involucran varios objetos Realizan transacciones Denen como deben cambiar los objetos de acuerdo al entorno

Presentation Object:
Representaci on visual de los objetos Comunicaci on con los Bussiness Object para extraer y modicar datos Algunos no son GUI (interfaces con otros sistemas)

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

Ejemplo
idl
module C a l c u l o { e x c e p t i o n D i v C e r o {} ; t y p e d e f s e q u e n c e <d o u b l e > D o u b l e A r r a y ; interface Calculadora { d o u b l e suma ( i n d o u b l e A , i n d o u b l e B) ; d o u b l e r e s t a ( i n d o u b l e A , i n d o u b l e B) ; d o u b l e m u l t i p l i c a c i o n ( i n d o u b l e A , i n d o u b l e B) ; double d i v i s i o n ( i n double A , i n double B) r a i s e s ( DivCero ) ; d o u b l e p r o m e d i o ( i n D o u b l e A r r a y D) ; };

Compilaci on del IDL


// Java i d l j f a l l oldImplBase Calculadora . i d l // C ( Orbit ) o r b i t i d l 2 s k e l e t o n i m p l Calculadora . i d l

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

Implementaci on del Servant

import C a l c u l o . ; i m p o r t o r g . omg . CORBA . ; p u b l i c c l a s s CalculadoraServant extends CalculadoraImplBase { public CalculadoraServant () { } p u b l i c d o u b l e suma ( d o u b l e A , d o u b l e B) { r e t u r n A + B; } p u b l i c d o u b l e r e s t a ( d o u b l e A , d o u b l e B) { r e t u r n A B; } p u b l i c d o u b l e m u l t i p l i c a c i o n ( d o u b l e A , d o u b l e B) { r e t u r n A B; } p u b l i c double d i v i s i o n ( double A , double B) throws DivCero{ i f ( B==0) throw new D i v C e r o ( ) ; return A / B; } p u b l i c double promedio ( double A [ ] ) { d o u b l e avg = 0 . 0 ; f o r ( i n t i =0; i <A . l e n g t h ; i ++) { avg += A [ i ] ; } r e t u r n avg /A . l e n g t h ; } }

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

Aplicaci on Servidor
import import import import import public { Calculo .; o r g . omg . CosNaming . ; o r g . omg . CosNaming . N a m i n g C o n t e x t P a c k a g e . ; o r g . omg . CORBA . ; java . u t i l .; class Servidor p u b l i c S e r v i d o r ( S t r i n g Arg [ ] ) { try { // I n i c i a l i z a c i o n d e l ORB ORB o r b = ORB . i n i t ( Arg , n u l l ) ; // I n s t a n c i a d e l S e r v a n t C a l c u l a d o r a CObj = new C a l c u l a d o r a S e r v a n t ( ) ; // R e g i s t r o en e l s e r v i c i o de nombres o r g . omg . CORBA . O b j e c t Obj = o r b . r e s o l v e i n i t i a l r e f e r e n c e s ( N a m e NamingContext N a m i n g C o n t e x t = N a m i n g C o n t e x t H e l p e r . n a r r o w ( Obj ) ; NameComponent C o m p o n e n t L i s t e n e r = new NameComponent ( C a l c u l a d o r a NameComponent p a t h L i s t e n e r [ ] = { C o m p o n e n t L i s t e n e r } ; N a m i n g C o n t e x t . r e b i n d ( p a t h L i s t e n e r , CObj ) ; System . o u t . p r i n t l n ( o r b . o b j e c t t o s t r i n g ( CObj ) ) ; // C i c l o I n f i n i t o j a v a . l a n g . O b j e c t s y n c = new j a v a . l a n g . O b j e c t ( ) ; synchronized ( sync ) { sync . wait ( ) ; } } c a t c h ( E x c e p t i o n E ) { System . o u t . p r i n t l n ( E r r o r . . [ FAIL ] + E ) ; } } public } } Carlos A. Olarte (carlosolarte@puj.edu.co) BDII s t a t i c v o i d main ( S t r i n g A [ ] ) { new S e r v i d o r (A ) ;

CORBA Una arquitectura para integrar ambientes distribuidos y

Aplicaci on Cliente
import import import ... public Calculo .; o r g . omg . CosNaming . ; o r g . omg . CORBA . ; s t a t i c v o i d main ( S t r i n g A [ ] ) { try { o r b = ORB . i n i t (A , n u l l ) ; o r g . omg . CORBA . O b j e c t r e f = o r b . r e s o l v e i n i t i a l r e f e r e n c e s ( N a m e S e r v i c e ) ; // o O b t e n c i n d e l s e r v i c i o de nombre NamingContext n c r e f = N a m i n g C o n t e x t H e l p e r . n a r r o w ( r e f ) ; NameComponent nc = new NameComponent ( C a l c u l a d o r a , ) ; NameComponent p a t h [ ] = { nc } ; // o O b t e n c i n de l a r e f e r e n c i a a l a c a l c u l a d o r a Cref = C a l c u l a d o r a H e l p e r . narrow ( n c r e f . r e s o l v e ( path ) ) ; // I n v o c a c i o n e s de p r u e b a d o u b l e ADouble [ ] = new d o u b l e [ 2 ] ; ADouble [ 0 ] = 5 . 3 ; ADouble [ 1 ] = 2 . 7 ; System . o u t . p r i n t l n ( Suma : 5 . 3 + 2 . 7 = + C a l c . suma ( 5 . 3 , 2 . 7 ) ) ; System . o u t . p r i n t l n ( R e s t a : 5.3 2.7 = + C a l c . r e s t a ( 5 . 3 , 2 . 7 ) ) ; System . o u t . p r i n t l n ( Mult : 5 . 3 2 . 7 = + C a l c . m u l t i p l i c a c i o n ( 5 . 3 , 2 . 7 ) ) ; System . o u t . p r i n t l n ( D i v : 5 . 3 / 2 . 7 = + C a l c . d i v i s i o n ( 5 . 3 , 2 . 7 ) ) ; System . o u t . p r i n t l n ( Promedio : [ 5 . 3 2 . 7 ] = + C a l c . p r o m e d i o ( ADouble ) ) ; System . o u t . p r i n t l n ( D i v 0 : 5 . 3 / 0 . 0 = + C a l c . d i v i s i o n ( 5 . 3 , 0 . 0 ) ) ; } c a t c h ( E x c e p t i o n E) { System . o u t . p r i n t l n ( E r r o r . . + E ) ; }

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

Aplicaci on Cliente (Orbit)


s t a t i c CORBA Object c l i e n t i m p o r t s e r v i c e f r o m f i l e ( CORBA ORB orb , c h a r f i l e n a m e , COR CORBA Object o b j = NULL ; FILE f i l e = NULL ; i f ( ( f i l e = f o p e n ( f i l e n a m e , r )) == NULL) g e r r o r ( c o u l d n o t open %s \ n , f i l e n a m e ) ; o b j = c l i e n t i m p o r t s e r v i c e f r o m s t r e a m ( orb , f i l e , e v ) ; fclose ( f i l e ); return obj ; } s t a t i c v o i d c l i e n t r u n ( C a l c u l o C a l c u l a d o r a C a l c , CORBA Environment e v ) { char f i l e b u f f e r [ 1 0 2 4 + 1 ] ; p r i n t f ( \nSuma ( 4 . 6 , 3 . 5 ) = % f , C a l c u l o C a l c u l a d o r a s u m a ( Calc , 4 . 6 , 3 . 5 , ev ) ) ; p r i n t f ( \ n R e s t a ( 4 . 6 , 3 . 5 ) = % f , C a l c u l o C a l c u l a d o r a r e s t a ( Calc , 4 . 6 , 3 . 5 , ev ) ) ; i f ( r a i s e d e x c e p t i o n ( ev ) ) r e t u r n ; } }

CORBA char f i l e n a m e [ ] = e c h o . r e f ; C a l c u l o C a l c u l a d o r a C a l c = CORBA OBJECT NIL ; CORBA Environment e v [ 1 ] ; CORBA exception init ( ev ) ; c l i e n t i n i t (& a r g c , a r g v , & g l o b a l o r b , e v ) ; a b o r t i f e x c e p t i o n ( ev , i n i t f a i l e d ) ; g p r i n t ( R e a d i n g s e r v i c e r e f e r e n c e from f i l e \% s \\ n , f i l e n a m e ) ; Calc = ( C a l c u l o C a l c u l a d o r a ) c l i e n t i m p o r t s e r v i c e f r o m f i l e ( g l o b a l o r b , echo . r e f , ev a b o r t i f e x c e p t i o n ( ev , i m p o r t s e r v i c e f a i l e d ) ; c l i e n t r u n ( Calc , ev ) ; ...

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

Ejecuci on
Servicio de Nombres
bash 2.05 b$ t n a m e s e r v O R B I n i t i a l P o r t 2 0 2 0 C o n t e x t o de o a s i g n a c i n de nombres i n i c i a l : IOR : 0 0 0 0 0 . . . . . TransientNameServer : puerto para r e f e r e n c i a s a obj

i n i c i a l e s en : 2 0 2 0

Instancia del Objeto Calculadora


bash 2.05 b$ j a v a S e r v i d o r O R B I n i t i a l P o r t 2 0 2 0 C a l c u l a d o r a I n s t a n c i a d a . . . . . [ OK] IOR : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 c 4 9 4 4 4 c 3 a . . .

Prueba con el cliente de Java


bash 2.05 b$ j a v a C l i e n t e O R B I n i t i a l P o r t 2 0 2 0 Suma : 5 . 3 + 2 . 7 = 8 . 0 Resta : 5.3 2.7 = 2.5999999999999996 Mult : 5 . 3 2 . 7 = 1 4 . 3 1 Div : 5 . 3 / 2 . 7 = 1 . 9 6 2 9 6 2 9 6 2 9 6 2 9 6 2 8 Promedio : [ 5 . 3 2 . 7 ] = 4 . 0 E r r o r . . . C a l c u l o . D i v C e r o : IDL : C a l c u l o / D i v C e r o : 1 . 0

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

Contiuaci on

4 Prueba con el cliente C (Orbit)

bash 2.05 b$ . / C l i e n t e R e a d i n g s e r v i c e r e f e r e n c e from f i l e e c h o . r e f Suma ( 4 . 6 , 3 . 5 ) = 8 . 1 0 0 0 0 0 Resta (4.6 , 3.5)=1.100000

5 Prueba del cliente Java desde una m aquina remota:


bash 2.05 b$ j a v a C l i e n t e O R B I n i t i a l P o r t 2020 O R B I n i t i a l H o s t 1 9 2 . 1 6 . 2 5 . 8 4 Suma : 5 . 3 + 2 . 7 = 8 . 0 Resta : 5.3 2.7 = 2.5999999999999996 Mult : 5 . 3 2 . 7 = 1 4 . 3 1 Div : 5 . 3 / 2 . 7 = 1 . 9 6 2 9 6 2 9 6 2 9 6 2 9 6 2 8 Promedio : [ 5 . 3 2 . 7 ] = 4 . 0 E r r o r . . . C a l c u l o . D i v C e r o : IDL : C a l c u l o / D i v C e r o : 1 . 0

Se debe escribir el IOR en el archivo echo.ref

Carlos A. Olarte (carlosolarte@puj.edu.co) BDII

CORBA Una arquitectura para integrar ambientes distribuidos y

También podría gustarte