Documentos de Académico
Documentos de Profesional
Documentos de Cultura
CORBA2
CORBA2
Contenido
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?
Introducci on
La computaci on es distribuida
Diferentes servidores (Plataforma y S.O) Diferentes clientes (Plataforma y S.O)
...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
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
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
Object Services
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
Application Objects
Objetos propios de la aplicaci on Deben ser componentes bien denidos Deben poder ser reutilizables Deben ser distribuibles Auto describibles
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
... 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
Ejemplo
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()
Se generan los esqueletos a partir del IDL Se implementan los componentes (servants) Se instancian los componentes
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....
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 ) ) ;
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)
Modelo de Objetos
Bussiness Objects:
Encapsulan los datos, reglas del negocio (como reaccionar a eventos) Denen como cambiar su estado
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)
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) ; };
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 ; } }
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 ) ;
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 ) ; }
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 ) ; ...
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
Contiuaci on