You are on page 1of 23

CORBA - Common Object Request Architecture

En el Captulo 7 ya se present el paradigma de objetos distribuidos. Entre los temas cubiertos haba la arquitectura para un sistema de objetos distribuidos tpico, ilustrada mediante Java R !. En este captulo, se presentar" una arquitectura alternativa # una arquitectura est"ndar # para objetos distribuidos. $ la arquitectura se la conoce como Common Object Request Broker Architecture (CORBA)%. &as ra'ones de este inter(s en C)R*$ son dos+ En primer lugar, proporciona un caso de estudio que ilustra dos arquitecturas similares, pero en contraste, para un concepto determinado, los objetos distribuidos. En segundo lugar, C)R*$ proporciona un ejemplo de una arquitectura dise,ada para alcan'ar la m"-ima interoperabilidad. C)R*$ es una arquitectura de objetos distribuidos dise,ada para permitir que dichos objetos distribuidos interoperen sobre entornos heterog(neos, donde los objetos pueden estar implementados en di.erentes leguajes de programacin y/o desplegados sobre di.erentes plata.ormas. C)R*$ se di.erencia de la arquitectura Java R ! en un aspecto signi.icativo+ R ! es una tecnologa propietaria de 0un icrosystems, !nc. y slo soporta objetos que se encuentren escritos en el lenguaje Java. 1or el contrario, C)R*$ ha sido desarrollado por OMG (Object Management Group) 2corba.org, %3, un consorcio de empresas, y .ue dise,ado para ma-imi'ar el grado de interoperabilidad. Es importante saber que C)R*$ no es en s mismo una herramienta para dar soporte a objetos distribuidos4 se trata de un conjunto de protocolos. 5na herramienta que d( soporte a dichos protocolos se denomina compatible con CORBA 6CORBA compliant7, y los objetos que se desarrollen sobre ella podr"n interoperar con otros objetos desarrollados por otra herramienta compatible con C)R*$. C)R*$ proporciona un conjunto de protocolos muy rico 20iegel, 83, y el abordar todos ellos est" m"s all" del "mbito de este libro. 0in embargo, se centrar" en los conceptos clave de C)R*$ que est(n relacionados con el paradigma de objetos distribuidos. 9ambi(n se estudiar" una herramienta basada en C)R*$+ Interface Definition Language (IDL) de Java.

Arquitectura bsica
&a :igura %;.; muestra la arquitectura b"sica de C)R*$ 2omg.org/gettingstarted, <3. Como arquitectura de objetos distribuidos, guarda una gran semejan'a con la arquitectura R !. =esde el punto de vista lgico, un cliente de objeto reali'a una llamada a un m(todo de un objeto distribuido. El cliente interact>a con un proxy # un stub # mientras que la implementacin del objeto interact>a con un proxy de servidor # un skeleton. $ di.erencia del caso de Java R !, una capa adicional de so.t?are, conocida como ORB (Object Request Broker) es necesaria. En el lado del cliente, la capa del )R* act>a con intermediaria entre el stub y la red y sistema operativo local del cliente. En el lado del servidor, la capa del )R* sirve de intermediaria entre el
%

@. del 9. &a traduccin correcta de Object Request Broker sera Aagente o intermediario de peticiones de objetosB. 0e ha optado por usar el t(rmino ingl(s debido, por un lado, a su uso e-tendido 6incluso en la literatura en espa,ol7 y por otro porque la traduccin est" sujeta a con.usin 6especialmente con terminologa similar dentro de la tecnologa de agentes7.

skeleton y la red y sistema operativo del servidor. 5tili'ando un protocolo com>n, las capas )R* de ambos e-tremos son capaces de resolver las di.erencias e-istentes en lo re.erente a lenguajes de programacin, as como las relativas a las plata.ormas 6red y sistema operativo7, para de esta .orma ayudar a la comunicacin entre los dos e-tremos. El cliente utili'a un servicio de nombrado para locali'ar el objeto. :!C5R$ %;.%+ $rquitectura C)R*$ b"sica.

La interfaz de objetos de CORBA


5n objeto distribuido se de.ine usando un .ichero similar al .ichero que de.ine la inter.a' remota en Java R !. =ebido a que C)R*$ es independiente de lenguaje, la inter.a' se de.ine por medio de un lenguaje universal con una sinta-is espec.ica, conocido como CORBA Interface Definition Language (IDL-Len !aje de De"inici#n de Inter"aces). Encontrar" que la sinta-is de C)R*$ !=& es muy similar a la de Java o CDD, pero recuerde que un objeto de.inido en C)R*$ !=& puede implementarse en un gran n>mero de lenguajes, incluyendo C, CDD, Java, C)*)&, 0malltalE, $da, &ist, 1ython, e !=&0cript 2omg.org/gettingstarted, <3. 1ara cada uno de estos lenguajes, ) C tiene una traduccin 6mapping7 est"ndar de C)R*$ !=& a dicho lenguaje de programacin, de .orma que se pueda usar un compilador para procesar las inter.aces C)R*$ y generar los proxies necesarios para servir de inter.a' ante la implementacin del objeto o ante el cliente, que pueden estar, por tanto, escritos en cualquier lenguaje soportado por C)R*$. &a :igura %;.< muestra una aplicacin done el cliente es un programa escrito en Java mientras que el objeto est" implementado en CDD. Cabe resaltar que el stub generado por la traduccin de la inter.a' del objeto C)R*$ es un stub en Java, mientras que el skeleton se ha generado traduciendo el inter.a' a un skeleton CDD. $ pesar de estar implementados en di.erentes lenguajes, los dos )R* pueden interactuar gracias a los protocolos comunes soportados por ambo. E-iste un gran n>mero de )R* disponibles, tanto e-perimentales como comerciales 2corba.org, %4 puder.org, %F3. :!C5R$ %;.<+ !ndependencia de lenguaje en C)R*$.

Protocolos inter-ORB
1ara que dos )R* puedan interoperar, ) C ha especi.icado un protocolo conocido como General Inter ORB !rotocol (GIO$), una especi.icacin que proporciona un marco general para que se construyan protocolos interoperables por encima de un nivel de transporte espec.ico. 5n caso especial de este protocolo en el Internet Inter ORB !rotocol (IIO$), que se corresponde con el C!)1 aplicado sobre el nivel de transporte de 9C1/!1. &a especi.icacin de !!)1 incluye los siguientes elementos+ %. Re%!isitos de esti#n de transporte. Estos requisitos especi.ican que se necesita para conectarse y desconectarse, y los papeles que el cliente y el objeto servidor interpretan en establecer y liberar cone-iones.

<. De"inici#n de la representaci#n com&n de datos. 0e necesita de.inir un esquema de codi.icacin para empaquetar y desempaquetar los datos para cada tipo de datos del !=&. G. 'ormatos de los mensajes. 0e necesita de.inir los di.erentes .ormatos de los distintos tipos de mensajes. &os mensajes permiten a los clientes enviar solicitudes al objeto servidor y recibir sus respuestas. Cada cliente usa un mensaje de peticin para invocar a un m(todo declarado en la inter.a' C)R*$ de un objeto y recibe un mensaje de respuesta del servidor. 5n )R* que soporte la especi.icacin de !!)1 puede interoperar con otro )R* compatible !!)1 a trav(s de !nternet. =e aqu surge la denominacin b!s de objetos+ !nternet se ve como un bus de objetos C)R*$ interconectados, como se muestra en la :igura %;.G. @)9$+ En arquitectura de computadores, un bus es equivalente a una autopista sobre la cual viajan los datos entre los componentes de un computador. En redes in.orm"ticas, un bus es un cable central que interconecta dispositivos. :!C5R$ %;.G+ !nternet como un bus de objetos.

Servidores de objetos

clientes de objetos

