Spring Desarrollo de Aplicaciones Empresariales 2014-1 Spring • Spring – Es un framework para el desarrollo de aplicaciones y un contenedor de inversión de control, de código abierto para la plataforma Java. – Motivación: facilitar el desarrollo de aplicaciones Java EE, promoviendo buenas prácticas de diseño y programación • Simplifica el uso de muchas de las APIs de Java EE • Dispone de alternativas a algunas de las APIs de Java EE – Da soporte a: • Dependency Injection • Aspect-Oriented Programming including Spring's declarative transaction management • Spring MVC web application and RESTful web service framework • Foundational support for JDBC, JPA, JMS 2 Inversion of Control • IoC: Es una técnica que permite que a un objeto que depende de otro, se le proporcione la instancia que necesita en tiempo de ejecución • Dependency Injection es un patrón que permite lograr IoC – http://martinfowler.com/articles/injection.html • Los frameworks modernos como Spring soportan el patrón Dependency Injection (DI) 3 Inversion of Control • Bajo el paradigma de la inyección de dependencias, existe un contenedor de objetos que crea los objetos y les inyecta las referencias a los objetos de los que dependen – Ejemplo: cuando se crea una instancia de EmployeeServiceImpl se le inyectan instancias de clases que implementan EmployeeDAO y DepartmentDAO – Spring incluye un contendor de objetos que da soporte al paradigma de la inyección de dependencias 4 Ejercicios 1. Descargar e importar en eclipse el ejemplo springexamples 2. Ejecutar SpringExample.java 3. Configurar spring-module.xml de tal modo que se.exampleSpring() utilice el DBNewsService.java – No se puede modificar código Java en este ejercicio 4. Definir un nuevo servicio TXTNewsService.java que lea las noticias de un fichero de texto – Cada línea en el fichero será una noticia – El path al fichero de texto se debe proporcionar en springmodule.xml 5 Gestión de transacciones • Los DAOs no se tienen que preocupar del manejo de la conexión. Sin la gestión de transacciones de Spring: – En la implementación de cada método, necesitaríamos rodear la lógica de negocio con código para gestionar la transacción. • El código sería más ilegible • Ese código es necesario, pero colateral a la lógica de negocio que debe implementar ese método • Hay que repetirlo en todos los métodos de todos los servicios • Este tipo de código representa un cross-cutting concern (preocupación transversal como seguridad, log, etc.) 6 Gestión de transacciones • Programación Orientada a Aspectos (AOP) – Técnica que permite eliminar los cross-cutting concerns del código, encapsulando cada uno en un aspecto – Con un framework AOP • El desarrollador implementa los aspectos y declara en qué puntos de ejecución se deben aplicar • El framework intercepta los puntos de ejecución y aplica los aspectos automáticamente – Spring utiliza esta técnica para la gestión declarativa de transacciones • Incluye una implementación del aspecto de transaccionalidad, que hace uso de un gestor de transacciones – El gestor permite agrupar invocaciones a DAOs en una misma transacción • El desarrollador de un servicio declara la transaccionalidad de cada método – Spring intercepta las invocaciones a los métodos y aplica el aspecto de transaccionalidad 7 Gestión de transacciones • En jdbc-example no hacemos uso de este mecanismo declarativo • Si implementamos varios casos de uso en nuestros servicios veremos que todos tienen una gestión de transacciones similar – Iniciar la transacción (con las propiedades adecuadas) a partir del gestor de transacciones utilizado – Ejecutar la lógica propia del caso de uso – Finalizar transacción (commit o rollback) en función de si se ha producido alguna excepción o no y de su tipo – El código común para la gestión de las transacciones puede eliminarse de la implementación de todos los casos de uso que lo precisen, y declarativamente decir cuándo debe ejecutarse 8 Ejercicios 1. Explorar el uso de la anotación @Transactional para hacer una gestión declarativa de las transacciones – Más información de cómo hacerlo en lecturas recomendadas: Spring_en_Modelo.pdf • Diapositivas 37 a 57 2. Implemente el siguiente caso de uso transaccional (empleando alguno de los mecanismos que conoce) sobre el código de jdbc-examples: “Debe ser posible incrementar en un determinado porcentaje el salario de todos los empleados que trabajan en una localidad determinada” 9