GNOME-DB

Rodrigo Moya^{∗} rodrigo@linuxave.net

11 de noviembre de 2000

Esta ponencia forma parte del III Congreso Hispalinux^{1} virtual, celebrado en Noviembre de 2000. Puedes participar en él en la sección de eventos de BarraPunto^{2}

Resumen

Esta ponencia va a tratar de introducir el proyecto GNOME-DB, cuyo objetivo principal es el servir como arquitectura universal de acceso a bases de datos, de forma que los programas de software libre puedan fácilmente incluir acceso a multitud de bases de datos diferentes sin necesidad de conocer cuál de ellas se está usando, ni de utilizar un protocolo propietario.

1 Introducción

El proyecto GNOME-DB nace de la mano de Michael Lausch, con la idea de solventar los problemas que se le habían presentado al usar otras arquitecturas de acceso a bases de datos, como por ejemplo ODBC o DAO.

Uno de los principales problemas que presenta ODBC, es que no especifica el protocolo de comunicaciones entre el gestor de conexiones y los distintos ’drivers’ de cada una de las bases de datos. Esto provoca una confusión bastante grande y no permite el desarrollo en paralelo y optimizado de los distintos componentes de la arquitectura. Obliga a que cada implementación para cada base de datos soportada tenga que definir su propio protocolo de comunicaciones con el servidor de base de datos en cuestión, lo que lo hace bastante tedioso.

Así, GNOME-DB, mediante el uso de CORBA como protocolo de comunicaciones para la interacción entre los clientes y las distintas bases de datos, intenta solventar este y otros muchos problemas, a la vez que intenta extender el concepto de ^{\underline{a}}rquitectura para acceso a bases de datos" hasta todos los límites imaginables. De esta forma, no sólo permite a los usuarios acceder a distintas bases de datos desde una sola aplicación/interfaz, sino que además incluye una buena cantidad de librerías para que los desarrolladores puedan implementar sus propias soluciones basadas en él, consiguiendo así una transparencia total en cuanto al acceso a datos se refiere. Además, el uso de CORBA en GNOME-DB permite el desarrollo de aplicaciones distribuidas, algo muy útil en desarrollos con una alta demanda de recursos, algo que sí es posible con ODBC o DAO pero mediante el uso de soluciones propietarias.

Así mismo, el API de programación de ODBC no es ni intuitivo ni fácil de usar, lo que aleja a muchos desarrolladores de sus ventajas. En cambio, las librerías suministradas por GNOME-DB son altamente intuitivas y muy sencillas de usar. De hecho, la facilidad de uso de dichas librerías ha sido uno de los puntos que más se han tenido en cuenta a la hora de su desarrollo.

Otro de los problemas más importantes a resolver para ofrecer un acceso universal a bases de datos es el lenguaje de interacción con el servidor de bases de datos. Este lenguaje normalmente es SQL, que si bien está mundialmente aceptado como el estándar para estos menesteres, no se encuentra lo suficientemente estandarizado como para que pueda ser usado sin cambios con distintos servidores, principalmente debido a las extensiones que cada fabricante añade al estándar SQL.

GNOME-DB intenta resolver este problema mediante el uso de peticiones en un formato especial (XML) que permite el envío de comandos a distintos servidores sin necesidad de usar SQL. Por supuesto, este uso es opcional y sólo está incluido como característica extra. El desarrollador/usuario siempre puede usar SQL si le resulta más cómodo o sencillo para su tarea. Pero el uso de dichas peticiones SQL ha permitido, por ejemplo, a los desarrolladores de GNOME-DB, incluir utilidades de importación/exportación que permiten el intercambio de datos entre distintas fuentes de datos totalmente ajenas las unas de las otras.

∗ \begin{matrix}c \\ ◯ \end{matrix}Rodrigo Moya. Se otorga permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia de Documentación Libre GNU, Versión 1.1 o cualquier otra versión posterior publicada por la Free Software Foundation. Se considerará como Secciones Invariantes todo el documento, no habiendo Textos de Portada ni Textos de Contra Portada. Puede consultar una copia de la licencia en: http://www.gnu.org/copyleft/fdl.html