Como en el caso de Java R !, un servidor de objetos e-porta cada objeto distribuido C)R*$, similar al caso del servidor de objetos R !. 5n cliente de objetos obtiene la re.erencia a un objeto distribuido por medio de un servicio de nombres o de directorio 6que se ver" a continuacin7 y posteriormente invoca los m(todos de dicho objeto distribuido

Referencias a objetos CORBA


9ambi(n como en el caso de Java R !, un objeto distribuido C)R*$ se locali'a por medio de una re"erencia a objeto. Ha que C)R*$ es independiente de lenguaje, una re.erencia a un objeto C)R*$ es una entidad abstracta traducida a una re.erencia de objeto espec.ica de cada lenguaje por medio del )R*, en una representacin elegida por el desarrollador del propio )R*. 1or interoperabilidad, ) C especi.ica un protocolo para re.erencias abstractas de objetos, conocido como protocolo Interoperable Object Reference (IOR). 5n )R* que sea compatible con el protocolo !)R permitir" que una re.erencia a objeto se registre y se obtenga desde un servicio de directorio compatible con !)R. &a re.erencias a objetos C)R*$ representadas en este protocolo se denominan tambi(n IOR (Interoperable Object References). 5na !)R es una cadena de caracteres que contiene codi.icada la in.ormacin siguiente+ El tipo de objeto. El ordenador donde se encuentra el objeto. El n>mero de puerto del servidor del objeto. 5na clave del objeto, una cadena de bytes que identi.ica al objeto. &a clave de objeto la utili'a el servidor de objetos para locali'ar el objeto internamente.

5na !)R es una cadena de caracteres parecida a esta+


IOR:000000000000000d49444c3a677269643a312e3000000 00000000001000000000000004c0001000000000015756c74 72612e6475626c696e2e696f6e612e6965000009630000002 83a5c756c7472612e6475626c696e2e696f6e612e69653a67 7269643a303a3a49523a67726964003a

&a representacin consiste en un pre.ijo con los caracteres A!)R+B seguido por una secuencia he-adecimal de caracteres num(ricos, cada car"cter representa 8 bits de datos binarios en la !)R. &os detalles de la representacin no son importantes para este estudio4 a los lectores que est(n interesados se les re.iere a la bibliogra.a para m"s detalle.

Servicio de nombres CORBA

servicio de nombres intero!erable de

En el Captulo 7, cuando se estudi Java R !, se present el registro R ! como un servicio de directorio distribuido para objetos R ! distribuidos. C)R*$ especi.ica un servicio de directorio con el mismo propsito. El (ervicio de )ombres ("aming #er$ice) 2omg.org/technology, I4 java.sun.com/j<se, %J3 sirve como un directorio de objetos C)R*$, haciendo el papel de su an"logo, el registro R !, con la e-cepcin de que el 0ervicio de @ombres de C)R*$ es independiente de plata.orma y de lenguaje de programacin.

Servicio de nombres de CORBA


El 0ervicio de @ombres permite que clientes basados en )R* obtengan las re.erencias a los objetos que desean usar. 1ermite asociar nombres a re.erencias a objetos. &os clientes pueden consultar al 0ervicio de @ombres usando un nombre predeterminado para obtener la re.erencia asociada al objeto. 1ara e-portar un objeto distribuido, un servidor de objetos C)R*$ contacta con el 0ervicio de @ombres para asociar (bin%) un nombre simblico al objeto. El 0ervicio de @ombres mantiene una base de datos con los nombres y los objetos asociados a dichos nombres. 1ara obtener una re.erencia a un objeto, un cliente de objetos solicita que el 0ervicio de @ombres busque el objeto asociado con dicho nombre 6a este proceso se le denomina resol!ci#n (resol$e) del nombre del objeto7. El $1! para el 0ervicio de @ombres se encuentra especi.icada por medio de una inter.a' !=&, que incluye m(todos que permiten a servidores asociar nombres a objetos y a los clientes resolverlos. 1ara ser lo m"s general posible, el esquema de nombrado de objetos en C)R*$ es necesariamente complejo. Ha que el espacio de nombrado es universal, se de.ine una jerarqua de nombrado est"ndar de una manera similar a un directorio de .icheros, como se muestra en la :igura %;.8. En este esquema de nombrado, un conte*to de nombrado (naming conte&t) se corresponde con una carpeta o directorio en una "rbol de .icheros, mientras que los nombres de objetos se corresponden con los .icheros. El nombre completo de un objeto, incluyendo todos los conte-tos de nombrado asociados, se denomina nombre comp!esto. El primer componete de un nombre compuesto proporciona el nombre de conte-to de nombrado donde se

encuentra el segundo. Este proceso contin>a hasta que se llega al >ltimo componente del nombre compuesto. :!C5R$ %;.8+ &a jerarqua de nombrado de C)R*$. &a sinta-is para un nombre de un objeto es la siguiente+ Kconte-to de nombradoL.Kconte-to de nombradoL. ... Kconte-to de nombradoL.Knombre del objetoL =onde la secuencia de conte-tos de nombrado lleva hasta el nombre del objeto. &a :igura %;.I muestra un ejemplo de una jerarqua de nombrado. Como se puede ver, un objeto que representa el departamento de ropa de hombres se denominara tienda.ropa.hombre, donde tienda y ropa son conte-tos de nombrado, y hombre el nombre del objeto. :!C5R$ %;.I+ 5n ejemplo de la jerarqua de nombrado de C)R*$. &os conte-tos de nombrado y los nombres se crean utili'ando los m(todos proporcionados por la inter.a' del 0ervicio de @ombres.

Servicio de nombres interoperable de CORBA


El Interoprable "aming #er$ice (I)( - (ervicio de )ombres Interoperable) 2omg.org/technology, I4 java.sun.com/j<se, %J3 es un sistema de nombrado basado en el .ormato 5R& para el 0ervicio de @ombres de C)R*$. 1ermite que las aplicaciones compartan un conte-to inicial de nombrado y que proporcionen un 5R& para acceder a un objeto C)R*$. 5tili'ando este sistema, un 5R& del tipo corbaname::acme.com:2 ! "tienda#ropa#mujer se podra usar para acceder al objeto tienda#ropa#mujer del servicio de nombres en el puerto <;I; del servidor con nombre acme.com.

Servicios de objetos CORBA


