|
Curso práctico de Corba en GNU/Linux |
¿Qué es CORBA?
Esta es la primera pregunta que debemos contestar al lector. Y lo hacemos por un lado dando la definición de la arquitectura y por otro, mediante un ejemplo que busca aclarar los conceptos introducidos.
Definición
CORBA define la infraestructura para la arquitectura OMA (Object Management Arquitecture) de OMG, especificando los estándares necesarios para la invocación de métodos sobre objetos en entornos heterogéneos.
Los entornos heterogéneos son aquellos en los que las arquitecturas que constituyen el entorno pueden ser sistemas Microsoft Windows, máquinas Unix de diferentes fabricantes (Linux entre otros) e inclusos sistemas como MacOS o OS/2. Y es más, dentro de la heterogeneidad también se incluyen los sistemas de comunicaciones (protocolos de comunicación como TCP/IP, IPX ...) o los lenguajes de programación utilizados en las diferentes arquitecturas. Es el mundo informático en su complejidad más alta y por tanto sólo una arquitectura muy flexible y potente puede cubrir todos estos aspectos.
CORBA define su propio modelo de objetos, basado en la definición de las interfaces de los objetos mediante el lenguaje IDL.
De esta forma se logra una abstracción a la heterogeneidad que permite que el uso de CORBA no sea nada complejo. Como veremos, la forma de desarrollar con CORBA sigue una metodología concreta y fácil de seguir.
CORBA ha buscando un entorno heterogéneo, el cual constituye una visión abierta del mundo de la informática y en la cual hay cabida para diferentes sistemas y distintas filosofías, un mundo más rico que el que se puede lograr con un solo sistema alrededor del cual funcionan todas las aplicaciones.

