3742360 Introduccion a Spring Framework

70
Buenos Aires, Argentina Octubre de 2007 Universidad de Palermo Facultad de Ingeniería > IT Lab > AI Group Introducci Introducci ó ó n a n a Spring Spring Framework Framework Mart Mart í í n Ag n Ag ü ü ero ero [email protected] versión 1.1

Transcript of 3742360 Introduccion a Spring Framework

Page 1: 3742360 Introduccion a Spring Framework

Buenos Aires, ArgentinaOctubre de 2007

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

IntroducciIntroducci óón a n a SpringSpring FrameworkFramework

MartMart íín Agn Ag üü[email protected]

versión 1.1

Page 2: 3742360 Introduccion a Spring Framework

Contenidos parte I:

� ¿Qué es Spring?

� Introducción

� Arquitectura

� Características clave

� Ejemplos: IOC, AOP, Hibernate, Web services, Seguridad

Agenda

Page 3: 3742360 Introduccion a Spring Framework

Contenidos parte II:

� Integración con OpenSymphony Quartz

� Integración con JavaServer Faces

Agenda

Page 4: 3742360 Introduccion a Spring Framework

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.

Page 5: 3742360 Introduccion a Spring Framework

Spring Framework:

Parte I

Page 6: 3742360 Introduccion a Spring Framework

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)

¿Qué es Spring?

Page 7: 3742360 Introduccion a Spring Framework

• 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: introducción

Page 8: 3742360 Introduccion a Spring Framework

Spring Framework: arquitectura

Page 9: 3742360 Introduccion a Spring Framework

provee un contexto apropiado para el desarrollo de aplicaciones web e integración con otros frameworks(Struts, JSF, Tapestry, etc).

Web

acceso e interacción con servicios enterprise.JEE

integración con Hibernate, JDO, etc.ORM

accesos JDBC con manejo de transacciones (desde el módulo AOP).

DAO

Spring Framework: arquitectura (cont.)

Page 10: 3742360 Introduccion a Spring Framework

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.

Page 11: 3742360 Introduccion a Spring Framework

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: ejemplos

Page 12: 3742360 Introduccion a Spring Framework

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.

Page 13: 3742360 Introduccion a Spring Framework

Spring Framework: IoC - DI• Dependencia típica entre objetos

KnighOfTheRoundtable

new()

HolyGrailQuest

new HolyGrailQuest()

RescueDamselQuest

new RescueDamselQuest()

x alto acoplamiento

x difícil testeo unitario

Page 14: 3742360 Introduccion a Spring Framework

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

HolyGrailQuest

new()

RescueDamselQuest

set Quest()

KnighOfTheRoundtable

new()

set Quest()

new()

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

Page 15: 3742360 Introduccion a Spring Framework

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

define el bean quest

define el bean knight

set del bean quest al bean knight

(inyección de dependencia)

set del nombre de knight desde el constructor

Page 16: 3742360 Introduccion a Spring Framework

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

Page 17: 3742360 Introduccion a Spring Framework

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

LoggingModule

SecurityModule

TransactionManager

Student Service

Course Service

Instructor Service

Billing Service

Content Service

Page 18: 3742360 Introduccion a Spring Framework

Spring Framework: AOP• Usando AOP

Logging Module

Security Module

Transaction

Manager

Student Service

Course Service

Billing Service Content Service

Instructor Service

Page 19: 3742360 Introduccion a Spring Framework

Spring Framework: AOP• Dependencia típica entre objetos

Knight

new()

Minstrel

compose ()

Minstel: trovador/poeta

(un logger)

x baja reusabilidad

x duplicación de código

Page 20: 3742360 Introduccion a Spring Framework

Spring Framework: AOP• Objeto Minstrel Aspect-Oriented

Minstrel

Knight

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

Page 21: 3742360 Introduccion a Spring Framework

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

Page 22: 3742360 Introduccion a Spring Framework

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 knightTargetejecuta su método

Page 23: 3742360 Introduccion a Spring Framework

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

Page 24: 3742360 Introduccion a Spring Framework

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.

Page 25: 3742360 Introduccion a Spring Framework

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

<hibernate.xml>