=entro de las especi.icaciones de C)R*$ se encuentran varias que proporcionan servicios usados habitualmente por los objetos distribuidos para construir aplicaciones. $ continuacin se recogen algunos de los servicios 2corba.org, %3+ (ervicio de Conc!rrencia (Concurrenc' #er$ice) # servicio que proporciona control de concurrencia. (ervicio de +ventos (($ent #er$ice) # para la sincroni'acin de eventos. (ervicio de Log (Logging #er$ice) # para registrar eventos. (ervicio de )ombres ("aming #er$ice) # servicio de directorio, como se ha descrito en la seccin anterior. (ervicio de $lani"icaci#n (#che%uling #er$ice) # para plani.icacin de eventos. (ervicio de (e !ridad (#ecurit' #er$ice) # para gestin de seguridad. (ervicio de )e ociaci#n ()ra%ing #er$ice) # para locali'ar servicios por tipo 6no por nombre7.

(ervicio de ,iempo ()ime #er$ice) # un servicio para eventos relativos al tiempo. (ervicio de )oti"icaci#n ("otification #er$ice) # para noti.icacin de eventos. (ervicio de ,ransacciones de Objetos (Object )ransaction #er$ice) # para procesamiento de transacciones.

Cada servicio se de.ine por medio de un !=& est"ndar que puede ser implementado por los desarrolladores de objetos de servicio, y los m(todos del objeto de servicio se pueden invocar desde cualquier cliente C)R*$. Como ejemplo, la especi.icacin de C)R*$ del 0ervicio de 9iempo describe las siguientes .uncionalidades+ 1ermite al usuario obtener el tiempo en el instante actual junto con una estimacin del error cometido. Macer comprobaciones sobre el orden en el que se han producido varios AeventosB. Cenerar eventos relativos al tiempo por medio de tempori'adores y alarmas. Calcular el intervalo de tiempo entre dos eventos. El 0ervicio de 9iempo consiste en dos servicios, cada uno de ellos descrito por medio de una inter.a' de servicio+ %. El (ervicio de ,iempo maneja objetos de tipo 9iempo 5niversal 6$ni%ersal &ime7 y objetos de tipo !ntervalo de 9iempo 6&ime 'nter%al7 y est" representado por la inter.a' ,ime(ervice. El servicio proporciona herramientas para registrar tiempos en aplicaciones C)R*$. <. El (ervicio de +ventos de ,iempo gestiona objetos del tipo anejadores de Eventos de 9iempo 6&ime (%ent )andlers7 y se encuentra recogido en la inter.a' ,ime+vent(ervice, que proporciona m(todos para programar y cancelar tempori'adores con tiempos absolutos, relativos o peridicos. 1or medio de estas especi.icaciones, se han desarrollados varios objetos para el 0ervicio de 9iempo de C)R*$ por parte de di.erentes .abricantes, investigadores o individualmente.

Ada!tadores de Objetos
En la arquitectura b"sica de C)R*$, la implementacin de objetos distribuidos interact>a con el skeleton para conectarse con el stub en el lado del cliente. Cuando la arquitectura evolucion, se a,adi un componente so.t?are al skeleton en el lado del servidor+ el adaptador de objetos (object a%apter) 6v(ase la :igura %;.J7. 5n adaptador de objetos simpli.ica las responsabilidades que tiene un )R* asisti(ndole en hacer llegar las peticiones del cliente a la implementacin del objeto. Cuando un )R* recibe una peticin de un cliente, locali'a el adaptador de objetos asociado a dicho objeto y redirige la peticin a dicho adaptador. El adaptador interact>a con el

skeleton de la implementacin del objeto, el cual reali'a el empaquetamiento e invoca el m(todo apropiado del objeto. May di.erentes tipos de adaptadores de objetos C)R*$. El !ortable Object A%apter ($OA - Adaptador de Objetos $ortable) 2citeseer.nj.nec.com, N3 es un tipo particular de adaptador de objetos de.inido por una especi.icacin de C)R*$. 5n adaptador de objetos de tipo 1)$ permite que una implementacin de objeto .uncione en varios )R*, de .orma que la implementacin del objeto sea portable a trav(s de varias plata.ormas. :!C5R$ %;.J+ 5n adaptador de objetos.

"#L de $ava
Con las especi.icaciones de C)R*$, un programador puede implementar cualquier componente especi.icado en el marco de C)R*$. En realidad, un gran n>mero de herramientas C)R*$ se encuentran disponibles 2corba.org, %3, muchas de las cuales puede obtenerse sin coste alguno. $lgunas de estas herramientas est"n desarrolladas por empresas, otras por investigadores y algunas otras por grupos independientes. Como ejemplo de una herramienta de este tipo, se va a ver el !=& de Java 6o Java !=&7. Java !=& es parte del la plata.orma *a%a 2+ ,tandard (dition 6J<0E7. Java !=& incluye un ORB, un compilador IDL a *a$a, y un subconjunto de los servicios est.ndar de CORBA. Es necesario rese,ar que adem"s de Java !=&, Java proporciona varias herramientas compatibles con C)R*$ 2java.sun.com/j<ee, 73, incluyendo R ! sobre !!)1 2java.sun.com/j<se/%.G, F3, que permite que una aplicacin C)R*$ se escriba con la sinta-is y la sem"ntica de R !. Con su conocimiento de R ! y C)R*$, debera ser capa' de aprender R ! sobre !!)1 por su cuenta. En el resto de este captulo, se tratar" Java !=& como un ejemplo de entorno C)R*$.

Paquetes claves de Java IDL


Java !=& proporciona una serie de paquetes que contienen inter.aces y clases para dar soporte a C)R*$ 2java.sun.com/j<se/%.8, %73+ El paquete org.omg.CORBA contiene las inter.aces y las clases que proporcionan la traduccin 6mapping7 de las $1! de C)R*$ ) C al lenguaje de programacin Java. El paquete org.omg.Cos-aming contiene los inter.aces y las clases que dan soporte al 0ervicio de @ombrado para Java !=&. org.omg.CORBA contiene inter.aces y clases para soportar el $1! de acceso al )R*.

Herramientas de Java IDL


Java !=& dispone de un conjunto de herramientas para desarrollar aplicaciones C)R*$ 2java.sun.com/products, %N3+ i%lj # el compilador !=&OaOJava 6-ota+ 0e desaconseja la utili'acin de la anterior versin de este compilador, idl2ja%a.7

orb% # proceso servidor que da soporte al 0ervicio de @ombrado, as como a otros servicios. ser$ertool # proporciona una inter.a' en lnea de mandatos para que los programadores de aplicaciones puedan registrar/desregistrar objetos, y arrancar/parar servidores. tnameser$ # una versin antigua del 0ervicio de @ombrado de Java !=& cuyo uso se desaconseja actualmente.

na aplicaci!n CORBA de e"emplo


El siguiente ejemplo ilustra el uso de las .uncionalidades de soporte a !=& disponibles en el entorno *a%a 2 ,tandard (dition 6J<0E7, versin %.8 2java.sun.com/j<se/%.8, <;3. 0i usted est" utili'ando una versin anterior de Java, como j<0E %.G, la sinta-is y algunos de los mecanismos que se describir"n aqu ser"n di.erentes. El ejemplo muestra un objeto C)R*$ que proporciona un m(todo que devuelve la cadena de caracteres A)ola mundoB. El ejemplo, aunque muy simple, permite ilustrar los .undamentos b"sicos. En el ejemplo, el objeto distribuido se denomina )ola. Cuando desarrolle su aplicacin, podr" substituirlos por un nombre di.erente de objeto en cualquiera de los sitios en los que la palabra )ola apare'ca como descripcin. 'ic/ero de la inter"a0 CORBA El punto de arranque de una aplicacin C)R*$ es el desarrollo del .ichero de inter.a' C)R*$ escrito en el !=& de ) C, simplemente llamada .ichero !=&. Recuerde que !=& es un lenguaje universal, de .orma que la sinta-is de este .ichero de inter.a' es la misma independientemente de cu"les sean las herramientas C)R*$ utili'adas. &a :igura %;.7 muestra un ejemplo de un posible .ichero !=& que declara la inter.a' llamada )ola. &a inter.a' de.ine dos m(todos+ El m(todo decir)ola./ no requiere ning>n argumento y devuelve una cadena de caracteres 6ntese que el tipo string se escribe en min>sculas4 este tipo string es un tipo de datos del !=& de C)R*$74 el m(todo apagar./ desactiva el )R* y se recomienda incluirlo en todos los inter.aces de servicio C)R*$. &as palabras module, inter0ace, string, y one1ay son palabras reservadas en !=&. 5n module 6mdulo7, como indica la palabra, describe un mdulo so.t?are. 0e pueden declarar una o varias inter.aces dentro de un mismo mdulo, as como uno o varios m(todos se pueden declarar dentro de cada inter.a'. El modi.icador one1ay denota que el m(todo apagar requiere slo una comunicacin del cliente al servidor 6y ninguna respuesta del servidor al cliente7. El .ichero !=& puede colocarse en un directorio dedicado para esta aplicacin. El .ichero se compila usando el compilador idlj de la siguiente .orma+
idlj fall Hola.idl

:!C5R$ %;.7+ )ola.idl.


