Curso de Spring Framework



Documentos relacionados
Curso de Java EE Todos los Derechos Reservados Global Mentoring 2012 Experiencia y Conocimiento para tu Vida 1

Curso de JavaServer Faces

Curso de Java EE Todos los Derechos Reservados Global Mentoring Experiencia y Conocimiento para tu Vida 1

JAVA EE 5. Arquitectura, conceptos y ejemplos.

Curso de Jboss Administración

Curso de Android con Java

Desarrollo de Software con

REGISTRO DE EMPRESAS Y PERSONAS BASE DE INFORMACIÓN DE CLIENTES & CONTACTOS

Herramienta de Gestión Integral de E-Business

Capítulo 2. Planteamiento del problema. Capítulo 2 Planteamiento del problema

1. Definición. Open Source. Escalable. Alto desempeño. Arquitectura Modular. Producto de licencia de código abierto sin coste adicional.

1 Índice Introducción Propósito Alcance Modelo Arquitectónico Inicial... 3

Unidad 1. Fundamentos en Gestión de Riesgos

Elementos requeridos para crearlos (ejemplo: el compilador)

Capitulo III. Diseño del Sistema.

Curso de HTML5 y CSS3

7. CONCLUSIONES Y TRABAJOS FUTUROS

Capítulo VI. Conclusiones. En este capítulo abordaremos la comparación de las características principales y

Análisis y diseño del sistema CAPÍTULO 3

El Framework de desarrollo del Consejo

Sistema para Gestión Hotelera Visión

GUÍA TÉCNICA. Desarrollo de Sistemas de Información la plataforma Business Intellingence Pentaho

Framework para el desarrollo ágil de aplicaciones

Diseño orientado al flujo de datos

Capítulo II. Arquitectura del Software

Sistema para el alquiler, control de películas y clientes en una videotienda

1 EL SISTEMA R/3 DE SAP AG

JAVATO: UN FRAMEWORK DE DESARROLLO JAVA LIBRE

Modificación y parametrización del modulo de Solicitudes (Request) en el ERP/CRM Compiere.

Autenticación Centralizada

1 GLOSARIO. Actor: Es un consumidor (usa) del servicio (persona, sistema o servicio).

Los mayores cambios se dieron en las décadas de los setenta, atribuidos principalmente a dos causas:

Capitulo 3. Desarrollo del Software

UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos

App para realizar consultas al Sistema de Información Estadística de Castilla y León

Patrones de Diseño Orientados a Objetos 2 Parte

MICQ. Trabajo Práctico Final Seminario de Ingeniería en Informática I Facultad de Ingeniería, UBA. Junio Cátedra: Pablo Cosso

SERVICE ORIENTED ARCHITECTURE (SOA) CONTENIDO

CAPÍTULO 3 Servidor de Modelo de Usuario

Capítulo VI. Estudio de Caso de Aplicación del Integrador de Información Desarrollado

Tutorial: Primeros Pasos con Subversion

Implementando un ERP La Gestión del Cambio

Capítulo 5. Cliente-Servidor.

Interoperabilidad de Fieldbus

PATRONES. Experto. Solución:

Curso Online de Microsoft Project

UNIVERSIDAD TECNOLOGICA DE HERMOSILLO SCRUM SPRINT #1. Ingenieria de Software I MAESTRO: BERNARDO PRADO DIAZ INTEGRANTES. Jorge Valdano.

Sistema de gestión de tareas y proyectos

LiLa Portal Guía para profesores

arquitectura que maneja. Encontraremos también los diferentes servidores que


Presentación de Pyramid Data Warehouse

Actividad 4. Justificación de la oportunidad y análisis de necesidades. Concreción de la propuesta

Guía Práctica para el Uso del Servicio de Software Zoho CRM

Integración de AuraPortal con SAP

Curso de HTML5 y CSS3

Mi propuesta consiste en crear un portal Web que contemple las siguientes funcionalidades:

Curso de HTML5 y CSS3

Descripción. Este Software cumple los siguientes hitos:

Big Data y BAM con WSO2