Page 26: 3742360 Introduccion a Spring Framework

Spring Framework: Hibernate

DataAccessException

DataAccessResourceFailureException

CleanupFailureDataAccessException

UncategorizedDataAccessException

DataIntegrityViolationException

InvalidDataAccessApiUsageException

InvalidDataAccessResourceUsageException

DataRetrievalFailureException

ObjectRetrievalFailureException

OptimisticLockingFailureException

ObjectOptimisticLockingFailureException

DeadLockLoserDataAccessException

TypemismatchDataAccessExceptionIncorrectUpdateSemanticsDataException

� conversión de excepciones propietarias a:

Page 27: 3742360 Introduccion a Spring Framework

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 uncheckedDataAccessExceptions (excepciones traducidas por Spring).

Page 28: 3742360 Introduccion a Spring Framework

Spring Framework: Hibernate� acceso a métodos DAO desde HibernateTemplate:

set SessionFactory

uso de método find()

<hibernate.xml>

<orm.dao.ProductDaoImpl.java>

Page 29: 3742360 Introduccion a Spring Framework

Spring Framework: Hibernate� demarcado programático de transacciones

� Requiere una instancia de PlatformTransactionManager.

set de myTxManagery productDao al servicio

Page 30: 3742360 Introduccion a Spring Framework

Spring Framework: Hibernate� demarcado programático de transacciones

set de myTxManagery productDao

en contexto transaccional

Page 31: 3742360 Introduccion a Spring Framework

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 archivoexterno sin afectar la implementación.

Page 32: 3742360 Introduccion a Spring Framework

Spring Framework: Hibernate� demarcado declarativo de transacciones

<hibernate-tran.xml>

método a interceptar

configura niveles de transaccionabilidad

Page 33: 3742360 Introduccion a Spring Framework

Spring Framework: Hibernate� demarcado declarativo de transacciones

interceptor de transacciones

<hibernate-tran.xml>

Page 34: 3742360 Introduccion a Spring Framework

Spring Framework: Hibernate� demarcado declarativo de transacciones

no hay código transaccional

<orm.services.ProductServiceImpl.java>

Page 35: 3742360 Introduccion a Spring Framework

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

Page 36: 3742360 Introduccion a Spring Framework

Spring Framework: web services

� Spring expone web services con JAX-RPC (Java APIs for XML-basedremote 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 ServiceDescription Language).

� Configurando una tarea Apache Ant con parámetros específicos, Axispuede generar automáticamente el código Java para consumir un webservice desde Spring.

Page 37: 3742360 Introduccion a Spring Framework

Spring Framework: web services� configuración y consumo de un web service

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 ServiceFactoryexterna, para este caso de Apache Axis

<webservice.xml>

Page 38: 3742360 Introduccion a Spring Framework

� Interface que el cliente define para utilizar el web service

� Uso del Web Service desde un contexto Spring

Spring Framework: web services� configuración y consumo de un web service

<ws.translator.BabelFishService.java>

<test.WSApp.java>

Page 39: 3742360 Introduccion a Spring Framework

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

Page 40: 3742360 Introduccion a Spring Framework

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.

Page 41: 3742360 Introduccion a Spring Framework

Spring Framework: seguridadAcegi Security System: Elementos fundamentales de Acegi Framework

AuthenticationManager

Security Interceptor

Access DecisionManager

Run-As Manager

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

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

Autoriza acceso a subrecursos según niveles determinados por autenticación y credenciales.

autorización re-autenticaciónautenticación

Page 42: 3742360 Introduccion a Spring Framework

Spring Framework: seguridadAcegi Security System: Elementos fundamentales de Acegi Framework

AuthenticationManager

Security Interceptor

Access DecisionManager

Run-As Manager

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

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

Autoriza acceso a subrecursos según niveles determinados por autenticación y credenciales.

autorización re-autenticaciónautenticación

Page 43: 3742360 Introduccion a Spring Framework

Spring Framework: seguridadAuthentication

ManagerProviderManager es la implementación de AutenticationManagerque delega la responsabilidad de autenticar en uno o más proveedores de autenticación.

PasswordDaoAuthentication

Provider

Remote Authentication

Provider

Jaas AuthenticationProvider

