CORBA Una arquitectura para integrar ambientes...

27
CORBA Una arquitectura para integrar ambientes distribuidos y heterog´ eneos Carlos A. Olarte ([email protected]) BDII Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y

Transcript of CORBA Una arquitectura para integrar ambientes...

CORBAUna arquitectura para integrar ambientes

distribuidos y heterogeneos

Carlos A. Olarte ([email protected])BDII

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Contenido

1 Introduccion

2 Arquitectura OMA

3 CORBA

4 Object Services

5 Application Object

6 Ejemplo

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Motivacion

Un proveedor le ofrece un componente escrito en c++ queimplementa cierta funcionalidad y solamente puede serejecutado en UNIX. Sus aplicaciones Windows escritas enJava requieren dicha funcionalidad. Como puede integrarambas aplicaciones?

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Introduccion

Complejidad de los sistemas distribuidos

Los datos estan distribuidos

Diferentes lenguajesDiferentes formatos

La computacion es distribuida

Diferentes servidores (Plataforma y S.O)Diferentes clientes (Plataforma y S.O)

Los usuarios estan distribuidos

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

...Continuacion

Ventajas de los sistemas distribuidos

Se logra hacer uso de las ventajas de cada proveedor deplataformas

Los componentes pueden ser desarrollados por diferentesproveedores

Los componentes bien definidos pueden ser reutilizados

Desventajas:

Se pierde un poco de control

La depuracion puede llegar a ser muy compleja

Sin herramientas adecuadas la gestion y administracion puedesalirse de las manos

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Arquitectura OMAUna solucion al problema

Propuesta por OMG (Object Managment Group)

Solucion al problema de los ambientes distribuidos

Intenta promover un estandar para la comunicacion yconstruccion de componentes distribuidos

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

ORB

Canal de comunicacion

Invocaciones estaticas y dinamicas

Transparencia en el lenguaje

Transparencia local / remota

Sistema autodescribible

Seguridad en las transacciones

Mensajes polimorficos

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Object Services

Aumento de la funcionalidad del ORB

Los servicios incluyen:

CollectionQueryConcurrencyTransactionEventNotificationExternalization

Life CycleLicensingNamingPropertyTradingRelationshipSecurityTime

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Common Facilities

Son colecciones de componentes que proveen servicios para laconstruccion de aplicaciones:

Vertical Facilities. Servicios para aplicaciones especıficas:

SaludComercio ElectronicoProduccion, etc

Horizontal Facilities. Servicios de proposito general:

GUIsAdministracion de la informacionAdministracion del sistemaManejo de tareas (WorkFlow)

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Application Objects

Objetos propios de la aplicacion

Deben ser componentes bien definidos

Deben poder ser reutilizables

Deben ser distribuibles

Auto describibles

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Arquitectura de un Sistema CORBA

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

ORB

Canal de Comunicacion

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 ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Como se definen componentes?

