Skip to content

idavid80/acceso_datos_2

Repository files navigation

Ejercicio Acceso a Datos.

📚 Indice

Requisitos

  1. Uso de Base de Datos Objeto Relacional - ObjectDB
  2. Uso de Base de Datos XML - ExistDB
  3. Uso de Base de Datos NoSQL - MongoDB
  4. Creación de documentos PDF con JasperReports
  5. Uso de HashMap
  6. Para cada una de las bases de datos, utilizar al menos una clase que contenga un atributo con una lista de otra clase (como los ejemplos que hemos hecho en clase)
  7. Documentación: Explicación de los nuevos módulos desarrollados, o en caso de ser una aplicación nueva, de toda la aplicación. Y debe ser en PDF.
  • Los trabajos que se entreguen en grupo, los requisitos deben ser dobles, es decir, ambas personas deben hacer un módulo con cada una de los requisitos pedidos.
  • Video explicativo de la aplicación mostrando su uso y cómo se ha desarrollado. Tiempo máximo: 5 minutos.

Video: Demo

Para ver los videos de la app en funcionamiento, puede pulsar en las siguientes imagenes de la tabla.

Base de Datos Vídeo
ExistDB ExistDB
ObjectDB ObjectDB ObjectDB
MongoDB MongoDB
JasperSoft JasperSoft

Solución planteada para el ejercicio

Base de datos existDB (XML)

Realizar una base de datos a partir de una api que nos genere preguntas, con una lista de posibles respuestas, que nos permita obtener unos test para examenes. Ver el Repositorio de la API

Bases de datos ObjectDB (Objeto relacional)

Relizar una base de datos de alumnos de un centro de formación, el curso que realizan y una lista de las asgnaturas de cada curso. La creación de los alumnos y asignaturas se realizarán por peticiones al controllador. En este ejercicio se utilizará estructura de datos HashMap (requisito punto 5 del ejercicio) para obtener un filtro y estructura de asignaturas por curso.

MongoDB

Obtener una base de datos de los alumnos, el curso y que almacene una lista de las notas obtenidas por asignaturas y su calificación media por asignatura. Los datos de los alumnos y las asignaturas así como la de los cursos se obtendrán de la base de datos ObjectDB que tiene este proyecto.

Jasper Report

Realizar un informe con una lista de los alumnos de la base de datos objectDB y de las asignaturas que estén cursando.

Dependencias SpringBoot

Base de datos existDB

Ver dependencias
	<!-- Repositorios para existDB -->
<repositories>
	<repository>
		<id>xqj</id>
		<name>XQJ Maven Repository</name>
		<url>http://xqj.net/maven</url>
	</repository>
</repositories>
<dependencies>
	<dependency>
		<groupId>net.sf.xmldb-org</groupId>
		<artifactId>xmldb-api</artifactId>
		<version>1.7.0</version>
	</dependency>
	<dependency>
		<groupId>org.exist-db</groupId>
		<artifactId>exist-core</artifactId>
		<version>5.0.0</version>
		<scope>runtime</scope>
	</dependency>
	<dependency>
		<groupId>com.xqj2</groupId>
		<artifactId>xqj2</artifactId>
		<version>0.1.0</version>
	</dependency>
	<dependency>
		<groupId>javax.xml.xquery</groupId>
		<artifactId>xqj-api</artifactId>
		<version>1.0</version>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web-services</artifactId>
	</dependency>
</dependencies>

Bases de datos ObjectDB

Ver dependencias
<dependency>
	<groupId>com.objectdb</groupId>
	<artifactId>objectdb</artifactId>
	<version>2.8.5</version>
</dependency>
<dependency>
	<groupId>org.eclipse.persistence</groupId>
	<artifactId>javax.persistence</artifactId>
	<version>2.1.0</version>
</dependency>
<dependency>
	<groupId>javax.transaction</groupId>
	<artifactId>jta</artifactId>
	<version>1.1</version>
</dependency>

MongoDB

Ver dependencias
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

JasperReports

Ver dependencias
<!-- JasperReport -->
<dependency>
	<groupId>net.sf.jasperreports</groupId>
	<artifactId>jasperreports</artifactId>
	<version>6.20.0</version>