Cas AuthenticationProvider

Provider Manager

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

Dao AuthenticationProvider

LDAP

Single-Sign-On con YaleCAS (Central Authentication Service)

Page 44: 3742360 Introduccion a Spring Framework

Spring Framework: seguridadAuthentication

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

Page 45: 3742360 Introduccion a Spring Framework

Spring Framework: seguridadAuthentication

ManagerEl bean de LdapPasswordAuthenticationDao es cableado a un bean PasswordDaoAuthenticationProvider.

� Wiring de PasswordDaoAuthenticationProvider

� Interface que debe implementar

Page 46: 3742360 Introduccion a Spring Framework

Spring Framework: seguridadAcegi Security System: Elementos fundamentales de Acegi Framework

AuthenticationManager

Security Interceptor

Access DecisionManager

Run-As Manager

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

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

Autoriza acceso a subrecursos según niveles determinados por autenticación y credenciales.

autorización re-autenticaciónautenticación

Page 47: 3742360 Introduccion a Spring Framework

Spring Framework: seguridad

� Un conjunto de objetos votan y deciden si un usuario está autorizado a acceder a un recurso, las decisiones pueden ser:

� El objeto manager evalúa los votos y determina si las credenciales son suficientes para acceder, según el siguiente criterio:

El votante es indiferente.ACCESS_ABSTAIN

El votante desea denegar el acceso al recurso restringido.ACCESS_DENIED

El votante desea otorgar acceso al recurso restringido.ACCESS_GRANTED

Access DecisionManager

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

Permite acceso sólo si no hubo votantes que denieguen acceso.UnanimousBased

Permite acceso si todos los votantes otorgan acceso.ConsensusBased

Permite acceso si al menos un votante otorga acceso.AffirmativeBased

Cómo decide:Access Decision Manager:

Page 48: 3742360 Introduccion a Spring Framework

Spring Framework: seguridadAcegi Security System: Elementos fundamentales de Acegi Framework

AuthenticationManager

Security Interceptor

Access DecisionManager

Run-As Manager

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

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

Autoriza acceso a subrecursos según niveles determinados por autenticación y credenciales.

autorización re-autenticaciónautenticación

Page 49: 3742360 Introduccion a Spring Framework

Spring Framework: seguridad

� 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 Servicesremotos (según documentación de referencia del framework).

Run-As Manager

Autoriza acceso a subrecursos según niveles determinados por autenticación y credenciales.

objeto Authenticationexistente

objeto Authenticationreemplazante

Page 50: 3742360 Introduccion a Spring Framework

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.

Page 51: 3742360 Introduccion a Spring Framework

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.

Page 52: 3742360 Introduccion a Spring Framework

Spring Framework: seguridad� autentifica y autoriza accesos a aplicaciones web con filtros:

Channel-Processing Filter

Authentication-ProcessingFilter

Integration Filter

Security Enforcement Filter

Recurso Web Seguro

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.

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

Page 53: 3742360 Introduccion a Spring Framework

Spring Framework:

Fin de Parte I

Page 54: 3742360 Introduccion a Spring Framework

Agenda

Contenidos parte II:

� Integración con OpenSymphony Quartz

� Integración con JavaServer Faces

Page 55: 3742360 Introduccion a Spring Framework

Spring Framework:

Parte II

Page 56: 3742360 Introduccion a Spring Framework

6. Quartz: scheduling jobs con Quartz desde Spring.

7. JSF: integración con JavaServer Faces.

Spring Framework: Parte II

Page 57: 3742360 Introduccion a Spring Framework

6. Quartz: scheduling jobs con Quartz desde Spring.

7. JSF: integración con JavaServer Faces.

Spring Framework: scheduling

Page 58: 3742360 Introduccion a Spring Framework

Spring Framework: scheduling

id

grupo

id_jobDetail

id_grupo_jobDetail

cron expressions

org.quartz.Joborg.quartz.Job

MyJob

org.quartz.Joborg.quartz.Joborg.quartz.Joborg.quartz.Job

org.quartz.JobDetail

org.quartz.Scheduler org.quartz.Trigger

id

grupo

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

addJob()

scheduleJob()