Está creado como un organizador y gestor de tareas personalizables para generar equipos de alto desempeño en diferentes rubros de empresas.

Metodología centrada en la Experiencia del Usuario

Gestión de la Configuración

- MANUAL TÉCNICO - Software de diagnóstico de la seguridad de la información y autoimplantación de LOPD. Rev. 01- FEBRERO 2013

WINDOWS : TERMINAL SERVER

Introducción a las redes de computadores

Proyecto ELO-330 Administración Salas del Departamento de Electrónica RC1. Gerardo Lecaros Felipe Díaz

comunidades de práctica

Oracle vs Oracle por Rodolfo Yglesias Setiembre 2008

JAVA ENTERPRISE EDITION (J2EE) ARQUITECTURA TECNOLOGÍAS (1/2) (L1)

2 EL DOCUMENTO DE ESPECIFICACIONES

Traslado de Data Center

Instructivo Asesoría Básica Comunidad Virtual SharePoint 2010

Data Source. Lic. Esteban Calabria 2007

Visión General GXflow. Última actualización: 2009

Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología

Qué es SPIRO? Características

Curso de Android con Java

PLIEGO DE PRESCRIPCIONES TÉCNICAS PARA LA CONTRATACIÓN DE SERVICIOS DE MANTENIMIENTO DEL SISTEMA DE INFORMACIÓN ESTADÍSTICO DE LA CONSEJERÍA DE

UNIVERSIDAD DE PIURA

ERPUP (Pequeñas y Medianas Empresas)

PROGRAMACIÓN ORIENTADA A OBJETOS Master de Computación. II MODELOS y HERRAMIENTAS UML. II.2 UML: Modelado de casos de uso

Plataforma desarrollo Java Formación elearning tutorizada en castellano. Fabricante: Java Grupo: Desarrollo Subgrupo: Master Java

Capítulo 1 Documentos HTML5

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable

Guía de uso del Cloud Datacenter de acens

ARQUITECTUA DE M2M MIGUEL ÁLVAREZ Y CLARA HERRERO. Documento inicial

EXPERTOS EN DESARROLLO WEB

Sesión No. 7. Contextualización: Nombre de la sesión: Intelisis Business Intelligence PAQUETERÍA CONTABLE

Resumen ÁREA DE FACTURACIÓN::INFORMES::Pedidos Detalle Resumen ÁREA DE

Dossier de empresa. > La empresa > Nuestros servicios > Trabajos realizados > Información de contacto. Más información disponible en:

PROCEDIMIENTO ESPECÍFICO. Código G Edición 0

Workflows? Sí, cuántos quiere?

GeneXus BPM Suite X. Última actualización: 01 de Setiembre de 2008

CAPÍTULO 4 ANÁLISIS Y DISEÑO: e-commerce CONSTRUCTOR

MARCO DE REFERENCIA SISTEMAS DE INFORMACIÓN PARA LA GESTIÓN DE TI EN EL ESTADO COLOMBIANO

Guía Práctica para el Uso del Servicio de Software Zoho CRM

ARQUITECTURA DE DISTRIBUCIÓN DE DATOS

Desarrollador de Aplicaciones E-Business Proyecto #2. Curso No. CY770 Versión 2.3

Guías técnicas Grupo Danysoft: Borland StarTeam. Equipo Grupo Danysoft abril de (902)

Transcripción:

Todos los Derechos Reservados Global Mentoring 2012 Experiencia y Conocimiento para tu Vida 1

Spring es un proyecto de código abierto (open source), originalmente creado por Rod Johnson y descrito en su libro Expert One-on-One: J2EE Design and Development. Spring fue creado con el objetivo de simplificar la complejidad de las aplicaciones empresariales J2EE, permitiendo utilizar POJOs o JavaBeans al utilizarlo, con el objetivo de agregar funcionalidad que únicamente era posible con EJB s. Como podemos observar en la figura, al definir un EJB en la versión 2, estábamos OBLIGADOS a implementar una interface y algunas clases más, y por si fuera poco, debíamos agregar varios métodos para cumplir con el contrato de la interfaz EJB. Este tipo de solución se conoce como código Intrusivo, lo que significa que nosotros debemos adecuarnos al código requerido, en lugar de enfocarnos a nuestro negocio. Podemos observar que el único método de negocio es el método saluda(). Todos los demás métodos no tienen nada que ver con nuestro negocio, sin embargo para poder cumplir con la especificación de los EJB 2.x, se deben agregar todos los demás métodos mostrados. Esta fue solo una de muchas razones por las cuales fue creado Spring, entre otras fue simplificar la forma de hacer Test, promover el desarrollo orientado a Interfaces, uso de clases puras de Java (POJO s), entre varias más. Todos los Derechos Reservados Global Mentoring 2012 Experiencia y Conocimiento para tu Vida 2

Spring permite simplificar no solamente alguna capa en una arquitectura Java, sino ayuda a Simplificar el Desarrollo al programar con Java en su totalidad. Sin embargo Spring, no está limitado a aplicaciones empresariales, sino a cualquier aplicación estándar Java. Como podemos observar en la figura, nuestras clases Java, a diferencia del EJB, únicamente tiene el método de negocio que nos interesa realmente. Spring, por medio de sus características principales como DI (Dependency Inyection) y AOP (Aspect Oriented Programming) permite agregar funcionallidad que solamente un EJB podía tener anteriormente, es decir, transaccionalidad, seguridad, logging, entre muchas características más, esto únicamente con el uso de POJO s (Plain Old Java Objects) o lo que es lo mismo, clases puras de Java. Las 4 estrategias de Spring para la simplificación del desarrollo son: 1. Framework ligero (lightweight) y poco intrusivo orientado a POJO s 2. Bajo Acoplamiento a través de Inyección de Dependencias y programación Orientada a Interfaces 3. Programación Declarativa a través de aspectos 4. Reducción de código repetitivo (boilerplate) a través de plantillas (templates) y aspectos Todos los Derechos Reservados Global Mentoring 2012 Experiencia y Conocimiento para tu Vida 3

Los desarrollos Java por lo general son sistemas de medianos a grandes, por ello es necesario dividir las responsabilidades debido a que los equipos de programadores también suele ser grandes. Una arquitectura Java por lo común se divide en 3 capas: Capa de Presentación, Capa de Negocio y Capa de Datos, pueden existir más, pero estas son las más representativas. Al dividir nuestra aplicación en capas, es posible delegar responsabilidades a un equipo de programadores, dar mejor mantenimiento, integrar cambios más rápidamente, entre muchos beneficios más. Por otro lado, una patrón de diseño es una guía, que a su vez nos permite resolver un problema que se presenta de manera repetitiva. Cuando hablamos de las capas de una arquitectura JEE (Java Enterprise Edition), cada capa puede tener varios patrones de diseño como podemos observar en la figura. En la capa de presentación podemos observar el patrón MVC (Modelo Vista Controlador), y su objetivo es dividir las responsabilidades en estos 3 rubros. El patrón DTO (Data Transfer Object) representa un objeto del dominio del problema. Este patrón aparece en las 3 capas debido a que se utiliza para transferir una entidad o una lista de entidades de cierto tipo entre las distintas capas de la aplicación. En la capa de datos tenemos el patrón DAO, el cual nos ayuda a extraer y almacenar información en la base de datos, utilizando los objetos DTO y/o de entidad. En la capa de Servicio o Negocio, tenemos el patrón como Business Delegate el cual se encarga de los detalles en la llamada a algún método de servicio. A su vez tenemos el patrón Service Locator, el cual es utilizado por el patrón Business Delegate para localizar los servicios cuando se utiliza el directorio Java JNDI, sin embargo con Frameworks como Spring y la Inyección de Dependencia este tipo de patrones ya no se utilizan. Existe un catálogo extenso de patrones de diseño para Java, el cual se puede consultar en: http://java.sun.com/blueprints/corej2eepatterns/patterns/index.html Todos los Derechos Reservados Global Mentoring 2012 Experiencia y Conocimiento para tu Vida 4

La cohesión y el acoplamiento juegan un rol central en el diseño de software. Al diseñar nuestros módulos se requerirán cambios posteriores, por lo que el diseño y arquitectura del software puede impactar de manera directa en el tiempo y costo asociado para realizar dichos cambios. La cohesión es la medida en la que un componente se dedica a realizar solamente la tarea para la cual fue creado, delegando las tareas complementarias a otros componentes. Como podemos observar, el Componente de Impresión necesita de otros componentes para poder realizar su tarea de manera adecuada, ya que si realizara todas las tareas él mismo, cualquier cambio o modificación sería más complicado de realizar, llevando mayor tiempo y costo su mantenimiento. En el desarrollo de software, se busca que los componentes tenga una Alta Cohesión, debido a que si los componente realizan una única tarea, será más fácil integrarlos en nuevos sistemas y/o reutilizar su código, minimizando el tiempo y costo de mantenimiento de dicho componente. Spring por default promueve el desarrollo de sistemas con una alta cohesión, aplicando los conceptos de DI (Dependency Injection) y AOP (Aspect Oriented Programming), los cuales estudiaremos a detalle en lecciones posteriores. Todos los Derechos Reservados Global Mentoring 2012 Experiencia y Conocimiento para tu Vida 5

El acoplamiento mide el grado de dependencia entre dos o más elementos. Estos elementos pueden ser módulos, clases o cualquier componente de software. Desde el punto de vista del diseño de software, buscamos un bajo acomplamiento, debido a que entre menos relaciones existan entre componentes, más sencillo será dar mantenimiento y/o reutilizar dichos componentes en otros sistemas. Entre más relaciones existan entre los componentes, más difícil será separarlos, y por lo tanto su dependencia será muy fuerte. Hay que tomar en cuenta que una alta cohesión puede provocar un alto acoplamiento, debido a que un componente que es pequeño (alta cohesión) necesita de más elementos para completar una tarea, por lo que se incrementa el número de relaciones entre los componentes (alto acoplamiento), por ello es necesario introducir el concepto de balance, el cual permite tener un equilibrio entre los conceptos de cohesión y acoplamiento. Spring por default promueve el desarrollo de sistemas con un bajo acoplamiento y una alta cohesión, aplicando los conceptos de DI (Dependency Injection) y AOP (Aspect Oriented Programming). Todos los Derechos Reservados Global Mentoring 2012 Experiencia y Conocimiento para tu Vida 6

La programación orientada a Interfaces significa que podemos cambiar la implementación de alguna clase de manera programática o declarativa en tiempo de ejecución. En la figura mostrada podemos observar un ejemplo involucrando la capa de servicio y la capa de datos. En este ejemplo la capa de servicio utiliza dentro del Bean de Servicio un tipo de la interfaz idao. Posteriormente y en tiempo de ejecución se debe inyectar una implementación de esta interfaz. En la figura visualizamos que se puede inyectar una implementación del DAO utilizando ya sea JDBC o Hibernate, aunque en la realidad puede ser cualquier tecnología la que implementa esta interfaz. Los beneficios de utilizar tipos de Interfaz en lugar de clases concretas son varios: El bean de servicio no se ve afectado si se cambia la implementación. La implementación puede utilizar fuentes de datos reales o de prueba. Permite realizar pruebas unitarias más fácilmente, en este caso sobre el Bean de Servicio. Permite reducir la dependencia entre las clases, además no se requiere conocer el detalle de la implementación, entre varios beneficios más. El framework de Spring promueve el uso de la programación orientada a Interfaces y así NO usar directamente clases concretas. Esto se puede lograr ya sea de manera declarativa por medio del descriptor xml de Spring o por medio de anotaciones, las cuales estudiaremos más adelante. Todos los Derechos Reservados Global Mentoring 2012 Experiencia y Conocimiento para tu Vida 7