</dependency>

Colaboraciones

Este trabajo ha sido realizado de forma individual.

Instalaciones

eXistDB

Instalar eXistDB en Ubuntu

descargar archivo ‘exist-installer-6.2.0.jar’

y ejecutar

java -jar exist-installer-6.2.0.jar

La instalación por defecto es usuario admin y sin contraseña.

Inicialización

Comandos

java -jar start.jar

sudo sh startup.sh

Important

La aplicacion se despliega en: http://localhost:8080/exist/apps/dashboard/index.html

La ruta de instalación en Linux es: /usr/local/eXist-db/

ObjectDB

Instalación

Descargar, abrir carpeta bin donde se encuentran los archivos necesarios.

Para conectar el servicio ejecutar los archivos server.sh o objectdb.jar

sudo sh server.sh start

sudo java -jar objectdb.jar

Para entrar en el interfaz gráfico de la base de datos, ejecutar el archivo explorer.jar.

sudo java -jar explorer.jar

MongoDB

Descarga, instalación y ejecución en Linux. Otros sistemas,

wget https://downloads.mongodb.com/compass/mongodb-compass_1.40.4_amd64.deb sudo dpkg -i mongodb-compass_1.40.4_amd64.deb mongodb-compass

Note

Para otros sistemas operativos puede consultar la página oficial de mongo. ver en documentación oficial

Es posible que necesitemos instalar mongodb si queremos trabajar en local. Ver guia de instalación

Inicializar MongoDB

sudo service mongod stop

Estructura

Estructura Archivos

El proyecto tiene una estructura de 7 paquetes y una carpeta.

Los paquetes están clasificados de la siguiente forma:

  1. datos: Contiene el archivo con la clase main de la aplicación de springboot.

  2. collection: Contiene las clases de las colecciones de MongoDB.

    • Calificacion: Esta colección está comentada porque se utilizará para una futura funcionalidad.
    • Curso: colección que almacenará el nombre del curso y las asignaturas que contiene
    • Estudiante: Entidad con el nombre del alumno y el curso que está realizando.
  3. controller: Contiene las clases controladores de la aplicación. En este caso, sería un archivo por tarea:

    • ControllerJasper.
    • ControllerMongoDB.
    • ControllerObjectDB.
    • ControllerXML.
  4. entities: Almacena las entidades necesaria para el proyecto. Las clases entidades son:

    • Alumno y Asignatura para la base de datos de objectDB, de la cual van a utilizar mongoDB y JasperSoft.
    • Pregunta y Respuesta que obtendrán los datos de la API externa.
    • PreguntaTest y RespuestaTest que contendrán las anotaciones necesarías para conectar con la base de datos XML.
  5. repository: éste paquete está compuesto por las clases:

    • ApiRepository, que es la que se utiliza para conectar con la API externa al proyecto de la cual se obtienen los test para la base de datos XML.
    • RepositoryObjectDB que conecta con la base de datos de ObjectDB.
    • RepositoryXML, la cual es la que establece las conexiones y peticiones con ExistDB.
    • RepositoryObject que fue creada inicialmente para establecer conexiones con la base de datos ObjectDB, pero se ha dejado comentada porque para que el proyecto pueda funcionar sin generar problemas de conexiones entre las 3 bases de datos.
  6. repository.mongoDB: paquete con los interfaces que conectan con la base de datos de mongoDB.

    • CalificacionRepository: Este interfaz está comentada porque se utilizará para una futura funcionalidad.
    • CursoRepository: interfaz para realizar peticiones con la colección Curso.
    • EstudianteRepository: interfaz para realizar peticiones con la colección Estudiante
  7. service: paquete que almacena los servicios de la aplicacion. contiene las siguientes clases:

    • ServiceJasper: contiene el método generarInforme para crear archivos .pdf con una lista de alumnos y curso que están estudiando.
    • ServiceMongoDB: Interfaz que establece los servicios de crearEstudiante, crearCurso, getCursoByEstudiante, getAsignaturaEstudiante y getAll (obtiene todo los datos por estudiantes).
    • ServiceMongoDBImpl: Clase que implementa los interfaces de ServiceMongoDB.
    • ServiceObjectDB: interfaz de servicio de los métodos crearAsignatura, mostrarAsignatura, hashMapCurso, getAllAsignaturaByCurso, getAsignaturaByCurso, insertarAlumno y mostrarAlumnos.
    • ServiceObjectDBImpl: Clase que implementa los interfaces de ServiceObjectDB.
    • ServiceXML: interfaz de servicio de los métodos testXML (obtenemos un XML de los datos de la API), getTestBD (obtenemos los datos de ExistDB), insertar (almacena los datos en la base de datos) y crearArchivoXML.
    • ServiceXMLImpl: Clase que implementa los interfaces de ServiceXML.