1http://congreso.hispalinux.es

2http://barrapunto.com/eventos

Otro de los problemas que resuelve GNOME-DB son las diferencias entre las distintas fuentes de datos a las que puede acceder. Es decir, hay SGBDR que permiten transacciones y otros no, algunos permiten subconsultas y otros no, etc. Así, GNOME-DB ofrece una serie de funciones para que los clientes puedan consultar dinámicamente las capacidades de la base de datos que estén usando, para así actuar en consecuencia.

Este sistema se extiende hasta lo que se llama "el diccionario de datos", que es la lista de objetos (tablas, vistas, procedimientos, etc). Puesto que la manera de leer dicho diccionario es dependiente de la fuente de datos que se esté usando, GNOME-DB ofrece un sistema mediante el cual se pueden consultar dichos datos sin necesidad de conocer la manera de hacerlo para la fuente de datos que se esté usando en ese momento. Esto permite construir fácilmente diseñadores de bases de datos y demás, pues el sistema que ofrece GNOME-DB es lo suficientemente flexible como para ser válido para cualquier tipo de base de datos.

2 Arquitectura de GNOME-DB

GNOME-DB ha sido diseñado de forma modular, estableciendo una serie de capas para cada una de las partes de la arquitectura. Esto facilita enormemente el desarrollo a los programadores, pues cada parte es independiente de las otras y puede ser modificada fácilmente. Además, permite el uso individual de algunos de los módulos sin necesidad de los de las capas superiores.

Así, en el núcleo mismo de la arquitectura se encuentra GDA (GNU Data Access), que es la parte más importante de todas y de la que dependen el resto de módulos. Es la parte que implementa las comunicaciones via CORBA y la que se encarga del intercambio de datos entre los clientes y los servidores de base de datos. A su vez, GDA está dividida en dos partes, una es la que implementa todo el acceso a los servidores de bases de datos (conocidos en la terminología de GNOME-DB como proveedores para no mezclarlos con los servidores de BBDD), que son servidores CORBA que implementan un determinado interfaz mediante el cual los clientes se comunican con ellos. Cada uno de estos proveedores ofrece acceso a un servidor de base de datos diferente (PostgreSQL, MySQL, ODBC, Oracle, Interbase, LDAP), de forma que los clientes sólo tienen que activar un proveedor diferente para así, sin darse cuenta, acceder a una base de datos distinta. El otro componente de GDA es la parte cliente, que consiste en una encapsulación del acceso a los proveedores CORBA desde los clientes en una librería muy fácil de usar.

La implementación de GDA, libgda, ha sido recientemente separada del módulo principal del proyecto con la idea de permitir su uso en aplicaciones no desarrolladas para GNOME. Para ello, se han eliminado todas las dependencias de GNOME.

En el nivel siguiente de la arquitectura se encuentran las librerías específicas de cada escritorio. Esta afirmación ahora mismo no tiene mucho sentido, pues sólo existe la implementación de este nivel para el proyecto GNOME, pero se ha estructurado la arquitectura de forma que GDA no sea dependiente de ningún escritorio en concreto, por lo que no sería una idea descabellada el implementar esta parte para, por ejemplo, el proyecto KDE. Estas librerías, en el caso de GNOME, contienen una serie de ’widgets’ creados por los desarrolladores de GNOME-DB para facilitar el acceso a GDA desde aplicaciones GNOME, así como una serie de componentes Bonobo^{3} que pueden ser usados desde cualquier aplicación GNOME que soporte componentes.

Finalmente, en el nivel superior de la arquitectura, se encuentra un conjunto de aplicaciones y utilidades que hacen de GNOME-DB un potente entorno para el desarrollo de aplicaciones de acceso a bases de datos. Este conjunto de aplicaciones incluye varias utilidades de línea de comandos para distintos menesteres, como por ejemplo la ejecución de ficheros SQL o la importación/exportación de datos entre distintas bases de datos, así como aplicaciones con interfaz gráfico de usuario para el acceso a las bases de datos y la configuración de todo el entorno GNOME-DB.

