Aplicación web usando Spring MVC, Spring Data sobre MongoDB. Testing usando Mongeez and Embedded MongoDB.

Índice

Introducción

En los últimos días he publicado varios artículos sobre mis investigaciones respecto al tema de MongoDB.

En mi experiencia en el mundo de las aplicaciones empresariales construidas con tecnologías Java, me faltaba la la pieza del ODM (Object-Document Mappers) y su integración con Spring, así como la posibilidad de realizar testing de una forma más profesional.

En este artículo pretendo dejar plasmado una aplicación web de ejemplo construida con Spring MVC, Maven en donde la capa de persistencia estará Spring Data sobre MongoDB, que me hará el desarrollo más ágil, fácil y familiar.

Las extensas características de Spring Data las podeis ver en la web del proyecto. Digamos que si estás relacionado con el mundo JPA y Spring, nos crea una capa conocida en base al concepto de Template al igual que lo hacía con otras tecnologías (JMSTemplate, JDBCTemplate, etc.)

Por otra parte, aunque muy poco conocido está Mongeez que es una especie de Liquibase para MongoDB. Se trata de un administrador de cambios de los datos y la estructura de datos, de manera que podemos realizar camnios controlados, que se puedan

El proyecto de ejemplo

Como siempre, para aprender nada mejor que después de consultar la información adecuada ponerla en acción y contruir una pequeña aplicación en donde de forma práctica podamis ir aprendiendo los conocimientos adquiridos.

En esta caso se trata de contruir una aplicación que modeliza el concepto de notas de texto (Note) que poseen una lista de enlaces (Link) de usuarios de diferentes personas (User). Estas clases son Pojos normales que viajan (marshalling/Unmarshalling) entre la capa de persistencia (MongoDB) y la capa de negocio.

La conversión entre ambos mundos (ODM) es realizada transparentemente por Spring Data, a través de MongoMappingConverter y anotaciones.

Las colecciones de la BD donde son leidos o guardados los objetos de negocio por defecto tendrán el mismo nombre que el objeto de negocio en sí, en nuestro caso "note".

Estructura del proyecto de ejemplo

Haz clic en la imagen para ampliarla:

Ejecutando los tests de integración

Ejecuta los test de integración con mvn clean test y verás como se inicia Embedded Mongod y se ejecuta Mongeez para inicializar la BD antes de cada test.

...
...
INFO: try to stop mongod
Thu Mar 21 11:03:24 [initandlisten] connection accepted from 127.0.0.1:50495 #2 (2 connections now open)
[mongod output] Thu Mar 21 11:03:24 [conn2] run command admin.$cmd { shutdown: 1, force: true }
[mongod output] Thu Mar 21 11:03:24 [conn2] terminating, shutdown command received
[mongod output] Thu Mar 21 11:03:24 dbexit: shutdown called
[mongod output] Thu Mar 21 11:03:24 [conn2] shutdown: going to close listening sockets...
[mongod output] Thu Mar 21 11:03:24 [conn2] closing listening socket: 5
[mongod output] Thu Mar 21 11:03:24 [conn2] closing listening socket: 6
[mongod output] Thu Mar 21 11:03:24 [conn2] removing socket file: /tmp/mongodb-37017.sock
[mongod output] Thu Mar 21 11:03:24 [conn2] shutdown: going to flush diaglog...
[mongod output] Thu Mar 21 11:03:24 [conn2] shutdown: going to close sockets...
[mongod output] Thu Mar 21 11:03:24 [conn2] shutdown: waiting for fs preallocator...
[mongod output] Thu Mar 21 11:03:24 [conn2] shutdown: closing all files...
[mongod output] Thu Mar 21 11:03:24 [conn2] closeAllFiles() finished
[mongod output] Thu Mar 21 11:03:24 [conn2] shutdown: removing fs lock...
[mongod output] Thu Mar 21 11:03:24 dbexit: really exiting now

Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.793 sec

Results :

Tests run: 5, Failures: 0, Errors: 0, Skipped: 0
...
...

Ejecutando la aplicación web

Para iniciar la aplicación web deberás de iniciar MongoDB y posteriormente ejecutar mvn tomcat:run y entonces accediendo desde tu navegador verás la pantalla principal de la misma en donde se imprimen todas las notas dadas de alta por Mongeez

Los archivos más importantes del proyecto

Esta aplicación se compone de bastantes archivos, así que para no extenderme sólo veremos los archivos de configuración, repositorios y tests.. claves para una primera visión . El lector podrá descargarse el proyecto y analizar todo más detenidamente.

Los archivos que usa Mongeez para administrar los cambios de la BD, en esta caso los datos de los tests

La potencia del shell para realizar cualquier tipo de cambio indices, nuevos registros, modificicaciones en cada changeset...

/src/test/resources/mongeez-test.xml

/src/test/resources/changeset1-test.xml

Configuración de Spring para la aplicación web:

/src/main/resources/core.xml

El repositorio para trabajo con notas

/src/main/java/es/carlosgarcia/repository/NoteRepository.java

El test del repositorio de trabajo con notas.

/src/test/java/es/carlosgarcia/repository/NoteRepositoryTest.java

Configuración de Spring para los tests:

/src/test/resources/app-test.xml

El pom.xml de Maven:

Descargar código fuente

Puedes descargarte el proyecto.

Referencias:

Conclusiones:

Como siempre, me gusta estudiar para poder opinar de primera mano sobre las tecnologías, y puedo decir que contra más conozco de todo este tema de NoSQL dentro de aplicaciones de negocio reales más me convence, haciéndome replantearme los antiguos paradigmas de persistencia...

Spring Data, me ha hecho muy familiar el desarrollo sin practicamente enterarme que por debajo hay otro padarigma de persistencia totalmente distinto.

Además las consultas y operaciones con BD, sencillisimas !!

El siguiente paso a dar, será migrar una aplicación real y ver que sorpresas me encuentro.. de momento espero que os gustado este tutorial.

Un saludo. Carlos García. @cgpcosmad

Categorías del artículo

Comentarios de los lectores