La carpeta del proyecto es db, en la cual se almacenará la base de datos de objectDB, y los archivos .xml y .pdf que crea la aplicación.

Endpoint del proyecto

XML

Ver Endpoint

obtener-test-xml

insertar xml

obtener respuesta API

get-bbdd-test

get-api

crear-archivo

get-api

ObjectDB

Ver Endpoint

crear-asignatura

mostrar-asignatura

crear-alumno

mostrar-alumno

mostrar-hashmap

mostrar-todas-asignaturas-cursos

mostrar asignaturas por cursos

MongoDB

Ver Endpoint

prueba

crear-estudiante

crear-curso

all-estudiante

curso-estudiante id

Jasper

Ver Endpoint

http://localhost:8000/jasper/prueba

  • Metodo: POST

Información del proyecto

ExistDB

Para esta tarea, es necesarío tener levantada la api desde la que se extraen las preguntas. Es posible descargar la api desde el este repositorio. Las funciones de este proyecto, permite generar un archivo xml desde la api, insertarlo en la base de datos existDB y realizar consultas sobre la API y la base de datos. El archivo .xml creado, se almacena en la carpeta db del proyecto.

ObjectDB

Para esta tarea lo más apropiado, quizás sería crear tres Clases Entity (Asignatura, Curso y Asignatura) con la anotaciónes ManyToOne y OneToMany.

Pero nosotros vamos a crear otra estructura para poder darle uso al HasMap. Con nuestra estructura, sólo vamos a necesitar dos clases. La primera, será una clase Asignatura, que guardará el nombre de la asignatura y el curso a la que pertenece. La segunda entidad, será una clase alumno que almacenará el nombre del alumno, el curso que está estudiando y una lista de string de las asignaturas (también se podría haber creado una lista de la clase Asignatura)

En la aplicación se puede almacenar los datos de alumnos, cursos y asignaturas, a través por peticiones a través de sus endpoints. La base de datos se almacena en la carpeta db del proyecto.

MongoDB

Para nuestro modelo de mongoDB vamos a crear dos colecciones que van a estar dentro del paquete paquete collection. Una colección es Curso donde se almacenará una lista de asignatura por curso. La otra colección es Estudiante, que almacenará el nombre del alumno y la colección Curso. Los datos de los estudiantes, así como el de los cursos que realizan y sus asignaturas, son extraidos de la base de datos de objectDB, que están almacenados en la carpeta db del proyecto.

Conclusiones

El proyecto esta terminado, funcionando y cumple con los requisitos mínimos exigidos. Aún así, quedan pendiente muchas mejoras, así como la implementación de estructuras de control que no permitan crear duplicidades en la base de datos, crear métodos de testeo de la aplicación, etc.

Problemas destacados:

  • obtención de calores null en peticiones con ExistDB, es posible que el prolema esté con las anotaciones de XML, o en la query por xpath.
  • Implementación sin terminar de mongoDB al no implementar metodos aggregate o match para poder establecer una mejor muestra en la obtención de los datos de alumnos.
  • Problema con la extracción de datos de objectDB, obtenemos valores null en la lista de asignaturas. El cambio de lista asignatura por lista string no ha funcionado. Pero el crear una iteración con estructura for con un método System.out.print, ha solucionado el problema 🤔
  • Para ObjectDB he comprobado que existe un tipo de lista LinkedList, que quizás me hubiera venido mejor conocerla al principio del proyecto.

Biografía

Documentacion ExistDB

Documentacion oficial ObjectDB

JasperReport

MongoDB

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

2 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages