CORBA Una arquitectura para integrar ambientes...
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