====== Entorno de desarrollo ====== Se utilizará el Spring Tool Suite de la [[https://spring.io/tools/sts/all|página oficial]]. Una vez instalado hay que crear un workspace para trabajar, y dentro de este, se creará un proyecto. ====== Preparación del código ====== Para descargar los componentes del proyecto de una manera rápida se acudirá a [[https://start.spring.io/|spring boot]]. Los campos se informarán de la siguiente manera: * Generate a Maven roject with Java and Spring boot 1.5.4 * Group: com.testSpring * Artifact: demoArtifact * Search for dependencies: * mysql, rest repositories, jpa ====== Base de datos ====== Se utilizará una base de datos de mysql. Para poder acceder hay que configurar el acceso mediante un fichero de propiedades en src\main\resources\application.properties con los datos de la conexión: spring.datasource.url = jdbc:mysql://localhost:3306/secre #spring.datasource.driverClassName = com.mysql.jdbc.Driver spring.datasource.username=root spring.datasource.password=mysql ====== Código java acceso a la base de datos y representación en pantalla ====== ===== Entity ===== Para el acceso a la base de datos hay que crear una entidad que será la encargada de recoger los datos de una tabla del modelo. Esto se hace creando el fichero Secrel_section.java (que es el nombre de la tabla) y se guarda en el directorio src/main/java/com/testSrping/demoArtifact/model. ===== Repositorios ===== Para permitir un Crud se definirá un CrudRepository que extiende el CrudRepository de Spring. Se guardará un SectionRepository en src/main/java/com/testSrping/demoArtifact/repository. El repositorio debe extender de JpaRepository Es posible exponer un repositorio como un servicio mediante la anotación @RepositoryRestResource(itemResourceRel="user", collectionResourceRel = "user", path = "administrators"). Todos los métodos que tengan exposed = true pueden invocarse con el argumento de cada método. Es posible devolver una vista de los datos mediante las proyecciones. Únicamente las he hecho funcionar mediante compilación, no mediante invocación ?projection=p en la url Hará falta sustituir la línea anterior por @RepositoryRestResource(itemResourceRel="user", collectionResourceRel = "user", path = "administrators", excerptProjection = UsersProjection.class) ===== Proyecciones ===== Es una visión diferente de lo que devuelve el repositorio. Se aplican a las entidades. En src/main/java/com/testSpring/demoArtifact/projection se define una interfaz con los métodos get de aquellos atributos a los que se quiere acceder y se declara la siguiente directiva @Projection(name = "editp", types = UserEntity.class). Las proyecciones no pueden ser usadas en los controladores. Tan sólo se pueden usar en los repositorios ===== Servicios ===== Se crearán los servicios necesarios para su acceso, que se colocarán en src/main/java/com/testSrping/demoArtifact/service. Se creará una clase y su interfaz. Secrel_sectionService y ISecrel_sectionService. Los métodos del servicio utilizarán el repositorio que será inyectado por Spring ===== Controlador ===== Finalmente se creará un fichero controlador ubicado en src\main\java\com\testSpring\demoArtifact\controller. Aquí se mapearán con anotaciones las rutas a las que se quiere dar visibilidad desde la aplicación. Se mapea con la anotación @RequestMapping("/user/{id}"). Será dentro de cada controlador donde se invocará el servicio que será inyectado por Spring y se devolverá mediante return new ResponseEntity(u, HttpStatus.OK); Esto devuelve por el servidor web un json con el objeto respuesta ====== Ejecución de la aplicación ====== Desde el IDE de Spring es posible lanzar el servicio. Hay que pulsar, dentro del Boot Dashboard, el nombre de la aplicación en cuestión, en este caso demoArtifact. Una vez lanzado se pueden realizar invocaciones del estilo: http://localhost:8080/sections2 ------- ====== Tablas de auditoría ====== Para la auditoría se utiliza envers, que se configurará a través de Maven. http://www.baeldung.com/database-auditing-jpa ====== Configuración de la aplicación ====== Mediante la directiva @Configuration. Aquí se especificarán los mensajes de la aplicación escritos en ficheros de propiedades Configuración del correo electrónico Se realiza mediante la directiva de configuración. Se lee directamente un fichero de propiedades y se carga en un objeto