Post on 11-Apr-2015
description
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 üüeroeroaguero.martin@gmail.com
versión 1.1
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
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
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?
• 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
Spring Framework: arquitectura
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.)
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.
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
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()
HolyGrailQuest
new HolyGrailQuest()
RescueDamselQuest
new RescueDamselQuest()
x alto acoplamiento
x difícil testeo unitario
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
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
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
Spring Framework: AOP• Típicas invocaciones a funcionalidades system-wide
LoggingModule
SecurityModule
TransactionManager
Student Service
Course Service
Instructor Service
Billing Service
Content Service
Spring Framework: AOP• Usando AOP
Logging Module
Security Module
Transaction
Manager
Student Service
Course Service
Billing Service Content Service
Instructor Service
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
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 knightTargetejecuta su método
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
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
DataAccessException
DataAccessResourceFailureException
CleanupFailureDataAccessException
UncategorizedDataAccessException
DataIntegrityViolationException
InvalidDataAccessApiUsageException
InvalidDataAccessResourceUsageException
DataRetrievalFailureException
ObjectRetrievalFailureException
OptimisticLockingFailureException
ObjectOptimisticLockingFailureException
DeadLockLoserDataAccessException
TypemismatchDataAccessExceptionIncorrectUpdateSemanticsDataException
� conversión de excepciones propietarias a:
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).
Spring Framework: Hibernate� acceso a métodos DAO desde HibernateTemplate:
set SessionFactory
uso de método find()
<hibernate.xml>
<orm.dao.ProductDaoImpl.java>
Spring Framework: Hibernate� demarcado programático de transacciones
� Requiere una instancia de PlatformTransactionManager.
set de myTxManagery productDao al servicio
Spring Framework: Hibernate� demarcado programático de transacciones
set de myTxManagery 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 archivoexterno sin afectar la implementación.
Spring Framework: Hibernate� demarcado declarativo de transacciones
<hibernate-tran.xml>
método a interceptar
configura niveles de transaccionabilidad
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>
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 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.
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>
� 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>
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
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: 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
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
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)
Spring Framework: seguridadAuthentication
ManagerPasswordDaoAuthenticationProvider es la implementación específica para autenticar contra un servidor LDAP. Delega en LdapPasswordAuthenticationDao la verificación de credenciales.
Spring Framework: seguridadAuthentication
ManagerEl bean de LdapPasswordAuthenticationDao es cableado a un bean PasswordDaoAuthenticationProvider.
� Wiring de PasswordDaoAuthenticationProvider
� Interface que debe implementar
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
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:
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
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
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:
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.
Spring Framework:
Fin de Parte I
Agenda
Contenidos parte II:
� Integración con OpenSymphony Quartz
� Integración con JavaServer Faces
Spring Framework:
Parte II
6. Quartz: scheduling jobs con Quartz desde Spring.
7. JSF: integración con JavaServer Faces.
Spring Framework: Parte II
6. Quartz: scheduling jobs con Quartz desde Spring.
7. JSF: integración con JavaServer Faces.
Spring Framework: scheduling
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:
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 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
6. Quartz: scheduling jobs con Quartz desde Spring.
7. JSF: integración con JavaServer Faces.
Spring Framework: JSF
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
Spring Framework: JSF• configuración de archivo faces-config.xml de 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: JSF
Spring Framework:
Fin de Parte II
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.
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?
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
Spring Framework: propiedad intelectual
Todas las marcas mencionadas son propiedad exclusiva de sus dueños.
Spring Framework: fin de presentación
www.palermo.edu