1 2 3 4 5 $ module HolaApp { interface Hola { string decirHola(); one!a" #oid apagar(); %;

&

%;

&a opcin 20all es necesaria para que el compilador genere todos los .icheros necesarios para el resto del ejemplo, que, en este caso, los crear" en el directorio )olaApp. En general, estos .icheros se generan en un subdirectorio denominado con el mismo nombre que el mdulo compilado. 0i la compilacin tiene (-ito se genera los siguientes .icheros+ 3. )olaOperations.ja%a 2. )ola.ja%a 4. )ola)elper.ja%a 5. )ola)older.ja%a !. 6)ola,tub.ja%a 7. )ola8OA.ja%a Estos .icheros se generan por el compilador idlj de .orma autom"tica como resultado de una compilacin con (-ito4 estos .icheros no necesitan ninguna modi.icacin por su parte. 0e e-plicar" brevemente cada uno de estos .icheros en los siguientes p"rra.os. 1ara este libro, resulta interesante de todas .ormas que cono'ca los contenidos de cada uno de estos .icheros. +olaOperations,ja$a1 el inter"a0 de operaciones El .ichero )olaOperations.ja%a 6:igura %;.N7, conocido de .orma general como inter"a0 de operaciones Java, es un .ichero de inter.a' Java que traduce el .ichero de inter.a' !=& C)R*$ 6)ola.idl7. El .ichero contiene los m(todos de.inidos en el .ichero !=& original+ En este caso los m(todos decir)ola./ y apagar./. :!C5R$ %;.N+ )olaApp#)olaOperations.ja%a.
1 2 3 4 5 $ & 4 15 11 12 13 14 pac'age HolaApp; ()) ) HolaApp(Hola*perations.ja#a ) +enerated ," t-e ./01to12a#a compiler ) #ersion 33.13 from Hola.idl )( pu,lic interface Hola*perations { 6tring decirHola (); #oid apagar (); % (( interface Hola*perations

+ola,ja$a1 el "ic/ero de "irma de inter"a0 El .ichero )ola.ja%a 6:igura %;.F7, denominado "ic/ero de "irma de inter"a0. E-tiende las clases est"ndar de C)R*$ org.omg.portable.'9:(ntity, org.omg.CORBA.Object, y la inter.a' espec.ica de la aplicacin, )olaOperations, descrito en la seccin anterior. :!C5R$ %;.F+ )olaApp#)ola.ja%a.
1 2 3 4 pac'age HolaApp; ()) ) HolaApp(Hola.ja#a

$ & 4 pu,lic interface Hola e8tends Hola*perations7 15 org.omg.9*:;A.*,ject7 11 org.omg.9*:;A.porta,le../0<ntit" 12 { 13 % (( interface Hola

) +enerated ," t-e ./01to12a#a compiler (porta,le)7 ) #ersion 33.13 from Hola.idl )(

El .ichero de .irma de inter.a' combina las caractersticas del inter.a' de operaciones de Java 6)olaOperations.ja%a7 con las caractersticas de las clases C)R*$ que e-tiende. +ola+elper,ja$a1 la clase de a2!da &a clase Java )ola)elper 6:igura %;.%;7, proporciona .uncionalidades au-iliares necesarias para dar soporte a los objetos C)R*$ en el conte-to del lenguaje de programacin Java. En particular, un m(todo, narro1 6v(ase la lnea 8F7 permite que una re.erencia a un objeto C)R*$ se pueda convertir a su tipo correspondiente en Java, de .orma que el objeto C)R*$ pueda utili'arse con la sinta-is de un objeto Java. &a descripcin detallada de la sinta-is y la sem"ntica del .ichero est" m"s all" del "mbito de este libro. :!C5R$ %;.%;+ )olaApp#)ola)elper.ja%a.
1 2 3 4 5 $ & 4 15 11 12 13 14 15 1 1$ 1& 14 25 21 22 23 24 25 2 2$ 2& 24 35 31 32 33 34 35 3 3$ 3& 34 pac'age HolaApp; ()) ) HolaApp(HolaHelper.ja#a ) +enerated ," t-e ./01to12a#a compiler (porta,le)7 ) #ersion 33.13 from Hola.idl )( a,stract pu,lic class HolaHelper { pri#ate static 6tring =id > 3./0HolaApp(Hola1.53; pu,lic static #oid insert (org.omg.9*:;A.An" a7 HolaApp.Hola t-at) { org.omg.9*:;A.porta,le.*utput6tream out > a.create=output=stream (); a.t"pe (t"pe ()); !rite (out7 t-at); a.read=#alue (out.create=input=stream ()7 t"pe ()); %(( end insert pu,lic static HolaApp.Hola e8tract (org.omg.9*:;A.An" a) { return read (a.create=input=stream ()); % ((end e8tract pri#ate static org.omg.9*:;A.?"pe9ode ==t"pe9ode > null; s"nc-roni@ed pu,lic static org.omg.9*:;A.?"pe9ode t"pe ( { if (==t"pe9ode >> null) { ==t"pe9ode > org.omg.9*:;A.*:;.init(). create=interface=tc (HolaApp.HolaHelper.id ()7 3Hola3); % return ==t"pe9ode; % ((end t"pe

45 41 42 43 44 45 4 4$ 4& 44 55 51 52 53 54 55 5 5$ 5& 54 5 1 2 3 4 5 $ & 4 $5 $1 $2 $3 $4 $5 $ $$ $& $4

