Generador de código para BBDD Oracle
Texto completo
(2) Generador de Código para BBDD Oracle. 2.
(3) Generador de Código para BBDD Oracle. Índice Índice ................................................................................................................................................... 3 Índice ilustraciones .............................................................................................................................. 7 Índice Tablas ........................................................................................................................................ 9 Resumen ............................................................................................................................................ 13 Abstract .............................................................................................................................................. 14 Introducción ....................................................................................................................................... 15 Objetivo ............................................................................................................................................. 16 Definición de metodología ................................................................................................................ 17 Metodología ágil ............................................................................................................................ 22 Scrum ............................................................................................................................................. 25 Tecnología aplicada al desarrollo ...................................................................................................... 28 Java ................................................................................................................................................ 28 StringTemplate .............................................................................................................................. 29 Group file ................................................................................................................................... 31 Templates .................................................................................................................................. 32 Definición formal de StringTemplate......................................................................................... 39 Oracle Database Express Edition ................................................................................................... 40 ALL_TABLES ................................................................................................................................ 42 ALL_TAB_COLUMNS .................................................................................................................. 46 ALL_CONSTRAINTS ..................................................................................................................... 48 ALL_CONS_CONSTRAINT ........................................................................................................... 50. 3.
(4) Generador de Código para BBDD Oracle. Herramientas utilizadas ..................................................................................................................... 51 Google Drive .................................................................................................................................. 51 Draw.io ........................................................................................................................................... 52 Web sequence diagrams................................................................................................................ 53 Eclipse ............................................................................................................................................ 54 Desarrollo........................................................................................................................................... 55 Primera iteración ........................................................................................................................... 55 Reunión de planificación (Sprint Planning) ................................................................................ 55 Pruebas unitarias ....................................................................................................................... 59 T4 Pruebas de integración ......................................................................................................... 60 Segunda iteración .......................................................................................................................... 62 Reunión de planificación (Sprint Planning) ................................................................................ 62 Pruebas unitarias ....................................................................................................................... 67 T8 Pruebas de integración ......................................................................................................... 68 Tercera iteración ............................................................................................................................ 71 Reunión de planificación (Sprint Planning) ................................................................................ 71 Pruebas unitarias ....................................................................................................................... 80 T11 Pruebas de integración ....................................................................................................... 82 Cuarta iteración ............................................................................................................................. 84 Reunión de planificación (Sprint Planning) ................................................................................ 84 Pruebas unitarias ....................................................................................................................... 94 T14 Pruebas de integración ....................................................................................................... 95. 4.
(5) Generador de Código para BBDD Oracle. Sprint Backlog Final ........................................................................................................................ 98 Trabajo Futuro ........................................................................................................................... 100 Conclusiones .................................................................................................................................... 102 Referencias ...................................................................................................................................... 103. 5.
(6) Generador de Código para BBDD Oracle. 6.
(7) Generador de Código para BBDD Oracle. Índice ilustraciones Ilustración 1 ................................................................................................................................. 18 Ilustración 2 ................................................................................................................................. 18 Ilustración 3 ................................................................................................................................. 19 Ilustración 4 ................................................................................................................................. 20 Ilustración 5 ................................................................................................................................. 21 Ilustración 6 ................................................................................................................................. 41 Ilustración 7 ................................................................................................................................. 52 Ilustración 8 ................................................................................................................................. 53 Ilustración 9 ................................................................................................................................. 57 Ilustración 10 ............................................................................................................................... 58 Ilustración 11 ............................................................................................................................... 66 Ilustración 12 ............................................................................................................................... 73 Ilustración 13 ............................................................................................................................... 78. 7.
(8) Generador de Código para BBDD Oracle. 8.
(9) Generador de Código para BBDD Oracle. Índice Tablas Tabla 1 ......................................................................................................................................... 30 Tabla 2 ......................................................................................................................................... 30 Tabla 3 ......................................................................................................................................... 31 Tabla 4 ......................................................................................................................................... 31 Tabla 5 ......................................................................................................................................... 31 Tabla 6 ......................................................................................................................................... 32 Tabla 7 ......................................................................................................................................... 33 Tabla 8 ......................................................................................................................................... 33 Tabla 9 ......................................................................................................................................... 34 Tabla 10 ....................................................................................................................................... 35 Tabla 11 ....................................................................................................................................... 35 Tabla 12 ....................................................................................................................................... 35 Tabla 13 ....................................................................................................................................... 35 Tabla 14 ....................................................................................................................................... 36 Tabla 15 ....................................................................................................................................... 36 Tabla 16 ....................................................................................................................................... 38 Tabla 17 ....................................................................................................................................... 39 Tabla 18 ....................................................................................................................................... 45 Tabla 19 ....................................................................................................................................... 47 Tabla 20 ....................................................................................................................................... 49. 9.
(10) Generador de Código para BBDD Oracle. Tabla 21 ....................................................................................................................................... 50 Tabla 22 ....................................................................................................................................... 55 Tabla 23 ....................................................................................................................................... 56 Tabla 24 ....................................................................................................................................... 61 Tabla 25 ....................................................................................................................................... 62 Tabla 26 ....................................................................................................................................... 63 Tabla 27 ....................................................................................................................................... 64 Tabla 28 ....................................................................................................................................... 65 Tabla 29 ....................................................................................................................................... 70 Tabla 30 ....................................................................................................................................... 71 Tabla 31 ....................................................................................................................................... 71 Tabla 32 ....................................................................................................................................... 72 Tabla 33 ....................................................................................................................................... 75 Tabla 34 ....................................................................................................................................... 77 Tabla 35 ....................................................................................................................................... 77 Tabla 36 ....................................................................................................................................... 83 Tabla 37 ....................................................................................................................................... 84 Tabla 38 ....................................................................................................................................... 84 Tabla 39 ....................................................................................................................................... 87 Tabla 40 ....................................................................................................................................... 90 Tabla 41 ....................................................................................................................................... 97 Tabla 42 ....................................................................................................................................... 99. 10.
(11) Generador de Código para BBDD Oracle. 11.
(12) Generador de Código para BBDD Oracle. 12.
(13) Generador de Código para BBDD Oracle. Resumen Las empresas tienen programas que acceden a sus bases de datos, estos programas pueden quedarse obsoletos o dejar de serles útiles por alguna razón y deben ser actualizados o reemplazados. Sin embargo la base de datos se suele mantener, ya que la estructura de la información no cambia. Llegado el momento de actualizar o migrar ese software que accede a la base de datos, se puede recurrir a una estructura de clases, las cuales están basadas en la metainformación de la base de datos, y así facilitar el desarrollo del nuevo software. La herramienta desarrollada en este proyecto accede a la metainformación de la base de datos, obtiene la estructura de las tablas y a través de plantillas genera las clases necesarias para empezar el nuevo software. Al estar la herramienta basada en plantillas, adaptar éstas a un nuevo lenguaje es sencillo, haciendo la herramienta mucho más polivalente. En conclusión, una herramienta de este tipo puede facilitar el desarrollo de un nuevo software siempre que la estructura de la base de datos se mantenga intacta haciendo que el nuevo proyecto se desarrolle de forma más rápida.. 13.
(14) Generador de Código para BBDD Oracle. Abstract Companies have software that access their databases, this software can become obsolete or fail to be useful for some reason and must be upgraded or replaced. However the database is usually maintained as the information does not change. It is for this reason that when you migrate the software that accesses the database can use a class structure based on information in the database to facilitate the development of new software. The tool developed in this project accesses the metadata of the database to obtain the structure of the tables and through templates generate the necessary classes to start the new software. Being template‐based tool, adapt these to a new language is simple, making a more versatile tool. In conclusion, a tool of this kind can facilitate the development of a new software provided that the structure of the database is intact making the new project develops more quickly.. 14.
(15) Generador de Código para BBDD Oracle. Introducción En los últimos años el avance en las tecnologías de presentación de información al usuario, front end, ha avanzado de forma muy significativa, sobre todo en las tecnologías web, pasando de unas páginas web estáticas en las que el usuario apenas podía interactuar con ellas a webs dinámicas, que se asemejan más a una aplicación de escritorio. Pero en el campo de almacenamiento de datos esos avances han sido menores. Han existido avances como las bases de datos orientadas a objetos o las bases de datos orientadas a documentos (mongodb) pero el sistema más extendido de almacenamiento de datos, las bases de datos relacionales, ha avanzado muy poco, los cimientos en los que se basa no han cambiado en los últimos 40 años. Por estas razones muchas empresas se encuentran en la situación de que su modelo de datos actual le es totalmente válido pero es necesario actualizar las aplicaciones que acceden a él, bien porque son aplicaciones que están hechas para un sistema operativo concreto y éste debe ser cambiado, bien porque la empresa quiere que esa aplicación sea accesible desde cualquier entorno por lo que decide hacer una aplicación web, etc. En general, las razones por las que se puede decidir el cambio pueden ser muy diversas pero por norma general el modelo de datos se mantiene igual y únicamente cambia el front end. Ante esta situación, la solución habitual es empezar de cero, diseñando toda la aplicación desde el principio pero manteniendo tan sólo el modelo de datos.. 15.
(16) Generador de Código para BBDD Oracle. Objetivo El objetivo de este proyecto es crear una herramienta que facilite el desarrollo de un nuevo software que permita facilitar la migración de las aplicaciones de negocio de una empresa manteniendo la metainformación de sus bases de datos. Para facilitar el desarrollo de ese nuevo software, la herramienta creará un esqueleto básico de clases, que es el punto de partida sobre el que comenzar a desarrollar, facilitando así el trabajo al programador. Para poder crear esa estructura se deberá obtener información de la única parte que aún permanece del antiguo sistema y es la base de datos. Se accederá a los metadatos de esa base de datos para poder determinar las tablas, columnas, tipos de datos, constraint… y así crear las diferentes partes de la estructura que permitirá realizar una migración fácil. Estas partes serán: Bean por cada tabla en él estarán todas las columnas de esa tabla con sus respectivos tipos de datos. Un XSD (XML Schema Definition) en el cual se definirá la estructura de esa tabla con sus columnas, sus tipo de datos y sus PK.. 16.
(17) Generador de Código para BBDD Oracle. Metodologías La metodología de desarrollo de software se define como un conjunto de procedimientos, herramientas y técnicas que se usan para el desarrollo de software. Estas técnicas están pensadas para que el desarrollo del proyecto esté más estructurado, planeado y controlado y como consecuencia de esto la calidad del mismo es mayor. Las metodologías tienen diferentes enfoques para tratar de resolver los problemas a los que se enfrentan los miembros de un equipo de desarrollo por lo que algunas son adecuadas para un tipo de proyectos y otras son más adecuadas para otro tipo de proyectos. No hay una norma que indique cuál es la más adecuada para cada tipo de proyecto ya que hay muchos factores que pueden influir, experiencia del equipo en esa metodología, tipo de proyecto, tipo de cliente, etc. por lo que hay que analizar cada caso en particular para poder tomar una decisión. Los diferentes tipos de enfoque de las metodologías son [1]: Modelo en cascada: El modelo en cascada, es la metodología de desarrollo más clásica. Su forma de trabajar es secuencial sin que haya ninguna iteración, la primera fase es la toma de requisitos, para seguir con el diseño, implementación, verificación y por último el mantenimiento. Con el paso del tiempo se ha demostrado que este tipo de metodología no es el más adecuado para muchos proyectos ya que los requisitos pueden cambiar y no está pensada para desde una fase volver a otra anterior, otra de sus desventajas es que el cliente no ve el producto final hasta que el proyecto está completamente acabado.. 17.
(18) Generador de Código para BBDD Oracle. Ilustración 1. Modelo de Procesos Incrementales El modelo incremental es una variación del modelo en cascada, aplica este modelo repetidamente y solapa sus ejecuciones, produciendo en cada repetición una entrega de software. En cada iteración el equipo adquiere más experiencia provocando que en cada entrega el software tenga mejor calidad. La primera entrega es lo denominado el núcleo y en el que se basará el resto del software. Este modelo tiene las ventajas del modelo en cascada y evita uno de sus inconvenientes, el cliente va viendo en cada iteración como evoluciona el producto.. Ilustración 2. 18.
(19) Generador de Código para BBDD Oracle. Espiral El modelo en espiral consta de varias fases que se ejecutan de forma cíclica hasta obtener un producto terminado. En cada iteración se deben tener en cuenta los objetivos a conseguir en esa iteración, las diferentes alternativas para conseguir los objetivos marcados para esa iteración analizando sus posibles riesgos, una planificación detallada y por último el desarrollo y pruebas del software a entregar. Éste fue definido por Boehm en 1986 tras escribir su artículo "A Spiral Model of Software Development and Enhancement" [19].. Ilustración 3. 19.
(20) Generador de Código para BBDD Oracle. Construcción de Prototipos El modelo de prototipos consiste en un modelo en el equipo de desarrollo debe construir pequeños prototipos en poco tiempo para mostrárselos al cliente, éste a su vez dará su opinión sobre el software entregado y las nuevas características que quiere para la siguiente entrega. De esta forma, el cliente ve las evoluciones del producto evitando así que el producto entregado al final del desarrollo no sea lo que el cliente quiere. Con este modelo también se consigue que los requisitos sean más exactos ya que si algún requisito no ha sido entendido correctamente el cliente se dará cuenta de forma rápida y corregirá el error. Cada entrega de cada prototipo consta de cinco fases: •. Plan rápido. •. Modelado de diseño rápido. •. Construcción del prototipo. •. Desarrollo, entrega y retroalimentación. •. Comunicación. Ilustración 4. 20.
(21) Generador de Código para BBDD Oracle. Metodología ágil Las metodologías ágiles son un conjunto de buenas prácticas para la gestión de proyectos que destacan por su rapidez y flexibilidad en la producción [2].. Ilustración 5 [3]. 21.
(22) Generador de Código para BBDD Oracle. Metodología ágil Como se ha dicho antes, la metodología ágil es un conjunto de buenas prácticas para el desarrollo de un proyecto software con el que se consigue mejorar la productividad del equipo, mejorar la calidad del producto final, en caso de que los requisitos del proyecto cambien la respuesta a estos cambios es rápida y sobre todo se consigue que el cliente esté satisfecho con el producto [4]. Para conseguir los objetivos descritos se crean pequeños grupos de trabajo que se autogestionan ellos mismos y así son más ágiles a la hora de tomar decisiones o reaccionar a cambios drásticos en el producto. También se hacen pequeñas entregas de software de forma iterativa, cada una de estas iteraciones es de un periodo de tiempo corto, no más de cuatro semanas, y cada iteración tiene las fases típicas del desarrollo de software. Al ser entregado el software al cliente de forma constante, se consigue que éste retroalimente al equipo de desarrollo y observe fallos de concepto en las fases tempranas del proyecto. Esta metodología es muy válida para proyectos en los que los requisitos son muy volátiles y se deben hacer cambios en el software de manera constante. La comunicación con el cliente es fundamental en este tipo de metodologías pero dando mucha más prioridad a la comunicación cara a cara que a la documentación. El origen de esta metodología se remonta al año 2001 cuando un grupo de expertos de la industria del software se reúnen en Utah. Su objetivo fue esbozar los valores y principios que deberían permitir a los equipos desarrollar software rápidamente y respondiendo a los cambios que puedan surgir a lo largo del proyecto.. 22.
(23) Generador de Código para BBDD Oracle. Tras esta reunión se creó The Agile Alliance, una organización sin ánimo de lucro, dedicada a fomentar la utilización de la metodología de desarrollo ágil y a ayudar a las empresas y organizaciones a que adopten dicha metodología. También se creó tras aquella reunión lo que se conoce como el manifiesto ágil, cuyos fundamentos son: Valorar más a los individuos y su interacción que a los procesos y las herramientas. Uno de los pilares en los que se apoya una metodología ágil es que las personas son el factor principal para que un proyecto salga adelante. Hay que anteponer las personas a las herramientas, primero se debe elegir el equipo y que sea éste el que decide qué herramientas va a utilizar para realizar el proyecto, y no elegir primero las herramientas y que sean las personas las que se adaptan a las herramientas. Valorar más el software que funciona que la documentación exhaustiva. No se deben generar documentos a no ser que sean realmente necesarios y éstos deben ser cortos y concisos, sin añadir información que no es realmente relevante. Valorar más la colaboración con el cliente que la negociación contractual. El desarrollo del proyecto se va a realizar con la colaboración constante del cliente por lo que es fundamental que la interacción entre las dos partes sea fluida ya que esto marcará buena marcha del proyecto y asegure su éxito. Valorar más la respuesta al cambio que el seguimiento de un plan. El equipo debe estar preparado para cualquier cambio en el proyecto, ya sea un cambio de requisito o bien un cambio de tecnología, por lo que la planificación debe ser flexible.. 23.
(24) Generador de Código para BBDD Oracle. Manifiesto [5] 1.. Nuestra mayor prioridad es satisfacer al cliente mediante la entrega temprana y continua de software con valor.. 2.. Aceptamos que los requisitos cambien, incluso en etapas tardías del desarrollo. Los procesos Ágiles aprovechan el cambio para proporcionar ventaja competitiva al cliente.. 3.. Entregamos software funcional frecuentemente, entre dos semanas y dos meses, con preferencia al periodo de tiempo más corto posible.. 4.. Los responsables de negocio y los desarrolladores trabajamos juntos de forma cotidiana durante todo el proyecto.. 5.. Los proyectos se desarrollan en torno a individuos motivados. Hay que darles el entorno y el apoyo que necesitan, y confiarles la ejecución del trabajo.. 6.. El método más eficiente y efectivo de comunicar información al equipo de desarrollo y entre sus miembros es la conversación cara a cara.. 7.. El software funcionando es la medida principal de progreso.. 8.. Los procesos Ágiles promueven el desarrollo sostenible. Los promotores, desarrolladores y usuarios debemos ser capaces de mantener un ritmo constante de forma indefinida.. 9.. La atención continua a la excelencia técnica y al buen diseño mejora la Agilidad.. 10. La simplicidad, o el arte de maximizar la cantidad de trabajo no realizado, es esencial. 11. Las mejores arquitecturas, requisitos y diseños emergen de equipos auto‐ organizados. 12. A intervalos regulares el equipo reflexiona sobre cómo ser más efectivo para, a continuación, ajustar y perfeccionar su comportamiento en consecuencia.. 24.
(25) Generador de Código para BBDD Oracle. Scrum El origen de Scrum se remonta a 1986 cuando en el ámbito industrial necesitan sacar al mercado nuevos productos, cuyos requisitos son muy generales a la vez que innovadores y deben estar en el mercado en un periodo de tiempo muy corto [6]. ¿Qué es Scrum? Scrum es una metodología de desarrollo software en el que se aplican un conjunto de buenas prácticas para desarrollar un proyecto de forma colaborativa y conseguir de esta forma el mejor resultado posible. Estas prácticas se apoyan unas a otras y su selección tiene origen en un estudio de la manera de trabajar de equipos altamente productivos. Al igual que en otras metodologías, Scrum hace entregas de software de forma periódica. Las entregas se priorizan en función de los beneficios que le aportan al cliente, siendo los más prioritarios los primeros en ser entregados. Scrum está especialmente indicado para proyectos cuyos requisitos son muy volátiles ya que la capacidad de reacción es muy alta y se pueden atajar los problemas rápidamente.. 25.
(26) Generador de Código para BBDD Oracle. Fundamentos El desarrollo incremental Priorización de los requisitos por valor y coste El control empírico del proyecto. ●. La potenciación del equipo Colaboración y comunicación entre el equipo y con el cliente. ●. El timeboxing. El desarrollo incremental Scrum está basado en pequeñas entregas de software que se realizan de forma periódica e iterativa. La ejecución de esta iteración, también llamado sprint, debe realizarse en un corto periodo de tiempo, entre dos semanas y dos meses, y debe entregar un software al cliente que sea funcional. Cada iteración debe contener todas las partes de un proyecto, análisis, diseño, documentación y pruebas pero sólo lo necesario. Con cada sprint el producto va siendo más complejo consiguiendo que el desarrollo se ejecute de forma incremental. Priorización de los requisitos por valor y coste Al inicio del proyecto se crea una lista de tareas (Product Backlog) y se ordenan estableciendo una prioridad a cada una de ellas, teniendo en cuenta el valor que aportan al proyecto y su coste en desarrollo. Estas prioridades pueden ir variando según avanza el proyecto, en cada inicio de sprint se analizan las tareas que quedan por realizar y se restablece su prioridad. En las reuniones de cada inicio de sprint pueden aparecer nuevas tareas que son añadidas al Product Backlog.. 26.
(27) Generador de Código para BBDD Oracle. El control empírico del proyecto. A diferencia de los proyectos tradicionales que se basan en predicciones para controlar las variables de los proyectos, Scrum basa su control del proyecto en la experiencia, adaptando las variables del proyecto (tiempos de entrega, valoraciones, coste de cada requisito) en las experiencias de los sprints anteriores. La potenciación del equipo Otro de los fundamentos de Scrum es el equipo. A diferencia de los proyectos tradicionales donde el jefe de proyecto es el que toma las decisiones importantes, en Scrum las decisiones las toman todo el equipo. Con esto se consigue que el equipo este más comprometido con el proyecto y, a la vez, más motivado. Colaboración y comunicación entre el equipo, y con el cliente En Scrum, la colaboración con el cliente es fundamental, debe estar presente durante la creación de la lista de objetivos del producto, en la reunión de planificación de cada iteración para que el equipo pueda preguntar cualquier duda al cliente y al final de cada iteración para poder hacerle una demostración de lo realizado en esa iteración. El timeboxing Las tareas que se realizan (pueden ser de cualquier tipo, toma de decisiones, una reunión, etc.) deben tener un tiempo máximo para que sean realizadas. De esta forma se priorizan los objetivos, se consigue ser más productivo y las personas trabajan más enfocadas en su tarea.. 27.
(28) Generador de Código para BBDD Oracle. Tecnología aplicada al desarrollo Java En la actualidad existen gran cantidad de lenguajes de programación, todos con sus ventajas e inconvenientes. Para este proyecto se decidió utilizar Java por varias razones [7]: Alto conocimiento del lenguaje. Como indica la metodología de desarrollo Scrum, el individuo prevalece sobre las herramientas y en este caso el equipo tenía un gran conocimiento sobre el lenguaje de desarrollo java por lo que la evolución del proyecto sería más rápida y ágil, evitando así el cuello de botella que provocaría la curva de aprendizaje de un nuevo lenguaje de programación. Independencia de SO y arquitectura hardware. Al ser un lenguaje interpretado es independiente, tanto al sistema operativo como a la arquitectura hardware, tan sólo es necesario que exista una máquina virtual que, bien puede ser la proporcionada por Oracle, por otra empresa que haya desarrollado su propia máquina virtual manteniendo los estándares o utilizando la máquina virtual de código abierto OpenJDK. Lenguaje orientado a objetos. Una de las ventajas de la orientación a objetos es que el código fuente es más fácil de reutilizar, evitando que se tenga que programar la misma tarea varias veces. Otras de las ventajas son abstracción, encapsulamiento, herencia, etc. Numerosos drivers de conexión a BBDD. Al estar tan extendido este lenguaje, existe una gran variedad de drivers de conexión a BBDD por lo que, en caso de querer ampliar el alcance del proyecto y dar cabida a otros de tipos de BBDD, será mucho más sencillo. Garbage collector. Otra de las ventajas consiste en la liberación de memoria. Java tiene la característica que no es necesario gestionar la memoria, el lenguaje tiene un mecanismo que se encarga de liberar la memoria que ya no se está utilizando por lo que para el programador es transparente. Esta característica está presente en la mayoría de lenguajes de programación modernos. IDE. Java dispone de varios entornos de desarrollo integrado, llamado también IDE (sigla en inglés de Integrated Development Environment). Varios de ellos muy avanzados que facilitan la labor del desarrollador en gran medida evitando tener que realizar tareas tediosas.. 28.
(29) Generador de Código para BBDD Oracle. StringTemplate Los motores de plantillas son programas de software que generan un resultado a partir de unos datos estáticos y unos datos dinámicos. Los datos estáticos son una estructura que viene proporcionada por la plantilla, esta estructura carece de sentido y debe ser completada con datos dinámicos. Los resultados obtenidos pueden ser de todo tipo, páginas web, código fuente, correos electrónicos, etc [8]. StringTemplate es un motor de plantillas que rompe las plantillas en trozos de texto y en expresiones, las cuales vienen delimitadas, por defecto, entre los símbolos de mayor y menor. El motor ignora todo lo que se encuentre fuera de las expresiones y lo escupe sin evaluarlo tratando sólo las expresiones. El creador de StringTemplate es Terence Parr, profesor de la universidad de San Francisco y cofundador de http://www.jguru.com/ [20]. Ante la necesidad de crear una web dinámica, decidieron crear un motor de plantillas. Este motor de plantillas se desarrolló originalmente en java pero posteriormente se hizo un fork para c# y python por lo que está presente en varios de los lenguajes más extendidos de la actualidad. La última versión del motor sufrió grandes cambios respecto a la anterior, provocando que fuera aproximadamente dos veces más rápida y el uso de memoria mucho menor. El problema es que no es compatible con las aplicaciones que hayan usado la versión anterior por lo que es necesaria una migración. Una de las principales razones para usar este motor de plantillas es que cambiar los formatos a los que se quiere exportar los datos de la bbdd es bastante sencillo, tan sólo se debe cambiar la plantilla sin necesidad de tocar nada de código. Imagínense que una vez terminado el proyecto, el cliente decide que el código fuente que desea no es java, que han decidido cambiar de tecnología en la que van a desarrollar el nuevo front‐end y que lo quieren desarrollar en c#. Para cambiar la sintaxis de las clases resultante y adaptarlas al nuevo lenguaje sólo se deberían modificar las plantillas y volver a ejecutar el generador de código dando como resultado una nueva estructura de clases pero en un lenguaje distinto.. 29.
(30) Generador de Código para BBDD Oracle. Plantilla para una clase Java: class(package,entity, sup)::= << package <package>;. public class <entity> extends <sup> { } >> Tabla 1. Plantilla para una clase c#: class(package,entity, sup)::= << namespace <package> { public class <entity> : <sup> { } } >> Tabla 2. En este grupo de templates se puede ver que contiene tan sólo un template (class) el cual tiene tres parámetros de entrada, uno el paquete o namespace en el que se va a ubicar la clase generada (package), otro, el nombre de la clase (entity) y por último la clase padre (sup). Estos parámetros sustituyen a las expresiones de igual nombre que vienen delimitadas por los símbolos de mayor y menor. En este caso, las expresiones simplemente son sustituidas por los parámetros pero estas expresiones pueden ser otros templates, funciones u otros posibles valores que serán explicados más adelante. Como se puede ver, la migración de un lenguaje a otro ha sido bastante sencillo, aunque evidentemente, éste es un ejemplo bastante básico y los templates pueden ser bastante más complejos, dificultando mucho más su modificación.. 30.
(31) Generador de Código para BBDD Oracle. Group file StringTemplate organiza toda su estructura a través de los llamados group file que son un conjunto de template y de diccionarios que están agrupados en un solo fichero con la extensión stg. El formato de estos ficheros es el siguiente. delimitadores imports diccionarios templates Tabla 3. Delimitadores Los delimitadores indican el símbolo de inicio y de fin de una expresión, pudiendo ser estos diferentes. Se definen mediante la palabra reservada delimiters y vienen precedidos por dichos símbolos entre comillas. delimiters "<" ">" Tabla 4. Imports En esta parte se puede indicar al group file que importe bien otros group files, otros templates u otros directorios con templates. Al importar estos ficheros se podrá acceder desde este group file a lo definido en ellos. import "/template.st". // importa un template. import "/groupfile.stg". // importa un group file. import "/test/dir". // importa el directorio dir Tabla 5. 31.
(32) Generador de Código para BBDD Oracle. Diccionarios Este apartado contiene la definición de diccionarios de datos. Estos diccionarios de datos son muy útiles para la traducción de palabras. Por ejemplo, se está generando el código java y se quiere crear una variable de tipo entero, a la plantilla se le indicará que la variable es de tipo entero y a través del diccionario de datos, ésta sabrá que las variables de tipo entero deben ser definidas con la palabra int. La definición de un diccionario de datos se realiza mediante el nombre del diccionario y posteriormente viene un conjunto de pares de valores en los que el primero es la clave y el segundo el valor. Por último, tiene que definirse un valor por defecto que será el usado en caso de no encontrar la clave. Este último par se define mediante la clave default y el valor que será usado por defecto. tipoDatos ::= [ "entero":"int", "decimal":"double", "cadena":"String" "default":"String", ] Tabla 6. Para poder utilizar el diccionario simplemente se deberá escribir su nombre y posteriormente poner la clave del valor que se quiere obtener, esta clave puede escribirse literalmente o utilizarse un atributo que contenga la clave del valor a obtener. Templates En esta zona del group file se definen los templates que serán explicados más adelante con mayor profundidad. Templates Un template es una secuencia de textos y expresiones que definen la estructura del resultado que se quiere obtener. Las expresiones son las que son sustituidas por otros valores dando lugar a diferentes resultados. Estas expresiones pueden ser: Atributo. Inclusión de otro template. Una operación condicional. Ejecución de otro template.. 32.
(33) Generador de Código para BBDD Oracle. Expresiones literales Syntax. Discussion. true. Tipo de dato lógico de valor verdadero. false. Tipo de dato lógico de valor verdadero. char. char → space | \n | \r | \t | \uXXXX. \\. Ignora toda la línea hasta que haya un salto de línea. "string". Una cadena de caracteres de salida. {template}. Un subtemplate anónimo. {args | template}. Un subtemplate anónimo con argumentos. []. Una lista vacía. [expr1, expr2, ..., exprN]. Una lista con N valores. Se comporta como una matriz o lista inyectado desde código del controlador. Tabla 7. Expresiones de atributos Syntax. Discussion. a. Busca a y la convierte en una cadena mediante la función de conversión del lenguaje de implementación tal como toString (), ToString (), o _str (). Si no se define localmente como un argumento, StringTemplate mira en la plantilla que invoca la plantilla actual, y así sucesivamente. Evalúa a la cadena vacía si a no existe.. (expr). Evalúa expr para convertirlo en una cadena. Esto es útil para calcular el nombre de la plantilla o la propiedad.. exp.p. Obtiene la propiedad p de exp. exp típicamente debe ser un atributo. Por ejemplo, en la expresión <user.name>, exp es usuario y p es nombre. Más adelante se explicarán las propiedades. expr1.(. Evalúa expr2 para convertirlo en una cadena y usa el resultado como una. expr2). propiedad de expr1 Tabla 8. 33.
(34) Generador de Código para BBDD Oracle. Funciones String template tiene integradas una serie de funciones. Estas funciones tienen tan sólo un argumento y devuelven un sólo valor. Son las siguientes:. Syntax. Description. <first(attr)>. Devuelve el primer o único elemento de attr.. <length(attr)>. Devuelve la longitud del atributo en caso de ser un atributo de varios valores (listas) o uno si sólo es un solo valor. Si es nulo, devuelve 0.. <strlen(attr)>. Devuelve la longitud de la cadena.. <last(attr)>. Devuelve el último elemento de attr.. <rest(attr)>. Devuelve todos los elementos menos el primer elemento de attr.. <reverse(attr)>. Devuelve una lista con los mismos elementos que attr pero en orden inverso.. <trunc(attr)>. Devuelve todos los elementos menos el último. <strip(attr)>. Devuelve una nueva lista sin valores nulos.. <trim(attr)>. Elimina los espacios en blanco del inicio y final de la cadena.. Tabla 9. Palabras reservadas StringTemplate hay varias palabras que están reservadas y no pueden ser usadas en los nombres de los atributos o de los templates, son las siguientes: true, false, import, default, key, group, implements, first, last, rest, trunc, strip, trim, length, strlen, reverse, if, else, elseif, endif, delimiters. 34.
(35) Generador de Código para BBDD Oracle. Propiedades StringTemplate proporciona un mecanismo para que los propios templates tengan acceso a las propiedades de un objeto que sea pasado al propio template como atributo. Las plantillas tendrán acceso a los atributos que sean públicos o que tenga un método get en caso de que el atributo no sea boolean, si es boolean el método deberá ser is o has. Observemos el siguiente ejemplo de una clase java public static class User { public int id; private String name; public String getName() { return name; } public User(int id, String name) { this.id = id; this.name = name; } public boolean isManager() { return true; } public boolean hasParkingSpot() { return true; } public String toString() { return id+":"+name; } } Tabla 10. Empezaremos por el atributo id: public int id; Tabla 11. Como se puede ver, es público, por lo que la plantilla podrá acceder a él sin ninguna restricción. Ahora observaremos el atributo name: private String name; public String getName() { return name; } Tabla 12. El atributo es privado, por lo que en principio la plantilla no podrá tener acceso a él, pero al disponer de un método get, si la plantilla intenta acceder al atributo name StringTemplate, hará una llamada al método get y devolverá su valor. public boolean isManager() { return true; } public boolean hasParkingSpot() { return true; } Tabla 13. 35.
(36) Generador de Código para BBDD Oracle. Estos dos métodos no devuelven ningún atributo de la clase, pero sí siguen la nomenclatura establecida por StringTemplate para devolver un boolean por lo que, si en la plantilla se intenta acceder a ellos como si fueran un atributo: u.manager u.parkingSpot Tabla 14. éstos devolverán el valor y será tratado como si fuera un atributo. Por último, vemos el método toString. Este método será llamado cuando se acceda directamente al objeto, en nuestro ejemplo, cada vez que en la plantilla pongamos u, se ejecutará el método toString en la plantilla y devolverá el id más el nombre. public String toString() { return id+":"+name; } Tabla 15. Definición formal de template template : element* ; element : INDENT? COMMENT NEWLINE | INDENT singleElement | singleElement | compoundElement ; singleElement : exprTag | TEXT | NEWLINE | COMMENT ; compoundElement : ifstat | region ; exprTag : LDELIM expr ( ';' exprOptions )? RDELIM. ;. region : INDENT? LDELIM '@' ID RDELIM template INDENT? LDELIM '@end' RDELIM NEWLINE? ; subtemplate : '{' ( ID ( ','. ID )* '|' )? template INDENT? '}' ;. ifstat : INDENT? LDELIM 'if' '(' conditional ')' RDELIM template ( INDENT? LDELIM 'elseif' '(' conditional ')' RDELIM template )* ( INDENT? LDELIM 'else' RDELIM template )?. 36.
(37) Generador de Código para BBDD Oracle. INDENT? LDELIM 'endif' RDELIM NEWLINE? ; conditional : andConditional ( '||' andConditional )* ; andConditional : notConditional ( '&&' notConditional )* ; notConditional : '!' notConditional | memberExpr ; notConditionalExpr : ID ( '.'. ID. |. exprOptions : option ( ',' option )*. '.' '(' mapExpr ')'. )* ;. ;. option : ID ( '=' exprNoComma )? ; exprNoComma : memberExpr ( ':' mapTemplateRef )? ; expr : mapExpr ; mapExpr : memberExpr ( ( ',' memberExpr )+ ':' mapTemplateRef )? ( ':' mapTemplateRef ( ',' mapTemplateRef )* )* ; mapTemplateRef : ID '(' args ')' | subtemplate | '(' mapExpr ')' '(' argExprList? ')' ; memberExpr : includeExpr ( '.' ID. |. '.' '(' mapExpr ')'. includeExpr : ID '(' expr? ')' | 'super' '.' ID '(' args ')' | ID '(' args ')' | '@' 'super' '.' ID '(' ')' | '@' ID '(' ')' | primary ; primary : ID | STRING | 'true' | 'false' | subtemplate | list | '(' conditional ')' | '(' expr ')' ( '(' ( argExprList )? ')' )? ; args: argExprList | namedArg ( ',' namedArg )* |. 37. )* ;.
(38) Generador de Código para BBDD Oracle. ; argExprList : arg ( ',' arg )* ; arg : exprNoComma ; namedArg : ID '=' arg ; list: '[' ']' | '[' listElement ( ',' listElement )* ']' ; listElement : exprNoComma | ; Tabla 16. 38.
(39) Generador de Código para BBDD Oracle. Definición formal de StringTemplate group : delimiters? ('import' STRING)* ( template | dict )+ ; delimiters : 'delimiters' STRING ',' STRING ; template : ( '@' ID '.' ID '(' ')' | ID '(' formalArgs ')' ) '::'= ( STRING // "..." | BIGSTRING // <<...>> | BIGSTRING_NO_NL // <%...%> ) | ID "::=" ID // alias one template to another ; formalArgs : formalArg ( ',' formalArg )* ( ',' formalArgWithDefaultValue )* | formalArgWithDefaultValue ( ',' formalArgWithDefaultValue )* | ; formalArg : ID ; formalArgWithDefaultValue : ID ( '=' STRING | '=' ANONYMOUS_TEMPLATE | '=' 'true' | '=' 'false' ) ; arg : | | ;. ID '=' STRING ID '=' ANONYMOUS_TEMPLATE ID. // x="..." // x={...}. dict: ID '::=' '[' pairs ']' ; pairs : | ;. keyValuePair ( ',' keyValuePair )* ( ',' defaultValuePair )? defaultValuePair. keyValuePair : STRING ':' keyValue ; keyValue : BIGSTRING | ANONYMOUS_TEMPLATE | STRING | TRUE | FALSE | 'key' ; defaultValuePair : 'default' ':' keyValue ; Tabla 17. 39.
(40) Generador de Código para BBDD Oracle. Oracle Database Express Edition Oracle Database Express Edition es un gestor de base de datos desarrollado por Oracle. Esta versión, es la versión gratuita dirigida a desarrolladores, estudiantes y pequeñas empresas por lo que está capada para ordenadores con un sólo procesador y hasta 1 Gb de RAM. A pesar de las restricciones, el motor es el mismo que las versiones superiores por lo que es recomendable para desarrollo y uso educativo como es nuestro caso [9]. Oracle fue fundada en 1977 con el nombre Software Development Laboratories, poco después obtiene un contrato con la CIA para el desarrollo de una base de datos, ese proyecto recibió el nombre de “Oracle”. Así es como surge el gestor de base de datos. Oracle ha ido creando un gran número de versiones de su gestor de base de datos añadiendo características y mejorando su funcionamiento hasta llegar a la última versión que existe en la actualidad, Oracle 12c. Como la mayoría de los gestores de base de datos actuales, guarda la información relativa a las bases de datos que gestiona en la propia base de datos, esas tablas donde está guardada la información son únicamente accesibles para el administrador o los usuarios a los que haya dado permisos.. 40.
(41) Generador de Código para BBDD Oracle. El diagrama de las tablas y sus relaciones sería el siguiente (se han omitido varias columnas en el diagrama dejando sólo los más importantes) [10]:. Ilustración 6. 41.
(42) Generador de Código para BBDD Oracle. ALL_TABLES Esta tabla contiene todas las tablas de las bases de datos. Sus columnas son:. Columna. Tipo dato. NULL. Descripción. OWNER. VARCHAR2(30). NOT. Propietario de la tabla. NULL TABLE_NAME. VARCHAR2(30). NOT. Nombre de la tabla. NULL TABLESPACE_NAME. VARCHAR2(30). Nombre del tablespace que contiene la tabla. CLUSTER_NAME. VARCHAR2(30). Nombre del cluster al que pertenece la tabla. IOT_NAME. VARCHAR2(30). Nombre del index‐organized tables. STATUS. VARCHAR2(8). Indica el estado de la tabla, si se ejecutó un DROP TABLE anteriormente el estado de la tabla será UNUSABLE, en caso contrario VALID. PCT_FREE. NUMBER. Porcentaje de espacio libre. PCT_USED. NUMBER. Porcentaje de espacio usado. INI_TRANS. NUMBER. Número inicial de transacciones. MAX_TRANS. NUMBER. Número máximo de transacciones. INITIAL_EXTENT. NUMBER. Tamaño inicial de la extensión.. NEXT_EXTENT. NUMBER. Tamaño de la siguiente extensión. MIN_EXTENTS. NUMBER. Número mínimo de extensiones. MAX_EXTENTS. NUMBER. Máximo número de extensiones. PCT_INCREASE. NUMBER. Porcentaje del incremento del tamaño de la extensión. 42.
(43) Generador de Código para BBDD Oracle. FREELISTS. NUMBER. Número de procesos freelist asignados al segmento. FREELIST_GROUPS. NUMBER. Número de grupos de freelist asignados al segmento. LOGGING. VARCHAR2(3). Indica si deben ser registrados o no los cambios de la tabla.. BACKED_UP. VARCHAR2(1). Indica si la tabla ha sido respaldada desde la última modificación. NUM_ROWS. NUMBER. Número de filas de la tabla. BLOCKS. NUMBER. Número de bloques de datos usados por la tabla. EMPTY_BLOCKS. NUMBER. Número de bloques vacíos. AVG_SPACE. NUMBER. Media de espacio libre de la tabla. CHAIN_CNT. NUMBER. Número de filas que se han encadenado de un bloque a otro.. AVG_ROW_LEN. NUMBER. Tamaño medio en bytes de las filas. AVG_SPACE_. NUMBER. La media del espacio vacío de todos los. FREELIST _BLOCKS NUM_FREELIST_. bloques NUMBER. Número de bloques de la freelist. DEGREE. VARCHAR2(10). Número de hilos que escanean la tabla. INSTANCES. VARCHAR2(10). Número de instancias a través de las cuales. BLOCKS. va a ser escaneada la tabla CACHE. VARCHAR2(5). Indica si la tabla va a ser cacheada o no. TABLE_LOCK. VARCHAR2(8). Indica si la tabla está bloqueada o no. 43.
(44) Generador de Código para BBDD Oracle. SAMPLE_SIZE. NUMBER. Tamaño de la muestra utilizado para el análisis. LAST_ANALYZED. DATE. Fecha de la última sincronización. PARTITIONED. VARCHAR2(3). Indica si la tabla está particionada o no. IOT_TYPE. VARCHAR2(12). Si la tabla es un tabla index‐organizated, esta columna indica el tipo de IOT_TYPE. TEMPORARY. VARCHAR2(1). Indica si la tabla es temporal o no. SECONDARY. VARCHAR2(1). Indica si la tabla es secundaria o no. NESTED. VARCHAR2(3). Indica si la tabla es anidada. BUFFER_POOL. VARCHAR2(7). Indica el tipo de buffer:. ROW_MOVEMENT. VARCHAR2(8). ●. DEFAULT. ●. KEEP. ●. RECYCLE. ●. NULL. Indica si el partitioned row movement está activo. GLOBAL_STATS. VARCHAR2(3). Para tablas particionadas indica si las estadísticas son globales o se estimaron sobre las particiones y subparticiones. USER_STATS. VARCHAR2(3). Indica si las estadísticas son introducidas por el usuario. DURATION. VARCHAR2(15). Indica la duración de la tabla en caso de ser temporal. SKIP_CORRUPT. VARCHAR2(8). Indica si el gestor de base de datos debe ignorar los bloques corruptos o de generar un error. MONITORING. VARCHAR2(3). Indica si la tabla debe ser monitorizada o no. CLUSTER_OWNER. VARCHAR2(30). Propietario del cluster donde se encuentra. 44.
(45) Generador de Código para BBDD Oracle. alojada la tabla DEPENDENCIES. VARCHAR2(8). Indica si row‐level dependency tracking está activo. COMPRESSION. VARCHAR2(8). Indica si la compresión está activa o no. COMPRESS_FOR. VARCHAR2(18). Indica las operaciones sobre las que se realiza la compresión:. DROPPED. VARCHAR2(3). ●. DIRECT LOAD ONLY. ●. FOR ALL OPERATIONS. ●. NULL. Indica si la tabla ha sido borrada Tabla 18. 45.
(46) Generador de Código para BBDD Oracle. ALL_TAB_COLUMNS Esta tabla contiene todas las columnas de las tablas de la base de datos:. Column. Datatype. NULL. Description. OWNER. VARCHAR2(30). NOT NULL. Dueño de la vista. TABLE_NAME. VARCHAR2(30). NOT NULL. Nombre de la tabla. COLUMN_NAME. VARCHAR2(30). NOT NULL. Nombre de la columna. DATA_TYPE. VARCHAR2(106). Tipo de dato de la columna. DATA_TYPE_MOD. VARCHAR2(3). Modificador del tipo de dato de la columna. DATA_TYPE_OWNER. VARCHAR2(30). Propietario del tipo de dato de la columna. DATA_LENGTH. NUMBER. DATA_PRECISION. NUMBER. Número de dígitos totales que admite la columna cuyo tipo de datos sea NUMBER. DATA_SCALE. NUMBER. Dígitos a la derecha a partir de la coma. NULLABLE. VARCHAR2(1). Indica si la columna puede ser NULL o no. COLUMN_ID. NUMBER. Identificador de la columna. DEFAULT_LENGTH. NUMBER. Tamaño del valor por defecto. DATA_DEFAULT. LONG. Valor por defecto. NUM_DISTINCT. NUMBER. Número de los posibles diferentes valores. LOW_VALUE. RAW(32). Valor mínimo de la columna. HIGH_VALUE. RAW(32). Valor máximo de la columna. DENSITY. NUMBER. Densidad de la columna. NUM_NULLS. NUMBER. Número de nulos en la columna. NUM_BUCKETS. NUMBER. Número de buckets de la columna. LAST_ANALYZED. DATE. Fecha del último analyze. NOT NULL. 46. Tamaño de la columna en bytes.
(47) Generador de Código para BBDD Oracle. SAMPLE_SIZE. NUMBER. Tamaño de la muestra utilizada para el analyze. CHARACTER_SET_NAME. VARCHAR2(44). Nombre del character set: CHAR_CS o NCHAR_CS. CHAR_COL_DECL_LENGT H. NUMBER. Longitud. GLOBAL_STATS. VARCHAR2(3). Para tablas particionadas indica si las estadísticas de la columna son globales o se estimaron sobre las particiones y subparticiones. USER_STATS. VARCHAR2(3). Indica si las estadísticas son introducidas por el usuario. AVG_COL_LEN. NUMBER. Tamaño medio de la columna. CHAR_LENGTH. NUMBER. Longitud de la cadena. Este valor sólo es válido para estos tipos de datos: ● CHAR. CHAR_USED. VARCHAR2(1). ●. VARCHAR2. ●. NCHAR. ●. NVARCHAR. Indica si la longitud es en bytes o en carateres. V80_FMT_IMAGE. VARCHAR2(3). Indica si la imagen tiene el formato de imagen 8.0. DATA_UPGRADED. VARCHAR2(3). Indica si los datos de la columna están actualizados a la última versión del formato.. HISTOGRAM. VARCHAR2(15). Indica el tipo de histogram: ● NONE. Tabla 19. 47. ●. FREQUENCY. ●. HEIGHT BALANCED.
(48) Generador de Código para BBDD Oracle. ALL_CONSTRAINTS Tabla que contiene las constraint de la base de datos:. Column. Datatype. NULL. Description. OWNER. VARCHAR2(30). NOT. Propietario de la restricción. NULL CONSTRAINT_NAME. VARCHAR2(30). NOT. Nombre de la restricción. NULL CONSTRAINT_TYPE. VARCHAR2(1). Tipo de restricción::. ●. C (check constraint). ●. P (clave primaria). ●. U (clave única). ●. R (integridad referencial). ●. V (con check option, en una vista). ● TABLE_NAME. SEARCH_CONDITION. VARCHAR2(30). O (sólo lectura en una vista). NOT. Nombre de la tabla a la que hace. NULL. referencia la restricción. LONG. Texto de la condición de búsqueda de la restricción de check. R_OWNER. VARCHAR2(30). Propietario de la tabla a la que hace referencia la restricción. R_CONSTRAINT_NAME. VARCHAR2(30). Nombre de la restricción única que hace referencia a la tabla. DELETE_RULE. VARCHAR2(9). Regla de borrado de la restricción referencial (CASCADE o NO ACTION). STATUS. VARCHAR2(8). Estado de la restricción (ENABLED o DISABLED). DEFERRABLE. VARCHAR2(14). Indica si la restricción es diferible. DEFERRED. VARCHAR2(9). Indica si la restricción inicialmente está. 48.
(49) Generador de Código para BBDD Oracle. diferida VALIDATED. VARCHAR2(13). Indica si todos los datos cumplen la restricción (VALIDATED o NOT VALIDATED). GENERATED. VARCHAR2(14). Indica si la restricción fue creada por el usuario o por el sistema. BAD. VARCHAR2(3). Indica que la restricción está escrita de forma ambigua. RELY. VARCHAR2(4). LAST_CHANGE. DATE. Fecha de último cambio de la restricción. INDEX_OWNER. VARCHAR2(30). Nombre del dueño del índice. INDEX_NAME. VARCHAR2(30). Nombre del índice. INVALID. VARCHAR2(7). Indica si la restricción es inválida. VIEW_RELATED. VARCHAR2(14). Indica si la restricción depende de una vista Tabla 20. 49.
(50) Generador de Código para BBDD Oracle. ALL_CONS_CONSTRAINT Tabla que contiene las columnas de cada constraint.. Column. Datatype. NULL. Description. OWNER. VARCHAR2(30). NOT. Dueño de la restricción. NULL CONSTRAINT_NAME. VARCHAR2(30). NOT. Nombre de la restricción. NULL TABLE_NAME. VARCHAR2(30). NOT. Nombre de la tabla. NULL COLUMN_NAME. VARCHAR2(4000). Nombre de la columna a la que le afecta la restricción. POSITION. NUMBER. Posición de la columna en la restricción Tabla 21. 50.
(51) Generador de Código para BBDD Oracle. Herramientas utilizadas Google Drive Google Drive es un servicio de almacenamiento de archivos en internet, el cual es accesible desde casi cualquier plataforma (Android, Windows, Mac, Linux…), siendo tan sólo necesario una conexión a internet [11]. Dentro de esta herramienta desarrollada por Google, se encuentra Google Docs, que es un procesador de texto online y gratuito, que guarda los documentos generados en el propio Google Drive siendo posible acceder a ellos al igual que con Google Drive desde cualquier plataforma. Estos documentos pueden ser compartidos y observar los cambios entre diferentes versiones. Para el desarrollo del proyecto se va a utilizar Google Drive, tanto para almacenar el código fuente de la herramienta a desarrollar, como para guardar y editar los diferentes documentos necesarios del trabajo fin de carrera, como son la memoria, el sprint backlog, pruebas de integración, etc.. 51.
(52) Generador de Código para BBDD Oracle. Draw.io Es un programa de dibujo desarrollado por JGraph que se integra en Google Docs que permite hacer de diagramas tipo UML, diagramas de flujo, diagramas de entidad relación, etc [12].. Ilustración 7. Debido a su buena integración con Google Drive en el proyecto va a utilizar para realizar los diferentes diagramas y así integrarlos dentro de los documentos.. 52.
(53) Generador de Código para BBDD Oracle. Web sequence diagrams Al igual que las anteriores herramientas, esta herramienta también es una herramienta gratuita y online que se utiliza, como indica su nombre, para la generación de diagramas de secuencia. La utilización de esta herramienta es sencilla, tan sólo se debe escribir en la parte izquierda de la pantalla los diferentes pasos del diagrama de secuencia utilizando una nomenclatura propia y el diagrama se va generando en la parte de la derecha de la pantalla [13].. Ilustración 8. Se decidió utilizar esta herramienta debido a su facilidad de uso, que se podía utilizar en cualquier plataforma y que los datos estaban guardados en la nube por lo que se podía utilizar en cualquier momento.. 53.
(54) Generador de Código para BBDD Oracle. Eclipse Un entorno de desarrollo integrador o IDE (sigla en inglés de integrated Development Environment) es un programa compuesto por diferentes herramientas de programación que las centralizan en el mismo programa facilitando así la programación. Normalmente está compuesto como mínimo por un editor de texto, un compilador y depurador, aunque en la actualidad los IDEs han ido añadiendo muchas más funcionalidades desde la generación de un web service a través de un wsdl como la creación de la interfaz gráfica de una página web [14]. Para este proyecto se ha decidido usar como IDE Eclipse, que es un entorno de desarrollo de propósito general. Desarrollado por IBM, en sus orígenes nació como el sucesor de Visual Age, pero al cabo de los años se creó una organización sin ánimo de lucro para que se encargara de ella y a la vez promoviera el software libre. Actualmente está bajo la licencia Eclipse Public License, que es una licencia de software libre aunque incompatible con GPL. Posiblemente sea el IDE más extendido en la actualidad, debido a que ya no es sólo un entorno de desarrollo para Java sino que también existe la posibilidad de desarrollar en otros lenguajes como C, Ruby, PHP, etc. Una de sus principales características son los plugins, que son complementos independientes que se acoplan a Eclipse para darle una funcionalidad extra que antes no tenía. Esto hace que Eclipse sea muy versátil pudiéndose adaptar a cualquier circunstancia con tan sólo instalar los plugins necesarios para ese desarrollo.. 54.
(55) Generador de Código para BBDD Oracle. Desarrollo Como se indicó anteriormente se va a utilizar la metodología de desarrollo Scrum, pero al ser un trabajo fin de carrera, los diferentes actores que intervienen en esta metodología no están presentes, por lo que todos serán representados por la misma persona. Primera iteración Reunión de planificación (Sprint Planning) En esta primera reunión el Product Owner define el product backlog que indicará los requisitos iniciales del producto: Requisito. Descripción. Estado. REQ1. Recolección de los metadatos de la BBDD. Pendiente. REQ2. Creación de la clase de negocio. Pendiente. REQ3. Generación de xsd de una tabla. Pendiente. REQ4. Generación de un bean java. Pendiente Tabla 22. REQ1: Se deberá generar una estructura en memoria que almacene toda la información de la antigua base de datos, sus tablas, sus columnas, los tipos de éstas, sus claves primarias y sus claves foráneas. REQ2: Se deberá generar una clase de negocio, por cada tabla. Esta clase de negocio estará vacía de contenido y se generará para que las personas que vayan a utilizar toda esta estructura de clases metan ahí la lógica de su negocio. REQ3: Se deberá generar un xsd por cada tabla que representará a esta. Estos xsd definirán las columnas con sus tipos de datos y sus claves. REQ4: Se deberá de generar una clase java que represente a cada una de las tablas. Esa clase tendrá como atributos las columnas y claves, y serán del tipo correspondiente con la Base de datos.. 55.
(56) Generador de Código para BBDD Oracle. Después de definir el product backlog se procede a decidir con el product owner qué requisitos se realizarán en este primer sprint. El primer requisito que se debe realizar es la obtención de los metadatos de la base de datos ya que los demás requisitos dependen de él. En esta segunda parte de la reunión, el equipo tiene que definir las diferentes tareas que serán necesarias para poder realizar el requisito antes de finalizar el sprint. Estas tareas quedarán plasmadas en el sprint backlog. Tarea. Descripción. Fecha prevista de fin. Fecha de fin. Estado. Creación de Máquina Virtual con una BBDD T1. Oracle. 1/11/2013. 1/11/2013. Finalizado. 7/11/2013. 7/11/2013. Finalizado. Finalizado. Creación de la estructura de clases donde van a ser almacenados los T2. metadatos Obtención de los datos de. T3. las tablas. 15/11/2013. 15/11/2013. T4. Pruebas de integración. 17/11/2013. 18/11/2013. Tabla 23. T1 ‐ Máquina Virtual Windows XP y Oracle Database Express Edition Debido a que entorno en el que se va a trabajar es un ordenador MAC y no existe para ése sistema operativo Oracle Database Express Edition, es necesario crear una máquina virtual para poder virtualizar una máquina con el sistema operativo Windows XP y en él instalado esa base de datos. El primer paso es instalar el sistema operativo para posteriormente, instalar la base de datos. Al no necesitar ninguna opción especial la base de datos, ya que su uso va a ser simplemente para consultar su catálogo de datos, se dejan todas las opciones que vienen por defecto en el wizard. Una vez instalada, se procede a instalar el SQL Developer y a activar la base de datos que viene de ejemplo, ya que inicialmente está deshabilitada.. 56.
(57) Generador de Código para BBDD Oracle. T2 ‐ Creación de la estructura de clases donde van a ser almacenados los metadatos Diagrama de clases donde se almacenarán los metadatos de la base de datos:. Ilustración 9. Table La clase Table representará a las tablas de la base de datos y tendrá como atributos tanto sus columnas como sus constraint. Constraint Representa a las constraint. Contendrá su nombre, alias y tipo, también el nombre de la columna a la que pertenece la constraint. Column Representa a las columnas. Contiene el nombre de la columna, alias, tipo de dato, precisión del dato, escala, longitud y si puede ser nulo o no.. 57.
(58) Generador de Código para BBDD Oracle. T3 Obtención de los datos de las tablas En esta tarea se deberá diseñar y desarrollar el módulo que obtenga los datos de la base de datos y los guarde en la estructura de clases diseñada en la tarea anterior. El diagrama de secuencia a alto nivel es el siguiente:. Ilustración 10. 58.
(59) Generador de Código para BBDD Oracle. Los pasos serán los siguientes: 1. El Generador obtendrá la configuración de éste. Entre los datos obtenidos, uno de ellos será las tablas que se quieren tratar. 2. El generador por cada tabla llamará al GeneradorTablas para obtener todos los datos de esa tabla. 3. El GeneradorTablas en primer lugar obtendrá las columnas. 4. Éste consultará en la tabla ALL_TAB_COLUMNS, las columnas de la tabla. 5. Devolverá un Resultset con los datos de todas las columnas. 6. Se creará un objeto Column por cada fila del Resulset y se devolverá una lista de columnas. 7. Ahora el GeneradorTablas obtendrá las constraint. 8. Éste consultará la tabla ALL_CONSTRAINTS para obtener todas las constraint de esa tabla. 9. Devolverá un Resultset con las constraint. 10. Se creará un objeto Constraint por cada fila del Resulset y se devolverá una lista de constraint. 11. Devolverá un objeto Table con todos sus datos. Pruebas unitarias Para las pruebas unitarias se utilizará el framework junit como se indicó anteriormente, creando las siguiente pruebas con sus resultados: Test de configuración: Arrancar la aplicación con unos argumentos de configuración correctos. Arrancar la aplicación con unos argumentos de configuración incorrectos. Arrancar la aplicación sin argumentos de configuración. Test de obtención de datos de una tabla. Obtención de datos de una tabla con una columna de tipo numérico. Obtención de datos de una tabla con una columna de tipo texto. Obtención de datos de una tabla con una columna de tipo fecha. Obtención de datos de una tabla con varias columna de tipo numérico, texto y fecha. Obtención de datos de una tabla con una constraint. Obtención de datos de una tabla con varias constraints.. 59.
(60) Generador de Código para BBDD Oracle. T4 Pruebas de integración Para las pruebas de integración se generaron los siguientes test. ID. Titulo. Descripción. Resultado esperado. 1. Configuración correcta. Arrancar la aplicación con la configuración:. La aplicación arranque y se pare sin producir ningún error. ‐properties /Users/prueba/Google\\ Drive/TFC/JCelsig/properties/generador.propert ies ‐fileTables /Users/prueba/Google\\ Drive/TFC/JCelsig/plantillas/ListadoTablas.txt Siendo los path correctos. 2. Configuración incorrecta. Arrancar la aplicación con la configuración:. 3. Configuración vacía. Arrancar la aplicación sin ningún argumento.. 4. Obtención de Arrancar la aplicación indicando en el fichero de datos de una las tablas a exportar que se deben extraer los datos de la tabla COUNTRIES de la base de datos tabla de test.. ‐propert iuasdiuf. La aplicación al arrancar muestra un error indicando que la configuración es incorrecta y se detiene La aplicación al arrancar muestra un mensaje indicando que es necesaria indicar una configuración y se detiene La aplicación obtendrá los datos de la tabla y mostrará por el log las columnas y sus constraint: COUNTRY_ID COUNTRY_NAME REGION_ID COUNTRY_C_ID_PK. 60.
Outline
Documento similar
El nuevo Decreto reforzaba el poder militar al asumir el Comandante General del Reino Tserclaes de Tilly todos los poderes –militar, político, económico y gubernativo–; ampliaba
Para ello, trabajaremos con una colección de cartas redactadas desde allí, impresa en Évora en 1598 y otros documentos jesuitas: el Sumario de las cosas de Japón (1583),
Habiendo organizado un movimiento revolucionario en Valencia a principios de 1929 y persistido en las reuniones conspirativo-constitucionalistas desde entonces —cierto que a aquellas
The part I assessment is coordinated involving all MSCs and led by the RMS who prepares a draft assessment report, sends the request for information (RFI) with considerations,
Ciaurriz quien, durante su primer arlo de estancia en Loyola 40 , catalogó sus fondos siguiendo la división previa a la que nos hemos referido; y si esta labor fue de
En este sentido, puede defenderse que, si la Administración está habilitada normativamente para actuar en una determinada materia mediante actuaciones formales, ejerciendo
En la parte central de la línea, entre los planes de gobierno o dirección política, en el extremo izquierdo, y los planes reguladores del uso del suelo (urbanísticos y
Para recibir todos los números de referencia en un solo correo electrónico, es necesario que las solicitudes estén cumplimentadas y sean todos los datos válidos, incluido el