... por medio de IDL (Interface Definition 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 dealto nivel que implemente el componente

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Ejemplo

module Ca l c u l o {e x c e p t i o n DivCero {} ;t y p ed e f sequence<double > DoubleArray ;i n t e r f a c e Ca l c u l a do r a {

doub l e suma ( i n doub l e A , i n doub l e B) ;doub l e r e s t a ( i n doub l e A , i n doub l e B) ;doub l e m u l t i p l i c a c i o n ( i n doub l e A , i n doub l e B) ;doub l e d i v i s i o n ( i n doub l e A , i n doub l e B)

r a i s e s ( DivCero ) ;doub l e promedio ( i n DoubleArray D) ;

} ;} ;

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Del lado del Cliente

Invocaciones Estaticas

Se generan los IDL stubs por medio de un compilador de IDLal lenguaje de implementacion

Se obtienen referencias a los objetos implementados (servidor)con ayuda del ORB

Se realizan las invocaciones como si fueran objeto locales

Invocaciones Dinamicas

Descubrir los metodos provistos por los objetos (Servidor)

Construir una invocacion (request) y realizar el llamado ainvoke()

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Del lado del servidor

Se generan los esqueletos a partir del IDL

Se implementan los componentes (servants)

Se instancian los componentes

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Referencias de los Objetos

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

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Servicio de Nombres (COSNaming)

Ademas de los metodos object to string y string to object esposible obtener referencias de objetos remotos mediante elservicio de nombres

Este servicio organiza los objetos dentro de una jerarquıa decontextos

Ca l c u l a do r a CObj = new Ca l c u l a do r aS e r v an t ( ) ;o rg . omg .CORBA. Object Obj = orb . r e s o l v e i n i t i a l r e f e r e n c e s (” NameServ ice ” ) ;NamingContext NamingContext = NamingContextHelper . narrow ( Obj ) ;NameComponent ComponentL i s tener = new NameComponent (” Ca l c u l a do r a ” , ” ” ) ;NameComponent p a t h L i s t e n e r [ ] = { ComponentL i s tene r } ;NamingContext . r e b i n d ( p a t hL i s t e n e r , CObj ) ;

orb = ORB. i n i t (A, n u l l ) ;o rg . omg .CORBA. Object r e f = orb . r e s o l v e i n i t i a l r e f e r e n c e s (” NameServ ice ” ) ;NamingContext n c r e f = NamingContextHelper . narrow ( r e f ) ;NameComponent nc = new NameComponent (” Ca l c u l a do r a ” , ” ” ) ;NameComponent path [ ] = { nc } ;C r e f = Ca l c u l a d o r aHe l p e r . narrow ( n c r e f . r e s o l v e ( path ) ) ;

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Application Object

Deben ser reutilizables (bien definidos)

Objetos tal cual como se ven en la realidad

Definidos por interfaces IDL

Interaccion transparente con ayuda de los servicios CORBA

Flexibles (no atados a un sistema monolıtico)

Deben ser libres del contexto (utilizables en diferentessituaciones)

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Modelo de Objetos

Bussiness Objects:

Encapsulan los datos, reglas del negocio (como reaccionar aeventos)Definen como cambiar su estado

Bussiness Process Objects:

Encapsulan la logica del negocio a nivel mas general (procesos)Implementan procesos que involucran varios objetosRealizan transaccionesDefinen como deben cambiar los objetos de acuerdo al entorno

Presentation Object:

Representacion visual de los objetosComunicacion con los Bussiness Object para extraer ymodificar datosAlgunos no son GUI (interfaces con otros sistemas)

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Ejemplo

idl

module Ca l c u l o {e x c e p t i o n DivCero {} ;t y p ed e f sequence<double > DoubleArray ;i n t e r f a c e Ca l c u l a do r a {

doub l e suma ( i n doub l e A , i n doub l e B) ;doub l e r e s t a ( i n doub l e A , i n doub l e B) ;doub l e m u l t i p l i c a c i o n ( i n doub l e A , i n doub l e B) ;doub l e d i v i s i o n ( i n doub l e A , i n doub l e B) r a i s e s ( DivCero ) ;doub l e promedio ( i n DoubleArray D) ;

} ;} ;

Compilacion del IDL

// Javai d l j − f a l l −o ld Imp lBase Ca l c u l a do r a . i d l// C ( Orb i t )o r b i t−i d l −2−−s k e l e t on−imp l Ca l c u l a do r a . i d l

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Implementacion del Servant

import Ca l c u l o .∗ ;import org . omg .CORBA.∗ ;

pub l i c c l a s s Ca l c u l a do r aS e r v an t extends Ca l c u l a do r a Imp lBa s e {pub l i c Ca l c u l a do r aS e r v an t ( ) { }pub l i c double suma ( double A , double B){ r e t u r n A + B;}pub l i c double r e s t a ( double A , double B){ r e t u r n A − B;}pub l i c double m u l t i p l i c a c i o n ( double A , double B){ r e t u r n A ∗ B;}pub l i c double d i v i s i o n ( double A , double B) throws DivCero{i f (B==0) throw new DivCero ( ) ;r e t u r n A / B; }pub l i c double promedio ( double A [ ] ) {double 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 ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Aplicacion Servidor

import Ca l c u l o .∗ ;import org . omg . CosNaming .∗ ;import org . omg . CosNaming . NamingContextPackage .∗ ;import org . omg .CORBA.∗ ;import j a v a . u t i l .∗ ;pub l i c c l a s s S e r v i d o r{

pub l i c S e r v i d o r ( S t r i n g Arg [ ] ) {t r y {

// I n i c i a l i z a c i o n d e l ORBORB orb = ORB. i n i t ( Arg , n u l l ) ;// I n s t a n c i a d e l Se r van tCa l c u l a do r a CObj = new Ca l c u l a do r aS e r v an t ( ) ;// R e g i s t r o en e l s e r v i c i o de nombresorg . omg .CORBA. Object Obj = orb . r e s o l v e i n i t i a l r e f e r e n c e s ( ”NameServ ice ” ) ;NamingContext NamingContext = NamingContextHelper . narrow ( Obj ) ;NameComponent ComponentL i s tener = new NameComponent ( ” Ca l c u l a do r a ” , ”” ) ;NameComponent p a t h L i s t e n e r [ ] = { ComponentL i s tene r } ;NamingContext . r e b i n d ( p a t hL i s t e n e r , CObj ) ;

System . out . p r i n t l n ( orb . 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 oj a v a . l ang . Object sync = new j a v a . l ang . Object ( ) ;s ynch ron i zed ( sync ) { sync . wa i t ( ) ; }

}catch ( Excep t i on E ) { System . out . p r i n t l n ( ” E r r o r . . [ FAIL ] ” + E ) ;}

}

pub l i c s t a t i c vo id main ( S t r i n g A [ ] ) {new S e r v i d o r (A ) ;

}}

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Aplicacion Cliente

import Ca l c u l o .∗ ;import org . omg . CosNaming .∗ ;import org . omg .CORBA.∗ ;. . .pub l i c s t a t i c vo id main ( S t r i n g A [ ] ) {

t r y {orb = ORB. i n i t (A, n u l l ) ;o rg . omg .CORBA. Object r e f = orb . r e s o l v e i n i t i a l r e f e r e n c e s ( ”NameServ ice ” ) ;// oObtenc in d e l s e r v i c i o de nombreNamingContext n c r e f = NamingContextHelper . narrow ( r e f ) ;NameComponent nc = new NameComponent ( ” Ca l c u l a do r a ” , ”” ) ;NameComponent path [ ] = { nc } ;// oObtenc in 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 aCre f = Ca l c u l a d o r aHe 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 pruebadouble ADouble [ ] = new double [ 2 ] ;ADouble [ 0 ] = 5 . 3 ; ADouble [ 1 ] = 2 . 7 ;System . out . p r i n t l n ( ”Suma: 5.3 + 2.7 = ” + Calc . suma ( 5 . 3 , 2 . 7 ) ) ;System . out . p r i n t l n ( ”Resta : 5.3 − 2.7 = ” + Calc . r e s t a ( 5 . 3 , 2 . 7 ) ) ;System . out . p r i n t l n ( ”Mult : 5 .3 ∗ 2 .7 = ” + Calc . m u l t i p l i c a c i o n ( 5 . 3 , 2 . 7 ) ) ;System . out . p r i n t l n ( ”Div : 5 .3 / 2 .7 = ” + Calc . d i v i s i o n ( 5 . 3 , 2 . 7 ) ) ;System . out . p r i n t l n ( ”Promedio : [ 5 . 3 2 . 7 ] = ” + Calc . promedio ( ADouble ) ) ;System . out . p r i n t l n ( ”Div0 : 5 .3 / 0 .0 = ” + Calc . d i v i s i o n ( 5 . 3 , 0 . 0 ) ) ;

}catch ( Excep t i on E){System . out . p r i n t l n ( ” E r r o r . . ” + E) ;}

}

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Aplicacion 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 , char ∗ f i l e name , CORBA Environment ∗ ev ) {CORBA Object ob j = NULL ;FILE ∗ f i l e = NULL ;i f ( ( f i l e = fopen ( f i l e name , ” r ” )) == NULL)

g e r r o r ( ” cou ld not open %s\n” , f i l e n ame ) ;ob 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 , ev ) ;f c l o s e ( f i l e ) ;r e t u r n ob j ;

}

s t a t i c vo id 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 Ca lc , CORBA Environment ∗ ev ){

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 ” , Ca l c u l o Ca l c u l a do r a s uma ( Calc , 4 . 6 , 3 . 5 , ev ) ) ;p r i n t f ( ”\nResta (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 ame [ ] = ” echo . r e f ” ;C a l c u l o C a l c u l a d o r a Ca lc = CORBA OBJECT NIL ;CORBA Environment ev [ 1 ] ;CORBA except i on in i t ( ev ) ;c l i e n t i n i t (& argc , argv , & g l o b a l o r b , ev ) ;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 ( ”Reading 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 ame ) ;Ca lc = ( Ca 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 , ” impor 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 ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Ejecucion

1 Servicio de Nombresbash−2.05b$ tnameserv −ORB In i t i a l Po r t 2020Contexto 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 . . . . .Trans i entNameServe r : pue r to para r e f e r e n c i a s a ob j i n i c i a l e s en : 2 020

2 Instancia del Objeto Calculadora

bash−2.05b$ j a v a S e r v i d o r −ORB In i t i a l Po r t 2020Ca l c u l a do r a I n s t a n c i a d a . . . . . [ OK]IOR :000000000000001 c49444c3a . . .

3 Prueba con el cliente de Javabash−2.05b$ j a v a C l i e n t e −ORB In i t i a l Po r t 2020Suma : 5 . 3 + 2 . 7 = 8 . 0Resta : 5 .3 − 2 .7 = 2 .5999999999999996Mult : 5 . 3 ∗ 2 . 7 = 1 4 . 3 1Div : 5 . 3 / 2 . 7 = 1 . 9629629629629628Promedio : [ 5 . 3 2 . 7 ] = 4 . 0E r r o r . . . C a l c u l o . DivCero : IDL : Ca l c u l o /DivCero : 1 . 0

Carlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos

Contiuacion

4 Prueba con el cliente C (Orbit) 1

bash−2.05b$ . / C l i e n t eReading s e r v i c e r e f e r e n c e from f i l e ” echo . r e f ”Suma (4 . 6 , 3 . 5 )=8 . 1 00000Resta ( 4 . 6 , 3 . 5 )=1 . 1 00000

5 Prueba del cliente Java desde una maquina remota:

bash−2.05b$ j a v a C l i e n t e −ORB In i t i a l Po r t 2020 −ORBIn i t i a lHo s t 1 9 2 . 1 6 . 2 5 . 8 4Suma : 5 . 3 + 2 . 7 = 8 . 0Resta : 5 .3 − 2 .7 = 2 .5999999999999996Mult : 5 . 3 ∗ 2 . 7 = 1 4 . 3 1Div : 5 . 3 / 2 . 7 = 1 . 9629629629629628Promedio : [ 5 . 3 2 . 7 ] = 4 . 0E r r o r . . . C a l c u l o . DivCero : IDL : Ca l c u l o /DivCero : 1 . 0

1Se debe escribir el IOR en el archivo echo.refCarlos A. Olarte ([email protected]) BDII CORBA Una arquitectura para integrar ambientes distribuidos y heterogeneos