org.quartz.JobDetail

org.quartz.Job

org.quartz.JobDetail

� configuración de trabajos con la API de OpenSymphony Quartz

• Programar trabajos (jobs) de ejecución automática a nte eventos o por calendario:

Page 59: 3742360 Introduccion a Spring Framework

Spring Framework: scheduling• Programar jobs cableando (wiring) de clases que son parte de Spring:

� configuración de trabajos Quartz con Spring

<scheduler.xml>

Page 60: 3742360 Introduccion a Spring Framework

Spring Framework: scheduling• Ejemplos de expresiones cron utilizadas por Quartz pa ra programar jobs:

Fire every November 11th at 11:11am. 0 11 11 11 11 ?

Fire at 12pm (noon) every 5 days every month, starting on the first day of the month. 0 0 12 1/5 * ?

Fire at 10:15am on the third Friday of every month 0 15 10 ? * 6#3

Fire at 10:15am on every last friday of every month during the years 2002, 2003, 2004 and 2005 0 15 10 ? * 6L 2002-2005

Fire at 10:15am on the last Friday of every month 0 15 10 ? * 6L

Fire at 10:15am on the last Friday of every month 0 15 10 ? * 6L

Fire at 10:15am on the last day of every month 0 15 10 L * ?

Fire at 10:15am on the 15th day of every month 0 15 10 15 * ?

Fire at 10:15am every Monday, Tuesday, Wednesday, Thursday and Friday 0 15 10 ? * MON-FRI

Fire at 2:10pm and at 2:44pm every Wednesday in the month of March. 0 10,44 14 ? 3 WED

Fire every minute starting at 2pm and ending at 2:05pm, every day 0 0-5 14 * * ?

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

0 0/5 14,18 * * ?

Fire every 5 minutes starting at 2pm and ending at 2:55pm, every day 0 0/5 14 * * ?

Fire every minute starting at 2pm and ending at 2:59pm, every day 0 * 14 * * ?

Fire at 10:15am every day during the year 2005 0 15 10 * * ? 2005

Fire at 10:15am every day 0 15 10 * * ? *

Fire at 10:15am every day 0 15 10 * * ?

Fire at 10:15am every day 0 15 10 ? * *

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

Meaning Expression

Page 61: 3742360 Introduccion a Spring Framework

6. Quartz: scheduling jobs con Quartz desde Spring.

7. JSF: integración con JavaServer Faces.

Spring Framework: JSF

Page 62: 3742360 Introduccion a Spring Framework

Spring Framework: JSF

• 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.

• JavaServer Faces (JSF):� components based framework.

� event-driven components.

� multiplataforma, multidispositivo.

�parte de J2EE 1.5

Page 63: 3742360 Introduccion a Spring Framework

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

Page 64: 3742360 Introduccion a Spring Framework

• 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: JSF

Page 65: 3742360 Introduccion a Spring Framework

Spring Framework:

Fin de Parte II

Page 66: 3742360 Introduccion a Spring Framework

Spring Framework: autores

Spring FrameworkRod Johnson, Juergen Hoeller, Alef Arendsen, Colin Sampaleanu, et al.

Acegi Security for SpringBen Alex

HibernateGavin King et al.

OpenSymphony QuartzJames House, Jasper Rosenberg, Aaron Craven.

Page 67: 3742360 Introduccion a Spring Framework

Spring Framework: referencias

Spring in Action , Walls-BreidenbachSpring Framework referenceAcegi referenceQuartz documentationData Access with the Spring Framework , Juergen HoellerApache Axis user guidePOJOs in Action , RichardsonSpring and JavaServer™Faces Technology: Synergy or Super fluous?

Page 68: 3742360 Introduccion a Spring Framework

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 AspectJhttp://www.infoq.com/articles/Simplifying-Enterprise-Apps

Building JavaServer Faces Applications with Spring and Hibernatehttp://developers.sun.com/learning/javaoneonline/2007/pdf/TS-7082.pdf

Page 69: 3742360 Introduccion a Spring Framework

Spring Framework: propiedad intelectual

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

Page 70: 3742360 Introduccion a Spring Framework

Spring Framework: fin de presentación

www.palermo.edu