You are on page 1of 70

Universidad de Palermo Facultad de Ingeniería > IT Lab > AI Group

Introducción a Spring Framework versión 1.1
Martín Agüero aguero.martin@gmail.com

Buenos Aires, Argentina Octubre de 2007

Agenda
Contenidos parte I: ¿Qué es Spring? Introducción Arquitectura Características clave Ejemplos: IOC, AOP, Hibernate, Web services, Seguridad

Agenda
Contenidos parte II: Integración con OpenSymphony Quartz Integración con JavaServer Faces

Agenda
Un archivo spring-training.rar acompaña al presente y contiene paquetes con el código fuente de los ejemplos presentados a continuación. Para más información consultar el archivo README.txt ubicado dentro del rar.

Spring Framework:

Parte I

¿Qué es Spring?

Un framework contenedor liviano basado en la técnica Inversión de Control (IoC) y una implementación de desarrollo según el paradigma de Orientación a Aspectos (AOP)

Spring Framework: introducción
• Framework: porque define la forma de desarrollar aplicaciones J2EE, dando soporte y simplificando complejidad propia del software corporativo. • Inversión de Control (IoC): promueve el bajo acoplamiento a partir de la inyección de dependencias (DI) entre los objetos (relaciones). • Orientación a Aspectos (AOP): presenta una estructura simplificada para el desarrollo y utilización de aspectos (módulos multiple object crosscutting).

Spring Framework: arquitectura

Spring Framework: arquitectura (cont.)
DAO accesos JDBC con manejo de transacciones (desde el módulo AOP). integración con Hibernate, JDO, etc. acceso e interacción con servicios enterprise. provee un contexto apropiado para el desarrollo de aplicaciones web e integración con otros frameworks (Struts, JSF, Tapestry, etc).

ORM JEE Web

Spring Framework: características clave
POJO: (Plain Old Java Object) revalora la simplicidad de las clases Java aportando manejo de transacciones de forma no intrusiva. XML: configuración basada en archivos XML. Seguridad: como un requerimiento no funcional implementado como un aspecto (AOP) a través del framework Acegi. Remoting: RMI simplificado, acceso y publicación de web services. Testing: provee un package de testing específico para componentes del framework e integrado con JUnit.

Spring Framework: ejemplos
1. IoC: desacoplando clases cableando (wiring) beans. 2. AOP: interceptando métodos con aspectos (aspects). 3. Hibernate: gestión integrada de transacciones y recursos. 4. Web services: configuración y consumo de un web service. 5. Seguridad: control y gestión de seguridad con Acegi.

Spring Framework: IoC - DI
1. IoC: desacoplando clases cableando (wiring) beans. 2. AOP: interceptando métodos con aspectos (aspects). 3. Hibernate: gestión integrada de transacciones y recursos. 4. Web services: configuración y consumo de un web service. 5. Seguridad: control y gestión de seguridad con Acegi.

Spring Framework: IoC - DI
• Dependencia típica entre objetos KnighOfTheRoundtable
new() new HolyGrailQuest() new RescueDamselQuest()

HolyGrailQuest

RescueDamselQuest

x alto acoplamiento x difícil testeo unitario

Spring Framework: IoC - DI
• Usando Dependency Injection (DI)/ Inversion of Control (IoC) HolyGrailQuest
new() new()

RescueDamselQuest

KnighOfTheRoundtable
new() set Quest() set Quest()

colaboración entre objetos centralizada relación entre objetos delegada

Spring Framework: IoC - DI
• Cableado (wiring) de objetos <knight.xml>

define el bean quest define el bean knight set del nombre de knight desde el constructor set del bean quest al bean knight (inyección de dependencia)

Spring Framework: AOP
1. IoC: desacoplando clases cableando (wiring) beans. 2. AOP: interceptando métodos con aspectos (aspects). 3. Hibernate: gestión integrada de transacciones y recursos. 4. Web services: configuración y consumo de un web Service. 5. Seguridad: control y gestión de seguridad con Acegi.

Spring Framework: AOP
• Típicas invocaciones a funcionalidades system-wide Logging Module

