Corba 1 Corba Corba (Common Object Request Broker Architecture) es un conjunto de trabajo distribuido (distributed framework*) creado para ofrecer soporte a la comunicación de arquitecturas heterogéneas en hw/sw. Mientras que RMI (Java) ofrece soporte a arquitecturas homogéneas, siempre y cuando Java ocupe ambos extremos y exista un cableado en el medio, CORBA permite la conexión de sistemas de sistemas con hardware, software y aplicaciones de distintos fabricantes. Java IDL ofrece una implementación de la especificación 2.0 de CORBA. CORBA es el resultado del trabajo de un grupo de ingenieros de Object Management Group (OMG). Como resultado de dicho trabajo se ha creado una especificación que cubre los elementos necesarios para permitir la comunicación entre un sistema hw/sw y otro. Actualmente, OMG es un consorcio que incluye aproximadamente 700 empresas. Toda la información referente a CORBA puede encontrarse en http://www.omg.org * "framework" hace referencia a un conjunto de códigos reutilizables prácticamente "listos para usar" que pueden aplicarse para solucionar problemas con alguna personalización (customing). 2 Qué es • CORBA no es un producto. • El estándar denominado CORBA define el modo en que las empresas pueden implantar el estándar. • Una típica implantación de CORBA incluye: • 1. Una aplicación ORB (Object Request Broker) • 2. Un compilador IDL (Interface Definition Language) • 3. Una o mas aplicaciones de COS (Common Object Services) • (conocidas también como CORBAServices) • 4. Aplicaciones comunes, conocidas como CORBAFacilities • En CORBA 2.0 se introdujo el protocolo IIOP Internet Inter-ORB Protocol, un estándar que especifica cómo los ORB se comunican a través de la red. 3 ORB • • • • • • • Object Request Broker Es el mecanismo que permite la conexión de objetos entre espacios de direcciones remotos. Cuando dos sistemas CORBA quieren comunicarse entre sí en un espacio de dirección remoto, el ORB asegura su realización, independientemente del hardware, del sistema operativo y del lenguaje de las aplicaciones implicadas. ORB asegura la correcta invocación al objeto remoto. Es responsabilidad del objeto ORB: a) establecer la comunicación con el sistema remoto. b) empaquetar/transformar los parámetros para la llamada remota (marshaling). c) gestionar las peticiones simultaneas procedentes de múltiples clientes. 4 Marshaling • • Marshaling es la técnica utilizada para empaquetar los parámetros, los valores de retorno y las excepciones para su envío a los sistemas. Básicamente se trata de convertir los datos en un formato de plataforma independiente para finalmente convertirlos en el tipo especifico de la plataforma de destino. 5 COS Common Object Services Son servicios de CORBA para asistir a ORB. 1. Naming Service. El Servicio de Nombres permite a clientes y servidores encontrar objetos en la red. Un servidor registra un objeto con un Service Naming utilizando una representación jerárquica. Los clientes pueden utilizar el Service Naming para encontrar objetos. 2. Event Service. Este servicio permite a clientes y servidores enviar mensajes a uno o mas recibidores. Los objetos puede registrarse a la escucha (listen) de un determinado canal de evento. El Servicio de Eventos almacena los eventos antes de transmitirlos, por lo que no es necesario que clientes y servidores estén conectados. 3. Security Service. Este servicio se encarga de autentificar los mensajes, autorizar el acceso a objetos y garantizar la comunicación. 6 COS 4. Transaction Service. Este servicio permite la gestión de las transacciones hacia un database. Otros servicios menores son: - Persistent Object Service. - Concurrency Control Service. - Lyfe Cycle Service. - Relationship Service. - Externalization Service. - Query Service. - Licensing Service. - Property Service. - Time Service. - Object Trader Service. - Object Collections Service. 7 IDL • Interface Definition Language • La definición de las interfaces se crean utilizando el lenguaje IDL. • IDL es similar a C, C++ o Java si bien no puede compilarse directamente en un programa en binario. IDL se entiende como un lenguaje intermediario que define las interfaces que un cliente tiene que utilizar y el servidor implementar. • También puede decirse que con IDL se genera un vínculo entre el sistema que utiliza un objeto y el sistema que lo implementa. • Una vez desarrolladas las interfaces, éstas se compilan utilizando una herramientas que es especifica para cada lenguaje (C, C++, Java, SmallTalk, Ada). • En Java se utiliza idlj.exe que es un programa que viene con el J2SDK1.4. 8 IDL - Un fichero IDL está formado por varios elementos que juntos crean un espacio de nombres. - Los identificadores no son sensibles al tamaño de las letras. - Los identificadores pueden utilizarse sólo una vez en el mismo espacio de nombres. - IDL no soporta la sobrecarga y/o la sobre escritura de las operaciones. - IDL soporta herencia simple y múltiple. 9 Módulo IDL Módulo IDL El módulo es un contenedor de un grupo de interfaces IDL (un paquete en Java). Un módulo puede contener en su interior una o varias interfaces, además de otros módulos. Ejemplo: module calculator{ interface Functions{ float square_root(in float number); float power (in float base, in float exponent); }; }; 10 IDL 11 IDL Ficheros generados Utilizando el comando idlj -fall Xxx.idl se generarán los ficheros fuente en Java para sus asociaciones del lado servidor y del lado cliente: idlj generará 6 ficheros: 1. Xxx.java - interfaz sin operaciones. 2. XxxOperations.java - las operaciones declaradas en el fichero IDL. 3. XxxHelper.java - funcionalidades auxiliares para CORBA. 4. XxxHolder.java - sirve para gestionar los parámetros in o inout. 5. _XxxStub.java - es el fichero stub para el lado cliente. 6. XxxPOA.java - es el fichero skeleton para el lado servidor; extiende XxxOperations 12 Implementaciones lado cliente – lado servidor Obviamente falta la implementación lado servidor y la aplicación lado cliente. XxxImpl.java - el servant (objeto que hay que servir) - tiene que extender de XxxPOA. XxxServer.java - el servidor (crea el objeto servant y la da de alta en el servidor de nombres). XxxClient.java - la aplicación lado cliente. 13 IDL Ficheros generados en el ejemplo Calculadora Lado servidor Functions.java FunctionsOperations.java FunctionsPOA.java Lado Cliente _FunctionsStub.java Functions.java FunctionsHelper.java FunctionsHolder.java FunctionsOperations.java 14 IDL Las interfaces de IDL pueden tener atributos, excepciones y operaciones. Un atributo define un tipo de variable CORBA al que se puede acceder desde métodos predefinidos. Los tipos CORBA pueden ser de tipo IDL u otra interfaz IDL. Un atributo generará métodos de obtención e impostación (getter/setter). Ejemplo: attribute float price; se convierte en los siguientes métodos Java: float price(); void price(float arg); Los atributos pueden ser “read only” y en este caso se generará sólo el método de obtención de la variable. Comprobar que el compilador IDL no declara ninguna variable price sino sólo los métodos de acceso a dicha variable. 15 IDL Las operaciones se convierten en métodos Java. Cada operación tiene que declarar un tipo de retorno y cero o más argumentos. Los argumentos pueden ser de tipo in, out o inout. Un parámetro in se refiere a un atributo de tipo paso por valor. Un parámetro out se refiere a un atributo de tipo paso por referencia. Un parámetro inout se refiere a un atributo de tipo paso por valor/retorno de paso por referencia. Excepciones: Las operaciones pueden lanzar excepciones. Ejemplo: interface ordenes{ void ordenar(in Orden o, out res) raises (ProductoException); }; 16 IIOP • Internet Inter-ORB Protocol es una implementación TCP/IP de GIOP (General Inter-ORBProtocol). GIOP especifica cómo comunican los ORBS, envían los mensajes, especifica cómo se ordenan los byte para los integer y los float y el marshalling de los parámetros y los valores de retorno. • Gracias a GIOP se puede desarrollar un servidor con un ORB y un IDL de un vendedor distinto al del cliente y realizar un juego de servicios intermediarios utilizando ORB y IDL de un tercero vendedor; distintos OS, distinto HW y SW... • Todo esto será posible si el vendedor declara que cumple con CORBA 2.0. 17 Ejemplo Calculadora En este ejemplo se desarrollará una calculadora utilizando un sistema cliente/servidor CORBA. Partiendo del fichero “calculadora.zip” habrá que extraer los ficheros y ponerlos en un directorio del disco duro como c:\corba. Winzip creará varios directorios: calculadora - server - cliente. En el directorio raíz de la aplicación habrá varios ficheros cmd numerados. Habrá que ejecutarlos siguiendo la numeración. Se necesita el j2sdk1.4 y las siguientes variables de entorno configuradas del siguiente modo: JAVA_HOME=c:\j2sdk1.4.0 path= %JAVA_HOME%\bin;%path%s classpath= .;%classpath% -fin18