Capítulo 2. Marco Teórico
2.7 Software
Este trabajo de tesis comprende una implementación en software de la arquitectura propuesta. El software utilizado en la implementación fue seleccionado tomando en cuenta las características de un sistema distribuido, como se describe a continuación.
2.7.1 Características de los sistemas distribuidos
Los sistemas distribuidos, de los cuales las bases de datos distribuidas con un ejemplo, exhiben las siguientes características [Buretta, 1997; pp. 30]:
• Componentes remotos. Los componentes del sistema están distribuidos
geográficamente;
• Concurrencia. Cualquier número de componentes pueden ejecutarse en paralelo. • Aislamiento de fallas. Cualquier componente puede fallar independientemente de
los demás;
• Mezcla heterogénea de tecnologías. El entorno usualmente contiene una mezcla de tecnologías que cambia lentamente con el tiempo;
• Movilidad de los componentes. Los recursos, nodos de proceso y los usuarios son físicamente móviles;
• Naturaleza asíncrona de los eventos. No puede asumirse que ocurren cambios relacionados en un instante determinado de tiempo; y
• Carencia de un estado global. El estado global de un sistema distribuido no puede determinarse con precisión.
2.7.2 Sistema operativo
En un sistema de bases de datos distribuidas donde existen componentes remotos, una mezcla heterogénea de tecnologías y componentes móviles, es deseable que la implementación pueda ejecutarse en cualquier hardware y bajo cualquier sistema operativo.
Una manera de lograr esto es mediante el uso de una máquina virtual.
Con una máquina virtual es posible crear software independiente de la plataforma al nivel ejecutable. En este enfoque, el compilador de un lenguaje particular genera código para una máquina virtual en lugar de generar código nativo para un hardware particular. Un ejemplo de esto es el compilador de Java que produce código para la máquina virtual de Java que requiere una implementación para cada tipo de hardware donde se desee ejecutar programas de Java [Coulouris et al., 2001; pp. 17].
2.7.3 Base de datos
En un sistema de bases de datos distribuidas donde existe una mezcla heterogénea de tecnologías es deseable que la implementación soporte el uso de cualquier base de datos. En el caso de un sistema relacional de bases de datos distribuidas, es posible utilizar SQL para acceder a la información almacenada en sus bases de datos ya que SQL es usado casi
universalmente por todos los DBMS relacionales. SQL permite escribir queries (consultas),
compuestas por estatutos SQL, con la finalidad de leer o escribir datos en una base de datos relacional [Deitel & Deitel, 1999; pp. 887].
2.7.4 Plataforma de implementación
Son muchas las exigencias que un sistema de bases de datos distribuidas con componentes remotos, concurrencia, aislamiento de fallas, una mezcla heterogénea de tecnologías y componentes móviles solicita a su plataforma de implementación.
Adicionalmente, en el contexto de este trabajo de tesis, donde se propone una arquitectura genérica de la distribución de datos de un D-DBS basada en componentes y se valida por medio de una implementación, se añaden los siguientes requerimientos:
• Paradigma orientado a objetos. Para simplificar la creación y el diseño de los componentes de la arquitectura propuesta así como facilitar la descripción de los mismos por medio de modelos UML; y
• Lenguaje algorítmico. Los algoritmos resultantes de la implementación deben ser fáciles de leer. El lenguaje debe de soportar la abstracción de datos y la descomposición de problemas para facilitar la expresión de las ideas algorítmicas con claridad [Baase & Van Gelder, 2000; pp. 3].
En base a estas características, la plataforma de implementación seleccionada fue Java 2
Platform, Standard Edition (J2SE) [J2SE, 2003] debido a que satisface considerablemente
bien los requerimientos antes mencionados, como se explica a continuación:
• Componentes remotos. J2SE incluye la tecnología Java RMI [RMI, 2003]. RMI es un conjunto de APIs que le otorgan al desarrollador la capacidad de acceder objetos remotos sin tener que programar la conexión y los protocolos de red por su propia cuenta [Birnam, 2001; pp. 20];
• Concurrencia. J2SE provee primitivas de programación concurrente como parte de
su lenguaje. Estas primitivas hace de J2SE una plataforma con capacidad multi-hilo,
lo cual significa que el desarrollador es capaz de incluir en sus aplicaciones hilos de
ejecución, donde cada hilo realiza una parte del programa y se ejecuta de forma concurrente a otros hilos [Deitel & Deitel, 1999; pp. 734-735];
• Aislamiento de fallas. J2SE implementa un mecanismo para manejo de excepciones que le permite a un programa atrapar y manejar errores en lugar de dejarlos ocurrir
y que el sistema inevitablemente sufra las consecuencias. Una excepción es una
indicación de que un problema ha ocurrido durante la ejecución de un programa [Deitel & Deitel, 1999; pp. 699-700];
• Mezcla heterogénea de tecnologías. La plataforma J2SE se compone de dos
componentes: Java VM (Java Virtual Machine) y Java API (Java Application
Programming Interface) [Java Tutorial, 2003]. Como se mencionó anteriormente, Java VM permite crear software independiente de la plataforma al nivel ejecutable [Coulouris et al., 2001; pp. 17]. Por otro lado, Java API incluye a JDBC [JDBC, 2003], un API de acceso a datos con el cual es posible acceder a cualquier base de datos relacional que cuente con un driver JDBC para su respectivo DBMS [Molina, 2000; pp. 7]. JDBC le permite a los programadores escribir código que utiliza estatutos SQL para acceder a la información de una base de datos relacional [Deitel
& Deitel, 1999; pp. 887-888]. A la fecha de elaboración de este documento de tesis, existen drivers JDBC para 178 bases de datos distintas;
• Movilidad de los componentes. Una de las características de J2SE es dar soporte a
funcionalidades de red (networking). Entre ellas se encuentran la resolución de
URLs, la resolución de direcciones IP, el protocolo TCP, el protocolo UDP y sockets [Java Tutorial, 2003]. Utilizando URLs para acceder a los componentes del sistema, este seguirá funcionando a pesar de que la dirección lógica IP y física de sus componentes pueda cambiar;
• Paradigma orientado a objetos. El lenguaje de programación Java incluido en la plataforma J2SE está diseñado para ser orientado a objetos [Gosling & McGilton, 1996; sec. 1.2.1]; y
• Lenguaje algorítmico. El lenguaje de programación Java incluido en la plataforma J2SE cumple con los requerimientos de un lenguaje algorítmico porque soporta la abstracción de datos de manera natural, respeta al tipo de los objetos impidiendo
conversiones arbitrarias entre ellos e incluye un tipo booleano (boolean) explícito.
[Baase & Van Gelder, 2000; pp. 3].