3 Otras partes de la arquitectura

Por encima de toda esta arquitectura de acceso a datos, GDA ofrece varios servicios basados en dicha arquitectura, que cubren todas las necesidades en cuanto a la administración/acceso a bases de datos se refiere.

El servicio más espectacular incluido en GDA es el servidor de informes (gda-report), que es un sistema de generación/almacenamiento de informes distribuido, pues, como el resto de GDA/GNOME-DB, está totalmente basado en CORBA. gda-report consiste de un servidor CORBA al que se conectan distintos clientes CORBA que realizan peticiones de ejecución de informes. El servidor, aparte de responder a los clientes, ofrece a su vez distintas características que lo convierten en una poderosa herramienta, como por ejemplo un servicio de caché, que permite almacenar informes ya generados para evitar su posible re-generación más tarde.

3http://developer.gnome.org/arch/component/bonobo.html

Así mismo, como se comentaba anteriormente, se ofrecen herramientas para importar o exportar datos entre distintos sistemas de bases de datos. Esto permite, por ejemplo, exportar una base de datos Oracle e importarla en PostgreSQL, sin necesidad de preocuparse de las diferencias entre los dos sistemas. GDA se hace cargo de todo.

GNOME-DB, por su parte, también ofrece distintas funcionalidades que pueden ser muy útiles para los programadores/usuarios de GNOME. Estos servicios están, principalmente, basados en Bonobo, el sistema de componentes del proyecto GNOME, que permite la interacción visual entre aplicaciones totalmente ajenas. Para los usuarios, la ventaja de los componentes consiste en que pueden intercambiar los datos provinientes de GDA/GNOME-DB en otras aplicaciones; para los desarrolladores, consiste en que pueden fácilmente incluir acceso a datos sin tener que aprender a programar con GDA/GNOME-DB.

4 Desarrollo con GNOME-DB

El objetivo principal de GNOME-DB es el crear toda una infraestructura para el desarrollo de aplicaciones de acceso a bases de datos. Por ello, la parte más completa la componen las distintas librerías que componen el sistema.

La primera de ellas, libgda-server, es una encapsulación de la implementación de los interfaces CORBA para su uso en proveedores. Esta librería ha sido creada hace poco, pero desde que existe, la vida de los programadores de GNOME-DB ha cambiado, pues ahora, añadir soporte para otra base de datos distinta es cuestión de horas, y no como antes, que después de pensarlo, se prohibió la creación de nuevos proveedores durante un tiempo para evitar que el código fuente de GNOME-DB fuera corrompiéndose más y más.

gda-client, de la que ya hemos hablado anteriormente, es otra encapsulación más, pero esta vez de la parte cliente de los interfaces CORBA, es decir, de la parte que realiza las llamadas a los métodos implementados por los distintos proveedores. Esta librería es la que usan los clientes. Está orientada a objetos (aunque implementada en C), por lo que su uso resulta muy intuitivo. Se están desarrollando distintos enlaces con otros lenguajes de esta librería; entre ellos, el más avanzado es C++, mientras que Python y Pascal están aún en continuo desarrollo. Para el futuro se esperan enlaces con otros muchos lenguajes, principalmente Perl.

La parte GNOME del proyecto también incluye librerías que permiten el desarrollo de aplicaciones basadas en GNOME-DB. Estas librerías incluyen libgnomedb, que incluye una gran variedad de ’widgets’ orientados al acceso a datos para su uso en aplicaciones GNOME. Estos ’widgets’ van desde la típica rejilla en la que se muestran los resultados de un comando enviado a la base de datos, hasta todo un potente navegador de la base de datos, que permite la visualización de toda la estructura de la base de datos.

Por último, está libgnomedbcomponents, que en un principio fue creada para uso interno, pero que puede ser también utilizada fácilmente en otras aplicaciones. Su creación se debió al continuo cambio que experimentaba Bonobo hace unos meses, cambio que conllevaba más disgustos que otra cosa pese a significar que estaba siendo desarrollado muy activamente por varias personas. Así, se decidió añadir otra capa de encapsulación a la arquitectura debido a que el código relativo a Bonobo se usa en numerosas partes de GNOME-DB, por lo que tener todo ese código fácilmente ’cambiante’ en una librería fue todo un alivio para los programadores de GNOME-DB. Pero, como se decía anteriormente, esta librería puede ser usada por otras aplicaciones para la creación y el uso de componentes Bonobo. De hecho, los integrantes del proyecto GNOME-DB animan a que sea utilizada para ello.

Varias aplicaciones hacen ya uso de estas librerías para sus accesos a datos:

• gASQL: herramienta de administración de bases de datos. Es la que incluye el soporte más completo de GNOME-DB de todas las aplicaciones que lo usan. Esto se debe a que Vivien Malerba, el desarrollador de gASQL, forma parte del equipo de desarrollo de GNOME-DB.

• GNOME Office es una "suite" ofimática que incluye varias aplicaciones GNOME orientadas a la productividad. GNOME-DB ofrece el acceso de datos de la suite.

• Glade: el famoso diseñador de pantallas Glade incluye soporte para los "widgets" de GNOME-DB. El soporte aún no es lo suficientemente completo como para facilitar el desarrollo de aplicaciones de BBDD, pero se está trabajando en una total integración.

• GNU Enterprise es un software orientado a todo tipo de empresa, suministrando la infraestructura necesaria para la informatización de cualquier empresa. También constituye el primer ejemplo de aplicación que utiliza únicamente GDA. Estos hechos están acelerando enormemente el desarrollo de esta parte, de forma que sea realmente útil para todo tipo de aplicaciones, desde sencillos clientes a todo un sistema, por ejemplo, de facturación o control de stock.

5 Estado actual del proyecto

En estos momentos GNOME-DB se encuentra en el punto más álgido de su desarrollo, pues para finales de este año se va a hacer la primera liberación 100% estable. Hasta ahora ha estado en buen estado y, pese a algunos fallos, era bastante estable, pero debido al uso de librerías no "estándar" del proyecto GNOME (como Bonobo, OAF, etc), no se ha podido realizar una liberación oficial. A finales de este año, con la liberación de GNOME 1.4 veremos esta primera liberación estable y se espera que GNOME-DB forme parte del paquete "extra" de aplicaciones que acompañará a GNOME 1.4, a finales de este año.

Además, cada vez más y más gente se acerca a GNOME-DB con muchas ganas de ayudar a hacer posible este proyecto, algo que ha significado un empuje importante en el desarrollo, especialmente con la entrada de los desarrolladores de GNU Enterprise^{4}. No sólo han decidido usar GDA par su proyecto, sino que están colaborando activamente en su desarrollo.

Así pues, el futuro de GNOME-DB se muestra esperanzador y su inclusión en el proyecto GNOME Office^{5} no hace más que dar un nuevo empujón hacia la consecución de sus objetivos.

GNOME-DB sigue en continuo desarrollo, y entre las novedades que se esperan para un futuro cercano se encuentran una buena cantidad de nuevos proveedores (MS Access, Sybase, IBM DB2, así como un entorno integrado de desarrollo basado en Glade para el desarrollo de aplicaciones de acceso a datos. Además, continúan añadiéndose enlaces con nuevos lenguajes, como por ejemplo Perl, Pascal, Python, Java....

6 Referencias

• Información relacionada:

       1. http://www.gnome.org/projects/gnome-db/, GNOME-DB.
       2. http://www.gnome.org, Proyecto GNOME.
       3. http://barrapunto.org/gnome/, Sección GNOME en Barrapunto.

4http://www.gnue.org

5http://www.gnome.org/gnome-office/