Common Object Request Broker Architecture (CORBA) es un estándar definido por Object Management Group (OMG) que permite que diversos componentes de software escritos en múltiples lenguajes de programación y que corren en diferentes computadoras, puedan trabajar juntos. Facilita el desarrollo de aplicaciones distribuidas en entornos heterogéneos.
CORBA fue el primer producto propuesto por OMG. Su objetivo es ayudar a reducir la complejidad, disminuir los costes y acelerar la introducción de nuevas aplicaciones informáticas, promoviendo la teoría y la práctica de la tecnología de objetos en los sistemas distribuidos.
Es una tecnología que oculta la programación a bajo nivel de aplicaciones distribuidas. No obstante también brinda al programador una tecnología orientada a objetos; las funciones objetos y estos objetos pueden estar en diferentes máquinas, pero el programador accederá a ellos a través de funciones normales dentro de su programa.
CORBA es más que una especificación multiplataforma, también define servicios habitualmente necesarios como seguridad y transacciones. Es un middleware.
Entre las principales características de CORBA podemos destacar:
- Independencia en el lenguaje de programación y sistema operativo: CORBA fue diseñado para liberar a los ingenieros de las limitaciones en cuanto al diseño del software. Actualmente admite Ada, C, C++, C++11, Lisp, Ruby, Smalltalk, Java, COBOL, PL/I y Python.
- Posibilidad de interacción entre diferentes tecnologías: uno de los principales beneficios de la utilización de CORBA es la posibilidad de normalizar las interfaces entre las diversas tecnologías y poder así combinarlas.
- Transparencia de distribución: ni cliente ni servidor necesitan saber si la aplicación está distribuida o centralizada, pues el sistema se ocupa de todo eso.
- Transparencia de localización: el cliente no necesita saber donde ejecuta el servicio y el servicio no necesita saber donde ejecuta el cliente.
- Integración de software existente: se amortiza la inversión previa reutilizando el software con el que se trabaja, incluso con sistemas heredados.
- Activación de objetos: los objetos remotos no tienen por qué estar en memoria permanentemente, y se hace de manera invisible para el cliente.
- Otras como: el tipado fuerte de datos, la alta capacidad de configuración, libertad de elección de los detalles de transferencia de datos, o la compresión de los datos.
Todos los componentes CORBA son objetos, cada cual tendrá una interfaz y una identidad única, cada uno de los objetos se podrá implementar en un lenguaje de programación distinto y ejecutarse sobre cualquier sistema operativo.
El servidor crea objetos remotos, hace accesibles referencias a esos objetos remotos y espera a que los clientes invoquen a estos objetos o a sus métodos. Por otro lado, el cliente obtiene una referencia de uno o más objetos remotos en el servidor e invoca a sus métodos.
La manera de realizar la invocación por parte del cliente es usando stub, una interfaz de comunicación con el servidor generada a partir del IDL, usando la invocación dinámica para acceder a los objetos del servidor gestionando a su vez las excepciones producidas por su llamada.
Necesita para ello una referencia del objeto remoto o IOR (Interoperable Object References), el tipo del objeto y el nombre de la propia operación que desea invocar. Describiendo las interfaces IDL. Un ORB genera automáticamente código en el lenguaje seleccionado para realizar la integración de las aplicaciones distribuidas. Evidentemente, puesto que sólo describe interfaces, todas las tareas complejas relacionadas con los lenguajes de programación, como control de flujo, gestión de memoria, composición funcional, no aparecen en IDL.
El ORB, a partir de la petición del cliente, encuentra el código de la implementación apropiada y transmite los parámetros, el control a la implementación de la interfaz a través del skeleton IDL e informa de excepciones en el proceso (como referencias IOR o IDL no válidas).
Para recibir la petición, recibe la invocación de uno de sus métodos como llamadas desde el ORB hacia la implementación de la interfaz, la llamada puede venir de un cliente que haya utilizado los stub IDL; los esqueletos de la interfaz son específicos de cada interfaz y del adaptador de objetos que exista en la implementación de CORBA. Una vez completada la invocación el control y los valores de retorno son devueltos al cliente.
Puede utilizar los servicios que proporciona el adaptador de objetos e incluso que proporciona el ORB, mientras es procesada la petición que ha recibido el cliente, para ese caso puede elegir un adaptador de objetos entre un conjunto de ellos, para tomar esa decisión se basa en la clase de servicios que pueda requerir la implementación de la interfaz.