pu,lic static 6tring id () { return =id; % (( end id pu,lic static HolaApp.Hola read (org.omg.9*:;A.porta,le..nput6tream istream) { return narro! (istream.read=*,ject (=Hola6tu,.class)); % ((end read pu,lic static #oid !rite (org.omg.9*:;A.porta,le.*utput6tream ostream7 HolaApp.Hola #alue) { ostream.!rite=*,ject ((org.omg.9*:;A.*,ject) #alue); % ((end !rite pu,lic static HolaApp.Hola narro! (org.omg.9*:;A.*,ject o,j) { if (o,j >> null) return null; else if (o,j instanceof HolaApp.Hola) return (HolaApp.Hola)o,j; else if (Ao,j.=is=a (id ())) t-ro! ne! org.omg.9*:;A.;A/=BA:AC (); else { org.omg.9*:;A.porta,le./elegate delegate > ((org.omg.9*:;A.porta,le.*,ject.mpl)o,j). =get=delegate (); HolaApp.=Hola6tu, stu, > ne! HolaApp.=Hola6tu, (); stu,.=set=delegate(delegate); return stu,; % (( end else %(( end narro! %(( end class

+ola+ol%er,ja$a1 la clase contenedora &a clase Java )ola)older 6:igura %;.%%7, contiene una re.erencia al objeto que implementa la inter.a' )ola. &a clase proyecta los par"metros de tipo out o inout del !=& a la sinta-is de Java. @)9$+ En !=&, un par"metro se puede declarar como out si es un par"metro de salida y inout si el par"metro contiene un valor de entrada y almacena a la ve' un valor de salida. :!C5R$ %;.%%+ )olaApp#)ola)older.ja%a.
1 2 3 4 5 $ & 4 15 11 12 pac'age HolaApp; ()) ) HolaApp(HolaHolder.ja#a ) +enerated ," t-e ./01to12a#a compiler (porta,le)7 #ersion 33.13 ) from -ello.idl ) 6unda"7 /ecem,er 247 2552 34155 BC B6? )( pu,lic final class HolaHolder implements org.omg.9*:;A.porta,le. 6treama,le { pu,lic HolaApp.Hola #alue > null;

13 14 15 1 1$ 1& 14 25 21 22 23 24 25 2 2$ 2& 24 35 31 32 33 34 35 3 3$ 3&

pu,lic HolaHolder () { % pu,lic HolaHolder (HolaApp.Hola initialDalue) { #alue > initialDalue; % pu,lic #oid =read (org.omg.9*:;A.porta,le..nput6tream i) { #alue > HolaApp.HolaHelper.read (i); % pu,lic #oid =!rite (org.omg.9*:;A.porta,le.*utput6tream o) { HolaApp.HolaHelper.!rite (o7 #alue); % pu,lic org.omg.9*:;A.?"pe9ode =t"pe () { return HolaApp.HolaHelper.t"pe (); % %

-+ola#tub,ja$a1 el "ic/ero de res !ardo (stub) &a clase Java )ola,tub 6:igura %;.%<7, es el .ichero de resguardo o stub, el proxy de cliente, que interact>a con el objeto cliente. E-tiende org.omg.CORBA.portable.Object'mpl e implementa la inter.a' )ello.ja%a. :!C5R$ %;.%<+ )olaApp#6)ola,tub.ja%a.
1 2 3 4 5 $ & 4 15 11 12 13 14 15 1 1$ 1& 14 25 21 22 23 24 25 2 2$ 2& 24 35 31 32 pac'age HolaApp; ()) ) HolaApp(=Hola6tu,.ja#a ) +enerated ," t-e ./01to12a#a compiler (porta,le)7 ) #ersion 33.13 from Hola.idl )( pu,lic class =Hola6tu, e8tends org.omg.9*:;A.porta,le.*,ject.mpl implements HolaApp.Hola { pu,lic 6tring decirHola () { org.omg.9*:;A.porta,le..nput6tream Ein > null; tr" { org.omg.9*:;A.porta,le.*utput6tream Eout > =reFuest (3decirHola37 true); Ein > =in#o'e (Eout); 6tring Eresult > Ein.read=string (); return Eresult; % catc- (org.omg.9*:;A.porta,le.Application<8ception Ee8) { Ein > Ee8.get.nput6tream (); 6tring =id > Ee8.get.d (); t-ro! ne! org.omg.9*:;A.CA:6HA0 (=id); % catc- (org.omg.9*:;A.porta,le.:emars-al<8ception Erm) { return decirHola (); % finall" { =release:epl" (Ein); %

33 34 35 3 3$ 3& 34 45 41 42 43 44 45 4 4$ 4& 44 55 51 52 53 54 55 5 5$ 5& 54 5 1 2 3 4 5 $ & 4 $5 $1 $2 $3 $4 $5 $ $$ $& $4 &5 &1 &2 &3 &4 &5 &

% (( decirHola pu,lic #oid apagar () { org.omg.9*:;A.porta,le..nput6tream Ein > null; tr" { org.omg.9*:;A.porta,le.*utput6tream Eout > =reFuest (3apagar37 false); Ein > =in#o'e (Eout); % catc- (org.omg.9*:;A.porta,le.Application<8ception Ee8) { Ein > Ee8.get.nput6tream (); 6tring =id > Ee8.get.d (); t-ro! ne! org.omg.9*:;A.CA:6HA0 (=id); % catc- (org.omg.9*:;A.porta,le.:emars-al<8ception Erm) { apagar (); % finall" { =release:epl" (Ein); % % (( apagar (( ?"pe1specific 9*:;A*,ject operations pri#ate static 6tringGH ==ids > { 3./0HolaApp(Hola1.53%; pu,lic 6tringGH =ids () { return (6tringGH)==ids.clone (); % pri#ate #oid read*,ject (ja#a.io.*,ject.nput6tream s) t-ro!s ja#a.io..*<8ception { 6tring str > s.readI?J (); 6tringGH args > null; ja#a.util.Broperties props > null; org.omg.9*:;A.*,ject o,j > org.omg.9*:;A.*:;.init (args7 props). string=to=o,ject (str); org.omg.9*:;A.porta,le./elegate delegate > ((org.omg.9*:;A.porta,le.*,ject.mpl) o,j). =get=delegate (); =set=delegate (delegate); % pri#ate #oid !rite*,ject (ja#a.io.*,ject*utput6tream s) t-ro!s ja#a.io..*<8ception { 6tringGH args > null; ja#a.util.Broperties props > null; 6tring str > org.omg.9*:;A.*:;.init (args7 props).o,ject=to=string (t-is); s.!riteI?J (str); % % (( class =Hola6tu,

+ola!OA,ja$a1 el skeleton del servidor 2 el adaptador de objetos $OA &a clase Java )ola8OA 6:igura %;.%G7, es la combinacin del skeleton 6el proxy asociado al servidor7 y el adaptador de objetos 1)$ 68ortable Object Adapter7. E-tiende la clase org.omg.8osrtable,er%er.,er%ant, e implementa las inter.aces 'n%oke)andler y )olaOperations. :!C5R$ %;.%G+ )olaApp#)ola8OA.ja%a.
1 2 3 pac'age HolaApp;

4 5 $ & 4 15 11 12 13 14 15 1 1$ 1& 14 25 21 22 23 24 25 2 2$ 2& 24 35 31 32 33 34 35 3 3$ 3& 34 45 41 42 43 44 45 4 4$ 4& 44 55 51 52 53 54 55 5 5$ 5& 54 5 1 2 3 4 5 $ & 4 $5 $1

()) ) HolaApp(HolaB*A.ja#a ) +enerated ," t-e ./01to12a#a compiler (porta,le)7 ) #ersion 33.13 from Hola.idl )( pu,lic a,stract class HolaB*A e8tends org.omg.Borta,le6er#er.6er#ant implements HolaApp.Hola*perations7 org.omg.9*:;A.porta,le..n#o'eHandler { (( 9onstructors pri#ate static ja#a.util.Has-ta,le =met-ods > ne! ja#a.util.Has-ta,le (); static { =met-ods.put (3decirHola37 ne! ja#a.lang..nteger (5)); =met-ods.put (3apagar37 ne! ja#a.lang..nteger (1)); % pu,lic org.omg.9*:;A.porta,le.*utput6tream =in#o'e (6tring Emet-od7 org.omg.9*:;A.porta,le..nput6tream in7 org.omg.9*:;A.porta,le.:esponseHandler Er-) { org.omg.9*:;A.porta,le.*utput6tream out > null; ja#a.lang..nteger ==met-od > (ja#a.lang..nteger)=met-ods.get (Emet-od); if (==met-od >> null) t-ro! ne! org.omg.9*:;A.;A/=*B<:A?.*K (57 org.omg.9*:;A.9ompletion6tatus.9*CB0<?</=CAL;<); s!itc- (==met-od.intDalue ()) { case 5 (( HolaApp(Hola(decirHola { 6tring Eresult > null; Eresult > t-is.decirHola (); out > Er-.create:epl"(); out.!rite=string (Eresult); ,rea'; % case 1 (( HolaApp(Hola(apagarpac'age HolaApp; { t-is.apagar (); out > Er-.create:epl"(); ,rea'; % default t-ro! ne! org.omg.9*:;A.;A/=*B<:A?.*K (57org.omg.9*:;A.9ompletion6tatus.9*CB0<?</=CAL;<); % return out; % (( =in#o'e (( ?"pe1specific 9*:;A*,ject operations pri#ate static 6tringGH ==ids > { 3./0HolaApp(Hola1.53%; pu,lic 6tringGH =all=interfaces (org.omg.Borta,le6er#er.B*A poa7 ,"teGH o,ject.d) { return (6tringGH)==ids.clone (); %

$2 $3 $4 $5 $ $$ $& $4 &5 &1 &2 &3 &4 &5

pu,lic Hola =t-is() { return HolaHelper.narro!( super.=t-is=o,ject()); % pu,lic Hola =t-is(org.omg.9*:;A.*:; or,) { return HolaHelper.narro!( super.=t-is=o,ject(or,)); % % (( class HolaB*A

La aplicaci#n $parte del .ichero !=& 6)ola.idl7, los .icheros vistos hasta el momento, todos ellos se generan autom"ticamente cuando se compila el .ichero !=& con el compilador idlj y no se necesitan modi.icar. $ continuacin se va a ver los .icheros .uente de la aplicacin que s debe desarrollar el programador. Clases en el servidor En el lado del servidor, se necesitan dos clases+ el ser%ant y el servidor. El ser%ant, )ola'mpl, es la implementacin de la inter.a' !=& )ola4 cada objeto )ola es una instancia de esta clase. +l ser$ant 6@. del 9.+ sir%iente en ingl(s7, como se encuentra codi.icado en la :igura %;.%8, es una subclase de )ola8OA. El ser%ant contiene la de.inicin de cada m(todo declarado en la inter.a' !=&+ en este ejemplo, los m(todos decir)ola y apagar. )bs(rvese que la sinta-is para escribir estos m(todos es la misma que la de los m(todos habituales en Java+ la lgica para interactuar con el )R*, y para el empaquetamiento 6marshalling7 de datos se proporciona por medio del skeleton, cuyo cdigo se incluye en )ola8OA.ja%a 6:igura %;.%G7. :!C5R$ %;.%8+ )olaApp#)ola'mpl.ja%a.
1 2 3 4 5 (( (( (( (( <l ser#ant 1 la implementaciMn del o,jeto 1 para el ejemplo Hola. *,sNr#ese Fue se trata de una su,clase de HolaB*A7 cu"o cMdigo fuente se genera de la compilaciMn de Hola.idl usando el compilador idlj.

import HolaApp.); $ import org.omg.9osKaming.); & import org.omg.9osKaming.Kaming9onte8tBac'age.); 4 import org.omg.9*:;A.); 15 import org.omg.Borta,le6er#er.); 11 import org.omg.Borta,le6er#er.B*A; 12 13 import ja#a.util.Broperties; 14 15 class Hola.mpl e8tends HolaB*A { 1 pri#ate *:; or,; 1$ 1& pu,lic #oid set*:;(*:; or,=#al) { 14 or, > or,=#al; 25 % 21 22 (( implementaciMn del mNtodo decirHola() 23 pu,lic 6tring decirHola() { 24 return 3OnHola mundo AAOn3; 25 % 2

2$ 2& 24 35 31

(( implementaciMn del mNtodo apagar() pu,lic #oid apagar() { or,.apagar(false); % % ((fin clase

+l servidor. &a :igura %;.%I presenta el cdigo de ejemplo para un servidor de objeto. El proceso servidor es el responsable de crear e iniciali'ar el )R* 6en este caso, el )R* de Java !=&7, activar el gestor del adaptador de objetos 1)$ 68ortable Object Adapter ;anager7, crear una instancia de la implementacin del objeto 6un ser%ant7, y de registrar el objeto en el )R*. )bs(rvese que en la implementacin de Java, el 0ervicio de @ombrado se proporciona por el propio )R*. En el cdigo, el 0ervicio de @ombrado !nteroperable se utili'a para registrar el objeto con el nombre A)olaB 6lneas <IOG77. =espu(s de anunciar que el servidor de objetos est" listo, el servidor se queda a esperas de peticiones de los clientes redirigidas por el )R* 6lneas GFO8G7. :!C5R$ %;.%I+ )olaApp#,er%idor)ola.ja%a.
1 2 3 4 5 $ & 4 15 11 12 13 14 15 1 1$ 1& 14 25 21 22 23 24 25 2 2$ 2& 24 35 31 32 33 34 35 3 3$ 3& 34 45 41 42 43 44 45 (( In ser#idor para el o,jeto Hola pu,lic class 6er#idorHola { pu,lic static #oid main(6tring argsGH) { tr"{ (( crea e iniciali@a el *:; *:; or, > *:;.init(args7 null); (( o,tiene la referencia al rootB*A " acti#a al B*ACanager B*A rootpoa > (B*A)or,.resol#e=initial=references(3:ootB*A3); rootpoa.t-e=B*ACanager().acti#ate(); (( crea un ser#ant " lo registra en el *:; Hola.mpl -ola.mpl > ne! Hola.mpl(); -ola.mpl.set*:;(or,); (( o,tiene la referencia de o,jeto del ser#ant org.omg.9*:;A.*,ject ref > rootpoa.ser#ant=to=reference(-ola.mpl); (( " la con#ierte a una referencia 9*:;A Hola -ref > HolaHelper.narro!(ref); (( o,tiene el conte8to de nom,rado raP@ (( Kame6er#ice in#oca al ser#icio de nom,res temporal org.omg.9*:;A.*,ject o,j:ef > or,.resol#e=initial=references(3Kame6er#ice3); (( Isa Kaming9onte8t<8t7 Fue es parte de la especificaciMn (( 6er#icio de Kom,rado .nteropera,le (.K6). Kaming9onte8t<8t nc:ef > Kaming9onte8t<8tHelper.narro!(o,j:ef); (( enl@a la referencia del o,jeto con el nom,re 6tring name > 3Hola3; Kame9omponent pat-GH > nc:ef.to=name( name ); nc:ef.re,ind(pat-7 -ref); 6"stem.out.println (36er#idorHola listo " esperando ...3); (( espera las in#ocaciones de los clientes or,.run(); %

4 4$ 4& 44 55 51 52 53 54

catc- (<8ception e) { 6"stem.err.println(3<::*: 3 Q e); e.print6tac'?race(6"stem.out); % 6"stem.out.println(36er#idorHola 6aliendo ...3); % (( fin main % (( fin clase

La aplicaci#n cliente del objeto &a :igura %;.%J muestra un ejemplo de cliente para el objeto )ola. El ejemplo se encuentra escrito como una aplicacin Java, aunque el programa cliente tambi(n puede tratarse de un applet o un ser%let. El cdigo cliente se debe encargar de crear e iniciali'ar el )R* 6lnea %87, buscar el objeto usando el 0ervicio de @ombrado !nteroperable 6lneas %JO<<7, invocar el m(todo narro1 del objeto )elper para convertir la re.erencia del objeto a una re.erencia de una implementacin del objeto )ola 6lneas <8O<77, e invocar los m(todos remotos usando dicha re.erencia 6lneas<FOGG7. El m(todo decir)ola del objeto se invoca para recibir una cadena de caracteres como valor de retorno, y el m(todo apagar para desactivar el servicio. :!C5R$ %;.%J+ )olaApp#Cliente)ola.ja%a.
1 2 3 4 5 (( In ejemplo de aplicaciMn cliente del o,jeto import HolaApp.); import org.omg.9osKaming.); import org.omg.9osKaming.Kaming9onte8tBac'age.); import org.omg.9*:;A.);

$ pu,lic class 9lienteHola & { 4 static Hola -ola.mpl; 15 11 pu,lic static #oid main(6tring argsGH){ 12 tr"{ 13 (( crea e iniciali@a el *:; 14 *:; or, > *:;.init(args7 null); 15 1 (( o,tiene el conte8to de nom,rado raP@ 1$ org.omg.9*:;A.*,ject o,j:ef > 1& or,.resol#e=initial=references(3Kame6er#ice3); 14 (( Isa Kaming9onte8t<8t en lugar de Kaming9onte8t 25 (( parte del 6er#icio de Kom,rado .nteropera,le. 21 Kaming9onte8t<8t nc:ef > 22 Kaming9onte8t<8tHelper.narro!(o,j:ef); 23 24 (( resuel#e la :eferencia al o,jeto en el 6er#. de Kom,rado 25 6tring nom,re > 3Hola3; 2 -ola.mpl > 2$ HolaHelper.narro!(nc:ef.resol#e=str(nom,re)); 2& 24 6"stem.out.println 35 (3*,tenido un manejador para el o,jeto ser#idor 3 31 Q -ola.mpl); 32 6"stem.out.println(-ola.mpl.decirHola()); 33 -ola.mpl.apagar(); 34 35 % 3 catc- (<8ception e) { 3$ 6"stem.out.println(3<::*: 3 Q e) ; 3& e.print6tac'?race(6"stem.out); 34 %

45 41 42

% ((fin main % (( fin clase

En el resto del captulo se van a presentar los algoritmos para desarrollar aplicaciones usando Java !=&.

Compilaci!n # e"ecuci!n de una aplicaci!n Java IDL


1ara los ejercicios .inales del captulo, ser" necesaria la compilacin y ejecucin de aplicaciones Java !=&. $ continuacin se muestra una descripcin de dicho procedimiento. $arte servidora %. Colquese en el directorio que contiene el .ichero !=& )ola.idl. <. Ejecute el compilador !=&OaOJava, idlj, con el .ichero !=&. Este paso asume que usted ha incluido el directorio ja%a#bin en su path.
idlj fall Hola.idl

=ebe utili'arse la opcin 20all con el compilador idlj para generar todo el cdigo de soporte cliente y servidor. &os .icheros que se generan proporcionan las .uncionalidades est"ndares y no necesitan ser modi.icados. Con la opcin 20all los .icheros que el compilador genera con el .ichero )ola.idl son )ola8OA.ja%a 6)ola,tub.ja%a )ola.ja%a )ola)elper.ja%a )ola)older.ja%a )olaOperations.ja%a Estos .icheros se crean autom"ticamente en un subdirectorio, que en el caso de este ejemplo se denomina )olaApp. G. Compile los .icheros .ja%a del directorio )olaApp, incluyendo los stubs y los skeletons.
ja#ac ).ja#a HolaApp().ja#a

8. $rranque el =emonio del )R* Java, orbd, que incluye el servidor del 0ervicio de @ombrado. 1ara arrancar orbd en un sistema 5@!P, introdu'ca sobre la lnea de comando+
or,d *:;.nitialBort RnSmero de puertoTU

@)9$+ En sistemas 5ni-, un AdemonioB es una tarea que se ejecuta en background en respuesta a eventos. En un sistema Qindo?s, introdu'ca sobre la lnea de comando+
start or,d *:;.nitialBort RnSmero de puertoTU

@tese que RnSmero de puertoT es un puerto en el cual usted desea que el servidor de nombre se ejecute4 debe ser un n>mero de puerto por encima de %;<8, por ejemplo %<G8. I. $rranque el servidor )ola. 1ara arrancar el servidor )ola en un sistema 5@!P, introdu'ca 6en una sola lnea7 lo siguiente+
ja#a 6er#idorHola *:;.nitialBort 1234 *:;.nitialHost local-ost

En un sistema Qindo?s, introdu'ca 6en una sola lnea7 lo siguiente+


start ja#a 6er#idorHola *:;.nitialBort 1234 *:;.nitialHost local-ost

&a opcin <ORB'nitial)ost especi.ica el ordenador en el cual el 0ervidor de @ombrado est". &a opcin <ORB'nitial)ost indica el puerto en el cual el 0ervidor de @ombrado 6orbd7 se encuentra, tal y como se describi en el paso 8. $arte cliente %. )btenga y compile el .ichero )ola.idl de la m"quina servidora+
idlj fall Hola.idl

Copie el directorio que contiene )ola.idl 6incluyendo el subdirectorio generado por idlj7 a la m"quina cliente. <. En el directorio )olaApp de la m"quina cliente, cree el .ichero Cliente)ola.ja%a. Compile los .icheros .ja%a, incluyendo stubs y skeletons 6que est"n en el directorio )olaApp/+
ja#ac ).ja#a HolaApp().ja#a

G. En la m"quina cliente, ejecute la aplicacin cliente )ola de la siguiente .orma 6todo en una lnea7+
ja#a 9lienteHola *:;.nitialHost Rordenador del ser#idor de nom,radoT *:;.nitialBort Rpuerto del ser#idor de nom,radoT

El Rordenador del ser#idor de nom,radoT es la m"quina donde est" ejecutando 0ervidor de @ombrado. En este caso, puede ser el nombre de dominio o la direccin !1 de la m"quina servidora.

Callbac% de cliente
Recuerde que R ! proporciona la posibilidad de reali'ar callbacks hacia el cliente, que permite que un cliente se registre en un servidor de objetos de .orma que el servidor pueda iniciar una llamada al cliente, posteriormente, debido al suceso de alg>n evento. &a misma posibilidad e-iste en el caso de Java !=&. &a re.erencia 2java.sun.com/products, %N3 proporciona un ejemplo de cdigo de dicha aplicacin.

Com!arativa
5na cuestin clave en este libro es que en in.orm"tica distribuida 6y en in.orm"tica, en general7 hay tpicamente muchas .ormas de acometer la misma tarea. Este captulo presenta un ejemplo. Como se ha podido ver, y como e-perimentar" cuando aborde algunos de los ejercicios del .inal de este captulo, la misma aplicacin 6por ejemplo, un juego en red7 se puede implementar usando las herramientas o.recidas por Java R ! o por C)R*$, tales como Java !=&. 0e espera que en este punto, habiendo estudiado las dos herramientas, ser" capa' de hacer una comparativa inteligente de las dos y reali'ar las comparaciones, tal y como se solicita en algunos de los ejercicios.

Resumen
Este captulo le ha presentado la arquitectura C)R*$ 6Common Object Request Broker Architecture7 as como una herramienta espec.ica basada en esta arquitectura+ Java !=&. &os temas clave de C)R*$ que se han presentado son+ &a arquitectura b"sica de C)R*$ y su (n.asis en la interoperabilidad de objetos y la independencia de plata.orma. El )R* 6Object Request Broker7 y sus .uncionalidades. El protocolo !)1 6'nter2ORB 8rotocol7 y su signi.icado.

Re.erencia a objetos C)R*$ y el protocolo !)R 6'nteroperable Object Re0erence7. El 0ervicio de @ombrado de C)R*$ y el 0ervicio de @ombrado !nteroperable 6!@07. &os servicios de objetos C)R*$ est"ndar y cmo se proporcionan. $daptadores de objetos, 1)$ 68ortable Object Adapter7, y su signi.icado.

&os temas clave presentados junto a Java !=& son+ &os paquetes Java disponibles que contienen inter.aces y clases para dar soporte C)R*$. &as herramientas para desarrollar una aplicacin C)R*$, incluido idlj 6el compilador !=&7 y orbd 6el )R* y servidor de nombres7. 0e ha presentado una aplicacin de ejemplo llamada )ola para ilustrar la sinta-is b"sica de Java !=&. 0e han presentado los pasos para compilar y ejecutar una aplicacin. &as herramientas para C)R*$ y Java R ! son tecnologas compatibles y alternativas que proporcionan objetos distribuidos. 5na aplicacin se puede implementar usando cualquiera de las dos tecnologas, pero e-isten ventajas e inconvenientes en cada una de ellas.

&jercicios
%. En el conte-to de C)R*$, Rqu( signi.ican los siguientes acrnimosS 1ara cada acrnimo, indique el nombre completo y una breve descripcin+ C)R*$, )R*, C!)1 !!)1 !)R, !@0, 1)$. <. =escriba, por medio de un diagrama de bloques una descripcin que ilustre la arquitectura C)R*$. El diagrama debe incluir los siguientes componentes+ un objeto distribuido, un servidor de objetos, un cliente de objetos, el skeleton, el stub, el )R* y el adaptador de objetos. =escriba, por medio de otro diagrama de bloques que ilustre la arquitectura Java R !, incluyendo los componentes equivalentes+ un objeto distribuido, un servidor de objetos, un cliente de objetos, el skeleton y el stub. *as"ndose en sus diagramas, escriba un p"rra.o que describa las di.erencias principales entre las dos arquitecturas. 9rate de e-plicar dichas di.erencias. G. Comparada con Java R !, Rcu"les son los principales puntos .uertes de una herramienta C)R*$, si hay algunoS RCu"les son los puntos d(biles, si hay algunoS 8. 0iga el algoritmo presentado en el captulo para compilar y ejecutar el ejemplo )ola en una m"quina. Escriba un in.orme describiendo su e-periencia, incluyendo cualquier di.icultad que haya encontrado y cmo la ha resuelto. I. 0iga el algoritmo presentado en el captulo para compilar y ejecutar el ejemplo )ola en dos m"quinas. Escriba un in.orme describiendo su e-periencia, incluyendo cualquier di.icultad que haya encontrado y cmo la ha resuelto. 61uede encontrar la re.erencia 2java.sun.com/j<se/%.8, %G3 >til.7 J. 5se Java !=& para construir un servidor y un cliente que implemente el protocolo 9aytime. 7. 5sando Java !=&, escriba una aplicacin para un prototipo de un sistema de consultas de opinin. $s>mase que slo se va a encuestar un tema. &os