Student Service Course Service Instructor Service Billing Service Content Service

Security Module

Transaction Manager

Spring Framework: AOP
• Usando AOP
Security Module

Transaction Manager

Student Service

Course Service

Instructor Service

Billing Service

Content Service

Logging Module

Spring Framework: AOP
• Dependencia típica entre objetos Minstel: trovador/poeta Knight
new() compose ()

Minstrel

(un logger)

x baja reusabilidad x duplicación de código

Spring Framework: AOP
• Objeto Minstrel Aspect-Oriented Minstrel Knight

separación de funcionalidad por módulos servicios aplicados de forma no intrusiva

Spring Framework: AOP
• Minstrel Aspect-Oriented <aop.grail.MinstrelAdvice.java> método a ejecutar antes de la invocación logger de la clase a interceptar

Spring Framework: AOP
• Weaving (aplicar un advice) MinistrelAdvice a Knight <minstrel.xml>

define el bean minstrel

intercepta invocaciones al objeto knight minstrel primero ejecuta su método luego knightTarget ejecuta su método

Spring Framework: Hibernate
1. IoC: desacoplando clases cableando (wiring) beans. 2. AOP: interceptando métodos con aspectos (aspects). 3. Hibernate: gestión integrada de transacciones y recursos. 4. Web services: configuración y consumo de un web service. 5. Seguridad: control y gestión de seguridad con Acegi.

Spring Framework: Hibernate
gestión y definición de recursos centralizada desde Spring. conversión de excepciones propietarias. acceso a métodos DAO desde HibernateTemplate. demarcado programático de transacciones. demarcado declarativo de transacciones.

Spring Framework: Hibernate
gestión y definición de recursos centralizada desde Spring (wiring):

<hibernate.xml>

Spring Framework: Hibernate
conversión de excepciones propietarias a:
DataAccessException

DataAccessResourceFailureException

UncategorizedDataAccessException

CleanupFailureDataAccessException

DataIntegrityViolationException

InvalidDataAccessApiUsageException DataRetrievalFailureException

DeadLockLoserDataAccessException

OptimisticLockingFailureException

InvalidDataAccessResourceUsageException

ObjectRetrievalFailureException

ObjectOptimisticLockingFailureException

IncorrectUpdateSemanticsDataException

TypemismatchDataAccessException

Spring Framework: Hibernate
acceso a métodos DAO desde HibernateTemplate: Es la versión en Spring de la interface Session de Hibernate. Garantiza que las intantancias de Session sean abiertas, cerradas correctamente y participen automáticamente en transacciones. Instancias de HibernateTemplate son thread-safe y reusables. Convierte las checked HibernateExceptions a unchecked DataAccessExceptions (excepciones traducidas por Spring).

Spring Framework: Hibernate
acceso a métodos DAO desde HibernateTemplate:
set SessionFactory
<hibernate.xml>

<orm.dao.ProductDaoImpl.java>

uso de método find()

Spring Framework: Hibernate
demarcado programático de transacciones Requiere una instancia de PlatformTransactionManager.

set de myTxManager y productDao al servicio

Spring Framework: Hibernate
demarcado programático de transacciones
set de myTxManager y productDao

en contexto transaccional

Spring Framework: Hibernate
demarcado declarativo de transacciones Permite reemplazar demarcaciones explícitas en el código Java interceptando métodos con AOP. Evita repeticiones de código transaccional en servicios de negocio. Niveles de transaccionabilidad (ej: comportamiento de la propagación, niveles de aislamiento) pueden ser configurados desde un archivo externo sin afectar la implementación.

Spring Framework: Hibernate
demarcado declarativo de transacciones

método a interceptar

configura niveles de transaccionabilidad

<hibernate-tran.xml>

Spring Framework: Hibernate
demarcado declarativo de transacciones

interceptor de transacciones
<hibernate-tran.xml>

Spring Framework: Hibernate
demarcado declarativo de transacciones

no hay código transaccional

<orm.services.ProductServiceImpl.java>

Spring Framework: web services
1. IoC: desacoplando clases cableando (wiring) beans. 2. AOP: interceptando métodos con aspectos (aspects). 3. Hibernate: gestión integrada de transacciones y recursos. 4. Web services: configuración y consumo de un web service. 5. Seguridad: control y gestión de seguridad con Acegi.

Spring Framework: web services
Spring expone web services con JAX-RPC (Java APIs for XML-based remote procedure call). Accede a web services sin acoplar código fuente, es decir configurados por wiring (xml). En combinación con Apache Axis, es posible generar automáticamente código java (WSDL2Java) a partir de un archivo WSDL (Web Service Description Language). Configurando una tarea Apache Ant con parámetros específicos, Axis puede generar automáticamente el código Java para consumir un web service desde Spring.

Spring Framework: web services
configuración y consumo de un web service <webservice.xml>
dirección al documento wsdl define la interface que el cliente usa para acceder al servicio

valores utilizados por nameService para construir una QName Spring permite utilizar una ServiceFactory externa, para este caso de Apache Axis

Spring Framework: web services
configuración y consumo de un web service
Interface que el cliente define para utilizar el web service

<ws.translator.BabelFishService.java>

Uso del Web Service desde un contexto Spring

<test.WSApp.java>

Spring Framework: seguridad
1. IoC: desacoplando clases cableando (wiring) beans. 2. AOP: interceptando métodos con aspectos (aspects). 3. Hibernate: gestión integrada de transacciones y recursos. 4. Web Services: configuración y consumo de un Web Service. 5. Seguridad: control y gestión de seguridad con Acegi.

Spring Framework: seguridad
Acegi Security System: seguridad declarativa para aplicaciones basadas en Spring Framework. sub proyecto de Spring Framework. provee una colección de beans configurables en el contexto Spring. basado en DI-IoC (dependency injection) y AOP. autentifica y autoriza accesos a aplicaciones web con filtros.

Spring Framework: seguridad
Acegi Security System: Elementos fundamentales de Acegi Framework
Security Interceptor

Authentication Manager Determina identidad del usuario por principal (username) y credentials (password).

Access Decision Manager Administra accesos a recursos restringidos. Permite acceder según la información de autenticación y los atributos asociados al recurso.

Run-As Manager Autoriza acceso a subrecursos según niveles determinados por autenticación y credenciales.

autenticación

autorización

re-autenticación

Spring Framework: seguridad
Acegi Security System: Elementos fundamentales de Acegi Framework
Security Interceptor

Authentication Manager Determina identidad del usuario por principal (username) y credentials (password).

Access Decision Manager Administra accesos a recursos restringidos. Permite acceder según la información de autenticación y los atributos asociados al recurso.

Run-As Manager Autoriza acceso a subrecursos según niveles determinados por autenticación y credenciales.

autenticación

autorización

re-autenticación

Spring Framework: seguridad
Authentication Manager

ProviderManager es la implementación de AutenticationManager
que delega la responsabilidad de autenticar en uno o más proveedores de autenticación.
Provider Manager

PasswordDao Authentication Provider
LDAP

Remote Authentication Provider Jaas Authentication Provider

Dao Authentication Provider
Obtiene información del usuario de la base de datos, incluyendo username y password.

Cas Authentication Provider
Single-Sign-On con Yale CAS (Central Authentication Service)

Spring Framework: seguridad
Authentication Manager

PasswordDaoAuthenticationProvider es la implementación
específica para autenticar contra un servidor LDAP. Delega en LdapPasswordAuthenticationDao la verificación de credenciales.

Spring Framework: seguridad
Authentication Manager

El bean de LdapPasswordAuthenticationDao es cableado a un bean PasswordDaoAuthenticationProvider.

Wiring de PasswordDaoAuthenticationProvider

Interface que debe implementar

Spring Framework: seguridad
Acegi Security System: Elementos fundamentales de Acegi Framework
Security Interceptor

Authentication Manager Determina identidad del usuario por principal (username) y credentials (password).

Access Decision Manager Administra accesos a recursos restringidos. Permite acceder según la información de autenticación y los atributos asociados al recurso.

Run-As Manager Autoriza acceso a subrecursos según niveles determinados por autenticación y credenciales.

autenticación

autorización

re-autenticación

Spring Framework: seguridad
Access Decision Manager

Es el responsable de decidir si el usuario autenticado por Authentication Manager tiene los privilegios para acceder a un recurso restringido.

Un conjunto de objetos votan y deciden si un usuario está autorizado a acceder a un recurso, las decisiones pueden ser:
ACCESS_GRANTED ACCESS_DENIED ACCESS_ABSTAIN El votante desea otorgar acceso al recurso restringido. El votante desea denegar el acceso al recurso restringido. El votante es indiferente.

El objeto manager evalúa los votos y determina si las credenciales son suficientes para acceder, según el siguiente criterio:
Access Decision Manager: AffirmativeBased ConsensusBased UnanimousBased Cómo decide: Permite acceso si al menos un votante otorga acceso. Permite acceso si todos los votantes otorgan acceso. Permite acceso sólo si no hubo votantes que denieguen acceso.

Spring Framework: seguridad
Acegi Security System: Elementos fundamentales de Acegi Framework
Security Interceptor

Authentication Manager Determina identidad del usuario por principal (username) y credentials (password).

Access Decision Manager Administra accesos a recursos restringidos. Permite acceder según la información de autenticación y los atributos asociados al recurso.

Run-As Manager Autoriza acceso a subrecursos según niveles determinados por autenticación y credenciales.

autenticación

autorización

re-autenticación

Spring Framework: seguridad
Run-As Manager Autoriza acceso a subrecursos según niveles determinados por autenticación y credenciales.

AbstractSecurityInterceptor puede reemplazar de forma temporal el objeto de autenticación siempre que haya sido procesado exitosamente por el AuthenticationManager y por AccessDecisionManager. Permite a un usuario hacer llamadas a objetos que requieran diferentes credenciales de autenticación y autorización. Esta característica es particularmente útil para llamar Web Services remotos (según documentación de referencia del framework).

objeto Authentication reemplazante

objeto Authentication existente

Spring Framework: seguridad
Acegi Security System: seguridad declarativa para aplicaciones basadas en Spring Framework. sub proyecto de Spring Framework. provee una colección de beans configurables en el contexto Spring. basado en DI-IoC (dependency injection) y AOP. autentifica y autoriza accesos a aplicaciones web con filtros.

Spring Framework: seguridad
autentifica y autoriza accesos a aplicaciones web con filtros: Filtros interceptan request entrantes y aplican procesos de seguridad antes de ser evaluados por la aplicación. Acegi provee un conjunto de filtros específicos a diferentes etapas del proceso request. Interceptan las solicitudes y reencaminan el flujo de la aplicación a los correspondientes Authentication y Access Decision Managers.

Spring Framework: seguridad
autentifica y autoriza accesos a aplicaciones web con filtros:
Request Garantiza que un request sea transmitido por un canal seguro (ej: https) Acepta request de autenticación y reencamina las solicitudes al Authentication Manager. Almacena y gestiona la información de autenticación del usuario.

Channel-Processing Filter Authentication-Processing Filter Integration Filter

Security Enforcement Filter

Garantiza que el usuario ha sido autenticado y cumple con la autorización para acceder a un recurso web restringido.

Recurso Web Seguro

Spring Framework:

Fin de Parte I

Agenda
Contenidos parte II: Integración con OpenSymphony Quartz Integración con JavaServer Faces

Spring Framework:

Parte II

Spring Framework: Parte II
6. 7. Quartz: scheduling jobs con Quartz desde Spring. JSF: integración con JavaServer Faces.

Spring Framework: scheduling
6. 7. Quartz: scheduling jobs con Quartz desde Spring. JSF: integración con JavaServer Faces.

Spring Framework: scheduling
• Programar trabajos (jobs) de ejecución automática ante eventos o por calendario:
org.quartz.Job org.quartz.Job configuración de trabajos con la API de OpenSymphony Quartz

id MyJob
org.quartz.JobDetail

grupo id grupo
scheduleJob()

addJob()

id_jobDetail
org.quartz.Trigger

org.quartz.Scheduler

id_grupo_jobDetail cron expressions

0 0 12 * * ? Fire at 12pm (noon) every day

Spring Framework: scheduling
• Programar jobs cableando (wiring) de clases que son parte de Spring:
configuración de trabajos Quartz con Spring <scheduler.xml>

Spring Framework: scheduling
• Ejemplos de expresiones cron utilizadas por Quartz para programar jobs:
Expression 0 0 12 * * ? 0 15 10 ? * * 0 15 10 * * ? 0 15 10 * * ? * 0 15 10 * * ? 2005 0 * 14 * * ? 0 0/5 14 * * ? 0 0/5 14,18 * * ? 0 0-5 14 * * ? 0 10,44 14 ? 3 WED 0 15 10 ? * MON-FRI 0 15 10 15 * ? 0 15 10 L * ? 0 15 10 ? * 6L 0 15 10 ? * 6L 0 15 10 ? * 6L 2002-2005 0 15 10 ? * 6#3 0 0 12 1/5 * ? 0 11 11 11 11 ? Fire at 12pm (noon) every day Fire at 10:15am every day Fire at 10:15am every day Fire at 10:15am every day Fire at 10:15am every day during the year 2005 Fire every minute starting at 2pm and ending at 2:59pm, every day Fire every 5 minutes starting at 2pm and ending at 2:55pm, every day Fire every 5 minutes starting at 2pm and ending at 2:55pm, AND fire every 5 minutes starting at 6pm and ending at 6:55pm, every day Fire every minute starting at 2pm and ending at 2:05pm, every day Fire at 2:10pm and at 2:44pm every Wednesday in the month of March. Fire at 10:15am every Monday, Tuesday, Wednesday, Thursday and Friday Fire at 10:15am on the 15th day of every month Fire at 10:15am on the last day of every month Fire at 10:15am on the last Friday of every month Fire at 10:15am on the last Friday of every month Fire at 10:15am on every last friday of every month during the years 2002, 2003, 2004 and 2005 Fire at 10:15am on the third Friday of every month Fire at 12pm (noon) every 5 days every month, starting on the first day of the month. Fire every November 11th at 11:11am. Meaning

Spring Framework: JSF
6. 7. Quartz: scheduling jobs con Quartz desde Spring. JSF: integración con JavaServer Faces.

Spring Framework: JSF
• JavaServer Faces (JSF):
components based framework. event-driven components. multiplataforma, multidispositivo. parte de J2EE 1.5

Inyección de beans Spring en Managed beans de JSF:
separación lógica entre capa de servicios - UI. soporte integrado con Spring desde DelegatingVariableResolver.

Spring Framework: JSF
• configuración de archivo faces-config.xml de JSF:

Spring Framework: JSF
• WebApplicationContext:
utiliza el WebApplicationContextVariableResolver. expone WebApplicationContext bajo variable webApplicationContext. permite acceder a la BeanFactory de Spring y otros servicios directamente desde los Managed Beans.

Spring Framework:

Fin de Parte II

Spring Framework: autores
Spring Framework Rod Johnson, Juergen Hoeller, Alef Arendsen, Colin Sampaleanu, et al. Acegi Security for Spring Ben Alex Hibernate Gavin King et al. OpenSymphony Quartz James House, Jasper Rosenberg, Aaron Craven.

Spring Framework: referencias
Spring in Action, Walls-Breidenbach Spring Framework reference Acegi reference Quartz documentation Data Access with the Spring Framework, Juergen Hoeller Apache Axis user guide POJOs in Action, Richardson Spring and JavaServer™Faces Technology: Synergy or Superfluous?

Spring Framework: más información
Actualización Spring 2.0 http://www.infoq.com/articles/spring-2-intro Simplifying Enterprise Applications with Spring 2.0 and AspectJ http://www.infoq.com/articles/Simplifying-Enterprise-Apps Building JavaServer Faces Applications with Spring and Hibernate http://developers.sun.com/learning/javaoneonline/2007/pdf/TS-7082.pdf

Spring Framework: propiedad intelectual

Todas las marcas mencionadas son propiedad exclusiva de sus dueños.

Spring Framework: fin de presentación

www.palermo.edu