El Contenedor de Spring es una fábrica de objetos. La idea principal es administrar los objetos y sus dependencias aplicando el concepto de Inyección de Dependencias. Además, aplicando el concepto de AOP se puede modificar un POJO en una clase mucho más robusta, por ejemplo, en un POJO transaccional, y todo esto sucede dentro del contenedor de Spring Como podemos observar en la figura, Spring por medio de su fábrica se encarga de instanciar los objetos que sean necesarios, de tal manera que se crea un árbol de objetos. La configuración de estos objetos se realiza ya sea en el archivo descriptor de Spring, comúnmente llamado applicationcontext.xml o por medio de anotaciones de Spring. En el ejemplo podemos observar que un Bean de la capa de Presentación, necesita utilizar un servicio de la Fábrica de Spring. A su vez la fábrica revisa las dependencias del objeto solicitado e instancia cada uno de los objetos del menos al más dependiente (primero datasource y luego daohibernate). En caso de que la fábrica ya tenga estos objetos, y dependiendo de cómo se haya configurado, puede que ya no se vuelvan a instanciar, ya que por default se aplica el patrón de diseño Singleton, el cual significa que únicamente existe una instancia del Bean en memoria. Revisaremos la configuración de Beans a más detalle. Todos los Derechos Reservados Global Mentoring 2012 Experiencia y Conocimiento para tu Vida 8

La configuración de Spring puede realizarse por medio del descriptor xml normalmente conocido como applicationcontext.xml. Una de las ventajas derivadas de utilizar el contenedor de Spring es que ya no es necesario crear los objetos por nuestra cuenta, es decir, ya no observaremos el operador new MiBeanSpring() en nuestro código. Lo anterior permite crear código más limpio y delegar la configuración de las dependencias a Spring. Al crear y configurar las clases y dependencias utilizando Spring permite escribir código modular, fácil de probar, integrando dependencias muy fácilmente y promover el uso de POJOs, pudiéndolos robustecer por medio de AOP. En la figura podemos observar un ejemplo de configuración de un Bean de Spring dentro del archivo applicationcontext.xml y por otro lado la obtención del mismo dentro de una clase Java. Lo anterior es tan solo un ejemplo de lo que estaremos realizando en nuestros ejercicios de configuración con Spring, ya que existen muchas maneras de configurarlo y de obtener los objetos a partir del contenedor de Spring. Todos los Derechos Reservados Global Mentoring 2012 Experiencia y Conocimiento para tu Vida 9

El Ciclo de Vida de un Bean en Spring sigue una serie de pasos bien definidos. Podemos observar en figura esta serie de pasos. El inicio de un bean en Spring es en el momento en que se crea la instancia del mismo y se carga en el Application Context de Spring (Fábrica de Spring). Como puedes observar, la fábrica de Spring ejecuta varios pasos antes de que un bean esté listo para se utilizado. Los pasos generales son: 1. Spring instancia el Bean. 2. Spring inyecta los valores y las referencias de los beans en las propiedades del mismo. 3. Si el bean implementa la interface BeanNameAware, Spring pasa el ID del bean al método setbeanname(). 4. Si el bean implementa la interface BeanFactoryAware, Spring llama el método setbeanfactory(), pasando el bean factory en si mismo. 5. Si el bean implementa la interfaz ApplicationContextAware, Spring llama el método setapplicationcontext(), pasando una referencia del Application Context. 6. Si el bean implementa la interface BeanPostProcessor, Spring llama el método postprocessbeforeinitialization(). 7. Si el bean implementa la interface InitializingBean, Spring llama al método afterpropertiesset(). Similarmente, si el método contiene la declaración de un init-method, entonces se llama el método declarado. 8. Si el bean implementa la interfaz BeanPostProcessor, Spring llama el método postprocessafterinitialization() 9. En este punto, el bean está listo para utilizarse, y el bean permanece en la fábrica hasta que el application Context es destruido. 10. Si el bean implementa la interface DisposableBean, Spring llama al método destroy(). Así mismo, si el bean contiene una declaración destroy-method, entonces el método especificado se llamado. Todos los Derechos Reservados Global Mentoring 2012 Experiencia y Conocimiento para tu Vida 10

En este ejercicio configuraremos nuestro proyecto de Spring y revisaremos como instanciar un Bean, así como aplicar varios de los conceptos mencionados en esta lección. Todos los Derechos Reservados Global Mentoring 2012 Experiencia y Conocimiento para tu Vida 11