entrevistados pueden responder s=, no o ns#nc. Escriba una aplicacin servidora, que acepte los votos, guarde la cuenta 6en memoria7, y proporcione las cuentas actuales a aquellos que est(n interesados. a. Escriba el .ichero de inter.a' primero. =ebera proporcionar m(todos remotos para aceptar una respuesta a la encuesta, proporcionando los recuentos actuales 6ej. A%; s, < no, I ns/ncB7 slo cuando el cliente lo requiera. b. =ise,e e implemente un servidor que 6i7 e-porte los m(todos remotos, y 6ii7 mantenga in.ormacin de estado 6las cuentas7. c. =ise,e e implemente una aplicacin cliente que proporcione una inter.a' de usuario para aceptar una respuesta y/o una peticin, y para interactuar con el servidor apropiadamente a trav(s de la invocacin de m(todos remotos. d. 1ruebe la aplicacin ejecutando dos o m"s clientes en m"quinas di.erentes 6pre.eriblemente en plata.ormas di.erentes7. e. Entregue los listados de los .icheros, que deben incluir los .icheros .uente 6el .ichero de inter.a', los .icheros del servidor y los .icheros del cliente7, y un .ichero &EE E que e-plique los contenidos y las interrelaciones de los .icheros .uente, as como el procedimiento para ejecutar el trabajo. N. Cree una aplicacin Java !=& para gestionar unas elecciones. El servidor e-porta dos m(todos+ emitir>oto, que acepta como par"metro una cadena de caracteres que contiene un nombre de candidato 6Core o *ush7, y no devuelve nada, y obtenerResultado, que devuelve, en un vector de enteros, el recuento actual para cada candidato. 1ruebe la aplicacin ejecutando todos los procesos en una m"quina. $ continuacin pruebe la aplicacin ejecutando el proceso cliente y servidor en m"quinas separadas. Entregue el cdigo .uente de la inter.a' remota, el servidor y el cliente. F. Construya un juego distribuido para dos jugadores de Alas tres en rayaB usando 6a7 Java R ! con callbacks de cliente y 6b7 Java !=& con callbacks de cliente. =ise,e sus aplicaciones de .orma que el cliente sea lo m"s ligero posible4 esto es, que los clientes deben almacenar el menor estado y tengan el menor cdigo posible. El servidor mantendr" el estado del juego y sincroni'ar" los turnos de los jugadores. Entregue 6a7 documentos de dise,o, incluyendo un diagrama de clases 5 &, 6b7 listado de las .uentes, y 6c7 un in.orme comparando ventajas e inconvenientes entre las dos tecnologas, en t(rminos de .acilidad de implementacin, independencia de lenguaje, independencia de plata.orma, y sobrecarga en la ejecucin.