CORBA ha logrado parte de su éxito a la clara separación entre la interfaz de los objetos y la implementación de los mismos. Las interfaces se definen utilizando el lenguaje IDL, cuya principal característica es su alto nivel de abstracción, lo que le separa de cualquier entorno de desarrollo específico. Para la implementación de los objetos se puede utilizar cualquier lenguaje de programación que proporcione enlaces con el lenguaje IDL. Para que un lenguaje de programación se pueda utilizar desde CORBA, debe tener definida la forma de enlazarse con IDL.
De esta forma, y a partir de una especificación de las interfaces en IDL, se generan unos cabos (proxies) en el lenguaje elegido que permiten el acceso a la implementación de los objetos desde la arquitectura CORBA.
La implementación de CORBA es que la que esconde al usuario de la arquitectura toda la complejidad que pueda existir en un entorno concreto (como por ejemplo su sistema AIX de IBM), y permite al programador desarrollar siguiendo la metodología genérica aprendida.
CORBA es un estándar creado con la idea de una distribución de los sistemas basada en objetos. Con CORBA se pretende definir una arquitectura que especifique cómo se crean los objetos y como se accede a sus funcionalidades. El mundo de los objetos se recrea en su máxima expresión y mostrando toda la potencia de esta metodología de desarrollo, hasta hace pocos años demasiado costosa para los equipos disponibles.
Ejemplo de uso
Para comenzar a explicar esta arquitectura vamos a utilizar un ejemplo, ya que así podremos obtener una idea del funcionamiento global del sistema y de la metodología a seguir.
Para esta primera parte de explicación de CORBA, vamos a desarrollar un ejemplo de una sencilla interfaz IDL que describe la funcionalidad que proporciona un determinado objeto.
El ejemplo que utilizaremos será una implementación del protocolo de eco entre un cliente y un servidor, es decir, el servidor deberá responder al cliente todo lo que este le mande.
En este ejemplo se omitirán detalles que las entregas 3 y 4 del curso serán detallados en profundidad. La interfaz IDL de nuestro ejemplo sería:
module CursoCORBA {
interface echo {
// El cliente envía un mensaje al servidor y este se lo devuelve
string repite (in string mensaje);
};
};
La sintaxis del lenguaje IDL es similar a la de C++, así que el lector que conozca dicho lenguaje podrá entender sin problemas este código.
A partir de esta interfaz de generan de forma automática y para un lenguaje concreto el código que "enchufa" a este objeto con CORBA. Una vez enchufado el objeto a CORBA, el uso dentro del código de los clientes es tan sencillo como invocar una operación sobre un objeto.
Nuestra labor como desarrollador consiste en implementar del lado del servidor esta interfaz, mientras que del lado del cliente lo único que hay que hacer es utilizar los cabos (enchufes) generados para acceder a CORBA.
De momentos no vamos a bajar a más detalles ya que aquí solo buscamos descubrir CORBA.
¿Para qué CORBA?
El uso de una nueva tecnología siempre implica unos esfuerzos de formación de los desarrolladores, nuevas herramientas, nuevos problemas y nuevas soluciones...
La adopción de una nueva tecnología debe ser llevada a cabo tras un análisis de los costes y la ventajas que se obtienen ya que en el fondo, es una inversión que debe amortizarse en el futuro.
Vamos a intentar dar al lector los motivos por los que creemos que debe utilizarse CORBA.
Con el triunfo de las redes de ordenadores y su implantación, las aplicaciones distribuidas son las únicas que pueden explotar toda la potencia de este nuevo modelo informático.
Las aplicaciones distribuidas, aquellas que se caracterizan por su ejecución coordinada en diferentes máquinas comunicadas, se caracterizan por una alta complejidad en todas las etapas de su desarrollo, debido a la gran cantidad de factores que influyen en su ejecución, siendo uno de los principales la gestión de las comunicaciones.
Por ejemplo, hay que tener en cuenta que los enlaces entre las máquinas se pueden caer, y prever qué hacer en esos casos, y como se detectan dichas caídas. Otro ejemplo sería que contra una máquina A se pueden conectar varias, y debe ser capaz esta máquina A de manejar todas las conexiones. Y las máquinas se tienen que poder encontrar y tienen que poder localizar servicios remotos. Podemos citar también que los entornos en red suelen ser heterogéneos, hay que comunicar diferentes máquinas con distintas configuraciones software y hardware.
CORBA abstrae muchos de estos detalles y hace la distribución de la aplicación un proceso mucho menos complejo y costoso.
Se encarga de organizar los servicios que se pueden encontrar en la red a través de los interfaces IDL. Es independiente de la plataforma y del lenguaje de desarrollo lo que facilita el desarrollo en entornos heterogéneos. Gestiona las comunicaciones, informando a clientes y servidores de caídas de los canales de comunicación.
Facilita la integración de software heredado. Tan sólo hay que definir las interfaces IDL de este software para ponerlo disponible en CORBA.
Proporciona servicios adicionales para, por ejemplo, encontrar objetos y servicios dentro de entornos distribuidos, llegando incluso a definir entornos de trabajo CORBA para diferentes disciplinas: telecomunicación, medicina,...
Dentro del libro publicado por OMG, "CORBA Fundamentals and Programming", de Jon Siegel se citan otra serie de ventajas:
- Los desarrolladores pueden utilizar para sus aplicaciones todo el hardware y software que ya existieran, gracias a la universalidad de CORBA y a su facilidad para integrar desarrollos heredados. La metodología orientada a objetos es una de las más adecuadas para lograr un proceso de producción software en plazos, robusto y que cumpla con lo que se espera. Y además, este tipo de desarrollo facilita la reutilización de los componentes ya desarrollados, mejorando la productividad.
- Para los usuarios finales y las compañías. CORBA es una excelente inversión, ya que gracias a su estandarización, se pueden obtener componentes CORBA de diferentes vendedores y lograr que todos trabajen entre sí.
En definitiva, CORBA presenta unas ventajas enormes en el desarrollo de software distribuido y es una herramienta sin la cual sería muy complicado llevar a cabo un proyecto en unos plazos adecuados y con unos resultados robustos.
¿Cómo se desarrolla con CORBA?
El desarrollo con CORBA tiene una serie de pasos adicionales a los desarrollos software clásicos, y una serie de factores a tener en cuenta a la hora de desarrollar la aplicación. En la fase de análisis poco cambia respecto a la metodología que se utiliza en los proyectos software clásicos.
En la fase de diseño sí que se pueden optar por unas soluciones basadas en CORBA, ya que CORBA ofrece unas tecnologías que pueden hacer factibles soluciones que de otra forma serían muy complejas de desarrollar.
En la fase de diseño deberán generarse las interfaces IDL de los diferentes módulos del sistema, algo que facilita mucho la transmisión de los resultados del diseño a los desarrolladores.
Ya en la fase de desarrollo, cada equipo de desarrollo de un módulo recibirá la interfaz IDL para que la implemente en el lenguaje que considere más adecuado, recibiendo también las interfaces IDL de los servicios que vaya a utilizar su módulo. De nuevo, el uso de estos servicios se puede hacer en el lenguaje que seleccionen los desarrolladores, siendo para ellos transparente en qué tipo de hardware y en qué lenguaje se desarrolló la implementación de dichos servicios.
Queda claro que la modularidad que proporciona CORBA facilita mucho los desarrollos paralelos y modulares, algo que en la fase de pruebas también se agradecerá mucho, ya que será más sencillo detectar los fallos y dar respuesta a ellos.
Quizás cabe aquí resaltar la escalabilidad de esta forma de desarrollo. El insertar un nuevo servicio dentro del sistema es un proceso poco traumático. Habría que definir su IDL y ponerla disponible para aquellos servicios que ya existen que la quisieran utilizar.
Los proyectos heredados también se pueden integrar en los nuevos sistemas definiendo los interfaces IDL que ofrecen, y afectando de forma mínima a la nueva arquitectura CORBA que se desarrolla. Todo el software que ya existe por lo tanto es perfectamente utilizable, y su posible sustitución se puede realizar de forma progresiva y bajo demanda.
De la interfaz IDL a la implementación
El proceso a seguir para implementar una interfaz IDL y poner disponible está funcionalidad en CORBA es el siguiente:
- Se diseña el servicio y se crea la interfaz IDL
- Se elige la plataforma y el lenguaje de implementación y se busca la herramienta CORBA para esa plataforma y ese lenguaje.
- La herramienta CORBA debe tener un compilador IDL que, a partir de la interfaz IDL, generará los cabos que permiten enganchar la implementación de la interfaz con la arquitectura CORBA.
- Implementamos la interfaz IDL en el lenguaje elegido.
- Creamos un servidor CORBA que se encargue de registrar la nueva funcionalidad en CORBA, utilizando la implementación realizada por nosotros y los cabos generados a partir de la interfaz IDL.
- Los nuevos servicios ya están disponibles en CORBA a la espera de la llegada de clientes que los quieran utilizar.
Esta es la metodología a aplicar siempre, independientemente del entorno en el que nos movamos. Tanto si es Linux, como Microsoft Windows o Solaris de Sun, los desarrolladores deben de seguir este proceso.
















































