Capítulo 6. Integrando la Aplicación Web con la Capa de Persistencia

Esta es la Parte 6 del tutorial paso a paso sobre como desarrollar una aplicación web desde cero usando Spring Framework. En la Parte 1 hemos configurado el entorno y puesto en marcha una aplicación básica. En la Parte 2 hemos mejorado la aplicación que habíamos construido hasta entonces. En la Parte 3 hemos añadido toda la lógica de negocio y los tests unitarios, y en la Parte 4 hemos desarrollado la interface web. En la Parte 5 hemos desarrollado la capa de persistencia. Ahora es el momento de integrarlo todo junto en una aplicación web completa.

6.1. Modificar la Capa de Servicio

Si hemos estructurado nuestra aplicación adecuadamente, sólo tenemos que cambiar la capa de servicio para que haga uso de la persistencia en base de datos. Las clases de la vista y el controlador no tienen que ser modificadas, puesto que no deberían ser conscientes de ningún detalle de la implementación de la capa de servicio. Así que vamos a añadir persistencia a la implementación de ProductManager. Crea la clase JPAProductManager y añade una referencia a la clase ProductRepository. El método getProducts usará ahora este DAO para recuperar la lista de productos. Finalmente, el método increasePrices recuperará la lista de productos y, después de haber incrementado los precios, almacenará los productos de nuevo en la base de datos usando el método save definido en el DAO.

'springapp/src/main/java/com/companyname/springapp/business/services/JPAProductManager.java':

package com.companyname.springapp.business.services;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.companyname.springapp.business.entities.Product;
import com.companyname.springapp.business.repositories.ProductRepository;

@Service
public class JPAProductManager implements ProductManager {

    @Autowired
    private ProductRepository productRepository;

    public List<Product> getProducts() {
        return (List<Product>) productRepository.findAll();
    }

    public void increasePrice(int percentage) {
        List<Product> products = (List<Product>) productRepository.findAll();
        if (products != null) {
            for (Product product : products) {
                double newPrice = product.getPrice().doubleValue() * 
                                    (100 + percentage)/100;
                product.setPrice(newPrice);
                productRepository.save(product);
            }
        }  
    }
}

6.2. Test final de la aplicación completa

Ahora es el momento de ver si todas estas piezas funcionan juntas. Construye y despliega la aplicación finalizada y recuerda tener la base de datos arrancada y funcionando. Esto es lo que deberías ver cuando apuntes tu navegador web a la aplicación:

La aplicación completa

La aplicación aparece exactamente como lo hacía antes. Sin embargo, hemos añadido la persistencia en base de datos, por lo que si cierras la aplicación tus incrementos de precio no se perderán sino que estarán todavía allí cuando vuelvas a cargar la aplicación.

6.3. Resumen

Hemos completado las tres capas de la aplicación -- la capa web, la capa de servicio y la capa de persistencia. En esta última parte hemos reconfigurado la aplicación.

  1. Primero hemos modificado la capa de servicio para usar la interface ProductRepository.

  2. Finalmente hemos desplegado la aplicación y testeado que aún funciona.

A continuación puedes ver una captura de pantalla que muestra el aspecto que debería tener la estructura de directorios del proyecto después de seguir todas las instrucciones anteriores.