Referencias
1. Welcome To The OMGs CORBA Website, http://www.corba.org/ 2. CORBA FAQ, http://www.omg.org/gettingstarted/corba a!.htm 3. CORBA for Begi er!, http://cgi.omg.org/corba/beginners.html 4. "o #iege$. CORBA 3 F% da&e 'a$! a d (rogra&&i g. )e* +or,, )+: "o- .i$e/, 2000. 5. O01 )a&i g #er2ice !3ecifica'io , http://www.omg.org/technolog"/doc#ments/ ormal/naming$ser%ice.htm 6. CORBA )a&i g #er2ice 42a$%a'io , #ea 5a di! a d .i$$ia& #-a3iro, http://www.cs.#md.ed#/&billshap/papers/naming.doc , 1999. 7. CORBA a d "a2a6 'ec- o$ogie!, http://'a%a.s#n.com/'(ee/corba/

8. Irfa (/ara$i a d 7. C. #c-&id'. 8A O2er2ie* of '-e CORBA (or'a9$e O9:ec' Ada3'er.; AC0 #'a dard<ie* 6, =0arc- 1998>. http://citeseer.n'.nec.com/p"arali)*o%er%iew.html 9. "a2a?0 R0I@IIO( 7oc%&e 'a'io , http://'a%a.s#n.com/'(se/+.,/docs/g#ide/rmi-iiop/inde..html 10. Ce'%! 5i ,!: 18,452 5i ,! o O9:ec'! a d Co&3o e '!ACORBA, http://www.cet#slin/s.org/oo$corba.html 11. ?-e "a2a ?%'oria$ ?rai$: I75, http://'a%a.s#n.com/docs/boo/s/t#torial/idl/inde..html 12. "a2a6 I75, http://'a%a.s#n.com/prod#cts/'d//idl/ 13. "a2a I75: ?-e 8Be$$o .or$d; 4Ca&3$e o ?*o 0ac-i e!, http://'a%a.s#n.com/'(se/+.0/docs/g#ide/idl/t#torial/'idl(machines.html 14. "a2a I75 #a&3$e code, http://'a%a.s#n.com/'(se/+.0/docs/g#ide/idl/'idl1ampleCode.html 15. "a2a I75: )a&i g #er2ice, http://'a%a.s#n.com/prod#cts/'d//+.(/docs/g#ide/idl/'idl2aming.html 16. )a&i g #er2ice, #% 0icro#/!'e&!, http://'a%a.s#n.com/'(se/+.0/docs/g#ide/idl/'idl2aming.html 17. "a2a I75 ?ec- o$og/ 7oc%&e 'a'io , http://'a%a.s#n.com/'(se/+.0/docs/g#ide/idl/inde..html 18. "a2a I75: 4Ca&3$e 3, Be$$o .or$d *i'- Ca$$9ac, O9:ec', http://'a%a.s#n.com/prod#cts/'d//+.0/docs/g#ide/idl/'idl3.ample,.html 19. CORBA (rod%c' (rofi$e!, http://www.p#der.org/corba/matri./ 20. "a2a 2 ($a'for&, #'a dard 4di'io ="2#4>, http://'a%a.s#n.com/'(se/+.0/

=E0C$RC =& !@9ER@E9 http+//?ebcache.googleusercontent.com/searchS qTcache+-=;gbtd<h%8J+laurel.datsi..i.upm.es/Ussoo/&!*R)/Cap%;/cap%;O corregido.docDVcdTIVhlTesVctTclnEVglTm-

http+//???.cs.cinvestav.m-/9esisCraduados/<;;N/tesisJairEstrada.pd.

http+//e-a.unne.edu.ar/depar/areas/in.ormatica/0istemas)perativos/C)R*$.1=: E09 5&9! ) &!@W 0 C5$R= C) ) C)R*

http+//es.scribd.com/doc/F8FGNN;7/$RX5!9EC95R$OC)R*$

You might also like