You are on page 1of 102

1.

INTRODUCCIÓN A SPRING FRAMEWORK

CAPÍTULO 1
INTRODUCCIÓN A SPRING FRAMEWORK
1. INTRODUCCIÓN A SPRING

HISTORIA
Creado por Rod Johnson.
1.0 Marzo 2003.
3.0 Diciembre 2009.
4.0 Enero 2013.
5.0 Septiembre 2017
Página oficial:
(www.springsource.org).
1. INTRODUCCIÓN A SPRING

INTRODUCCIÓN A SPRING
Framework que contiene clases para resolver muchos problemas que se
presenten en el desarrollo de un sistema informático.
Utilizado por excelencia para el desarrollo de aplicaciones empresariales.
Spring es utilizado en diversos proyectos como Instituciones Bancarias,
Aseguradoras, Instituciones Educativas entre otros, una de las mayores
ventajas de Spring, es la forma modular en el que fue creado, permitiendo
habilitar/deshabilitar las características a utilizar según se requiera y simplificar
el desarrollo JEE.
1. INTRODUCCIÓN A SPRING

SPRING FRAMEWORK
 Compañía SpringSource.
 Framework.
 Contenedor de Inversión de Control (IoC) usando Java Reflexión.
 Inyección de dependencias.
1. INTRODUCCIÓN A SPRING

PRINCIPIO DE INYECIÓN DE DEPENDENCIA


 Abstracciones sobre implementaciones
 Ayudará a crear código desacoplado.
 El patrón (IoC) es una aplicación de este principio.
1. INTRODUCCIÓN A SPRING

CARACTERÍSTICAS DE SPRING
Spring permite desarrollar aplicaciones flexibles, altamente cohesivas y
con un bajo acoplamiento.

Spring permitió simplificar el desarrollo JEE al utilizar clases Java Simples


(POJO – Plain Old Java Object) para la configuración de servicios.
Debido a que muchos proyectos muestran las mismas tareas a realizar
una y otra vez, tales como Localización de Servicios, Manejo de
Transacciones,
Manejo de Excepciones, Parametrización de la aplicación, entre muchos
más.

Para lograr lo anterior el framework se basa en dos conceptos


fundamental:
• DI (Dependency Inyection): Este patrón de diseño permite suministrar
objetos a una clase (POJO) que tiene dependencias, en lugar de ser ella
misma sea quien los proporcione.
• AOP (Aspect Oriented Programming): AOP es un paradigma de
programación que permite modularizar las aplicaciones y mejorar la
separación de responsabilidades entre módulos y/o clases.
Las características anteriores son la base para la creación de contenedores
ligeros (lightweight containers). Spring es uno de los contenedores ligeros más
completos y populares al día de hoy.
Se puede utilizar todos los módulos o alguno de ellos dependiendo
la naturaleza del proyecto a desarrollar.
Spring Core: Este módulo provee la funcionalidad básica de la fábrica de Spring. El
componente principal es BeanFactory, el cual aplica el concepto de Inversion of Control
(IoC) o también conocido como Dependency Injection (DI).
Spring Context: Aquí es donde se realiza la configuración del framework. Incluye la
configuración de servicios empresariales tales como JNDI, EJB, Internacionalización,
validación, entre varios más.
Spring AOP: Permite aplicar los conceptos de Programación Orientada a Aspectos (AOP),
además incluye clases de soporte para el manejo transaccional, la seguridad, entre varias
clases más, permitiendo desacoplar estas características de nuestra aplicación.
Spring DAO: Permite aplicar conceptos de la capa de datos Data Access Object (DAO) a
través de POJOs (Plain Old Java Object), abstrayendo la complejidad, permitiendo crear un
código JDBC más limpio y simple.
Spring ORM: Permite integrarse con tecnologías tales como JPA, Hibernate, entre otras.
Spring Web: Permite el desarrollo y la integración con tecnologías como Struts, JSF,
Tapestry, entre otros.
PORTAFOLIO DE SPRING
Spring posee un amplio portafolio (aplicaciones) para el desarrollo de
aplicaciones:
Spring web flow.- construido bajo Spring MVC sirve para gestionar
flujos entre páginas web.
Spring web services.- creación servicios web basado en el intercambio
de documentos.
Spring security.- módulo de seguridad para aplicaciones web.
Spring Batch.- crear procesos batch formado por una secuencia de
pasos bien definidos.
Spring social.- permite conectividad a redes sociales Facebook, twiter
power plus linkedin.
Spring Mobile .- extensión de MVC con el objetivo de simplificar el
desarrollo de aplicaciones web.
1. INTRODUCCIÓN A SPRING

ARQUITECTURA MULTICAPAS
Una aplicación empresarial en Java se compone de distintas
capas:
CLIENTE SERVIDOR

Capa Web
Capa Cliente Capa Negocio Capa de Datos
(Servidor web)

Navegadores Servlets, Jsf, JDBC,


web Jsp, Spring Ejb’s, Spring Hibernate,
MVC Spring JDBC
1. INTRODUCCIÓN A SPRING

A continuación la definición de estas capas.


Capa Web Cliente: La capa del Cliente es donde el cliente interactúa
por medio de un navegador Web, un cliente móvil, una aplicación de
escritorio, entre otros.
Capa Web Servidor: la capa web que puede residir en un servidor web,
las tecnologías mas básicas que podemos encontrar en este servidor
web son los JSP’s y los Servlets.
Capa de Negocio: en esta capa podemos encontrar tecnología como
son los Enterprise Java Beans (EJBs) o frameworks como Spring.
Capa de Datos: aquí vamos a encontrar tecnologías como JDBC,
Hibernate, entre otras. Este código nos va a permitir comunicarnos con
nuestra base de datos para leer y almacenar información en ella.
1. INTRODUCCIÓN A SPRING

Ejercicio práctico básico.


CAPÍTULO 2
CONFIGURACIÓN DE SPRING
CONFIGURACIÓN DE SPRING

Cohesión y Acoplamiento
Cohesión.- la cohesión es la medida en la que un componente se
dedica a realizar solo la tarea para la cual fue creado, delegando las
tareas complementarias a otros componentes.
Acoplamiento.- es la medida de dependencia entre componentes.
Cohesión

Acoplamiento
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).
PATRONES DE DISEÑO
MVC.- es una propuesta de diseño de software utilizada para
implementar sistemas donde se requiere el uso de interfaces de
usuario.
DAO.- encapsula el acceso a la base de datos. Por lo que cuando la
capa lógica de negocio necesite interactuar con la base de datos, va a
hacerlo a través de la API que le ofrece DAO.
DTO.- (Data Transfer Object) son utilizados por DAO para transportar
los datos desde la base de datos hacia la capa de lógica de negocio y
viceversa.
CAPA CAPA DE SERVICIO CAPA ACCESO A
PRESENTACION DATOS BASE DE
SERVICE LOCATOR DATOS
MVC DTO DAO
DTO BUSINESS DELEGATE DTO
PROGRAMACIÓN ORIENTADA A INTERFACES

CAPA DE SERVICIO CAPA ACCESO A DATOS

Implementación 1
Bean Servicio
daoHibernate
BASE DE
DATOS
IDao IDao

daoIbatis
Implementación 1
La programación hacia interfaces significa que podemos cambiar la
implementación de alguna clase de manera programática o declarativa.
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 podemos observar que se
puede inyectar una implementación del DAO utilizando ya sea el
framework de Hibernate o de iBatis, 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 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 también de
Spring.
CONTENEDOR DE SPRING (CONTENEDOR LIJERO)

Aplicación Java FABRICA DE SPRING


daoHibernate
dataSourc
Bean Dependencia Inyectada e
Presentación beanServicio

IServicio daoHibernate Dependencia Inyectada

Ya contiene las dataSource


dependencias
inyectadas Configuración de
beans y sus
dependencias
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.
CREACIÓN Y OBTENCIÓN DE OBJETOS CON SPRING
CICLO DE VIDA DE BEANS EN SPRING

Instancia de Inyecta valores y ApplicationContextAware


referencias BeanNameAware’s BeanFactoryAware’s
un bean (Populate ’s
setBeanName() setBeanFactory()
(instantiate) properties) setApplicationContext()

Pre-Initialization InitializingBean’s Call Custon Post initialization


BeanPostProcessors afterPropertiesSet() Init-method BeanPostProcessors

Bean listo para usarse Se destruye el contenedor

DisposableBean’s Call custom


Destroy() Destroy-method
Ejercicio práctico:
Aplicación Java sin Spring y sin programación orientada a
interfaces Dependencia
Instancia el bean inyectada
Traductor 1
manualmente manualmente Interprete
Interprete
español o español
Clase de prueba
ingles
Traductor 1

Interprete
inglés
Si no tenemos Dependencia
una interfaz de inyectada
El bean de traductor
Interprete NO manualmente
NO contiene las
dependencias, por lo podemos
que manualmente cambiar de
debemos instanciar e interprete
inyectar por nuestra fácilmente
cuenta
Ejercicio práctico:
Aplicación Java con Spring y programación orientada a
interfaces Fabrica de Spring
Implementación
Inglés
Traductor 1 Dependencia
Clase de prueba

Intérprete
inyectada
intérprete
Traductor 1
Recupera el bean
de fábrica Implementación
Español
El bean de traductor ya Spring configura los beans y
contiene todas las dependencias Al manejar interfaces
dependencias inyectadas podemos cambiar fácilmente
la implementación sin afectar
el código del traductor
Ejercicios práctico versión 1 y 2
CAPÍTULO 3
INYECCIÓN DE DEPENDENCIAS (DI)
COMPONENTES

Capa web Capa negocio Capa de datos


AbstractDao
UsuarioServiceImpl

UsuarioDaoImpl PersonaDaoImpl
Index.xhtml
IUsuarioServiceService
IUsuarioDao IPersonaDao
Login.xhtml Controlador
Usuario
PersonaServiceImpl
Administration.xhtml
Usuario Persona

IPersonaService
DaoException

UsuarioDaoException PersonaDaoException
INVERSIÓN DE CONTROL
“No me llames, yo te llamaré”

TRADICIONAL INVERSIÓN DE CONTROL

Inyector de
Main Main dependencias
• Uno de los mayores beneficios de la inversión de control es la separación
de módulos y la forma en cómo se conectan dichos componentes. Esto
permite minimizar la dependencia entre ellos.
• La inyección de dependencias (DI) es una forma de Inversión de Control.
La tarea del contenedor es inyectar las dependencias a cada objeto
según se haya plasmado ya sea en el archivo de configuración o por
medio de anotaciones Java.
• En la figura el Inyector de Dependencias (contenedor) es el responsable
de revisar cada una de las dependencias
PROBLEMA DE RELACIONES ENTRE CLASES

Clase
Hace uso de
Servicio A

Clase A
Hacer uso de

Clase
Servicio B
Desventajas:
• Para reemplazar o actualizar las dependencias se debe cambiar el
código de la Clase A.
• Las clases normalmente contienen código repetido para crear,
localizar y gestionar sus dependencias.
CONCEPTO DE INYECCIÓN DE DEPENDENCIAS
Proceso general

1 Crea la instancia
Fabrica ClaseA
(Builder)

ServicioA
Inyecta una 2
3 Inyecta la dependencia clase concreta
Utiliza una interface

IServicioA
En la figura existen dos nuevos conceptos, el primero es el concepto de la
Fábrica y el segundo es el manejo de interfaces para los servicios.
La Fabrica o Builder (1) nos permite gestionar las dependencias que se necesitan
para terminar de instanciar nuestras clases, en este caso la Clase A necesita de
una dependencia del Servicio A, el cual es proporcionada por la fábrica (2).
Como se puede observar la Clase A no tiene una relación directa con la clase
concreta (Servicio A) sino con una interfaz IServicio A (3).
Lo anterior nos permite lograr de manera más eficiente los siguientes puntos:
• Desacoplar las dependencias, permitiendo cambiar o actualizar en cualquier
momento la implementación los servicios
• Escribir clases que dependen de otras clases cuya implementación no es
conocida en tiempo de compilación
• Poder probar las clases de manera aislada, sin utilizar las dependencias
• Eliminar la responsabilidad de las clases a crear y localizar las dependencias
FABRICA DE SPRING (BeanFactory)
Viene con varias implementaciones de la fabrica de beans.
Se divide en 2 categorías:
Bean Factories: retornan los Servicios mas simples.
Application Contexts: retornan los Servicios mas complejos.
FORMAS DE OBTENER EL APPLICATION CONTEXT
Existen varias maneras de cargar el archivo descriptor de Spring:
ClassPathXmlApplicationContext: Carga el Application Context localizado en el
classpath de la aplicación.

FileSystemXmlApplicationContext: Carga el archivo de Spring del file system


(sistema de archivos) de nuestro sistema operativo.

XmlWebApplicationContext: Carga el archivo de Spring a partir del contenedor Web


(web.xml)
BEANS EN SPRING
Es utilizado para referirse a cualquier componente administrado por la fabrica
de Bean de Spring.
• Dichas clases siguen la terminología de los JavaBeans:
✓Constructor vacio.
✓Atributos privados.
✓Metodos de acceso getters/setters por cada atributo.

• Al configurar un bean de Spring se puede especificar:


✓El nombre completamente calificado de la clase (obligatorio).
✓La referencia hacia otros beans (dependencias).
✓Entre otros tipos de configuraciones posibles.
CONFIGURACION DEL ARCHIVO DESCRIPTOR
ApplicationContext.xml
NAMESPACES EN SPRING
FORMAS DE INYECCION DE DEPENDENCIAS
Existen dos formas comunes para realizar la inyección de
dependencias:
✓Por el constructor de la clase.
✓Por medio del método setter de la propiedad.
La configuración de la inyección puede realizarse de dos maneras:
➢Por el archivo xml.
➢Por anotaciones en las clases Java.
INYECCION DE DEPENDENCIAS POR CONSTRUCTOR
INYECCION DE DEPENDENCIAS POR SETTER
VENTAJAS DE LA INYECCION DE DEPENDENCIAS
➢Reducción de dependencias entre objetos.
➢El código se esta auto documentando, ya que describe sus
dependencias.
➢Se puede aplicar una configuración de dependencias en un solo
lugar.
➢Pruebas unitarias mas simples.
➢Reduce la complejidad y orienta la programación hacia el uso de
interfaces y no hacia clases concretas.
CARACTERÍSTICAS DE LA INYECCIÓN DE INDEPENDENCIA
➢Manejo de Instancias en distintos alcances: Instancias compartidas,
obtenidas a partir de un pool, etc.
➢Manejo de dependencias vía listas, mapas o estructuras set.
➢Soporte para conversión de tipos
➢Métodos de tipo callback no intrusiva. Un método callback es
cuando se envía código ejecutable (ej. Una clase) como un argumento
a otro método.
➢Instanciamiento de objetos vía métodos de la fábrica de Beans.
TIPOS DE INYECCION DE COLECCIONES
ALCANCE DE BEANS EN SPRING
INYECCION DE DEPENDENCIAS POR ANOTACIONES
Reducen el código xml en el archivo de configuración.
Existen anotaciones dependiendo de la capa a utilizar o la tarea a realizar:
• Anotaciones del contenedor:
@Autowire
@PostConstruct
@PreDestroy
• Anotaciones en la capa de negocio
@Transactional
• Anotaciones en la capa Web
@Controller
@RequestMapping
CONCEPTOS A REVISAR
Inyección de dependencias automáticas (Autowiring).
Búsqueda automática de beans (Autodiscovery).
Inyeccion de dependencias por anotaciones.
AUTOWIRING EN SPRING
Principio de NO AMBIGÜEDAD.
Introspección de clases.
Existen 4 tipos:
Por nombre: Intenta autoinyectar beans que tiene el mismo ID con el nombre
del atributo.
Por tipo: Intenta autoinyectar beans cuyo tipo sea compatible con el del tipo
del atributo.
Por constructor: Intenta autoinyectar beans cuyos tipos en el constructor sean
compatibles.
Autodeteccion: Intenta autoinyectar por Constructor, si no lo encuentra intenta
la inyección por Tipo.
INYECCION CON ANOTACIONES
• Permite eliminar la declaración explicita de las inyecciones en el archivo de
Spring.
• El Autowiring con anotaciones se debe habilitar agregando el namespace de
context y posteriormente agregar el elemento:

• Se pueden utilizar dentro de la clase Java en atributos, metodos, o


constructores. Pueden ser:
@Autowired (Propietaria Spring)
@Inject o @Resource (Estándar de JEE)
• Si se desea agregar un nombre al bean a inyectar se puede utilizar:
@Autowired
@Qualifier(“guitarra”)
private Casa casa
AUTODISCOVERING CON SPRING
• Permite eliminar prácticamente la necesidad de declaración del bean en el
archivo de Spring.
• El Autodiscovering se debe habilitar agregando el namespace de context y
posteriormente agregar el elemento:

• Posee mas características que el anterior.


• Las anotaciones a utilizar en las clases Java pueden ser:
@Component La mas general.
@Controller Indica que la clase es un controlador de Spring.
@Service Indica que es una clase de Lógica de Negocio.
@Repository Indica que la clase de entidad.
DECLARAR Y FILTRAR COMPONENTES CON AUTODISCOVERING
• Se debe declarar el paquete Java que contiene los beans a agregar en la
fabrica .
• Ejemplo: si queremos agregar todos los beans en el paquete com.profesor,
debemos declara lo siguiente:

A continuación ejercicio practico nivel 4


CAPITULO 3
PROGRAMACION ORIENTADA A ASPECTOS (AOP)
INTRODUCCION

No intrusiva

No intrusiva
¿Cuál es la diferencia entre AOP y OOP?
La diferencia clave entre OOP y AOP es que el enfoque de OOP es
dividir la tarea de programación en objetos, que encapsulan datos y
métodos, mientras que el enfoque de AOP es dividir el programa en
cuestiones transversales. De hecho, AOP no es un competidor de OOP,
porque surgió del paradigma de OOP. AOP amplía OOP al abordar
algunos de sus problemas. AOP introduce formas claras de
implementar las cuestiones transversales (que podrían haberse
distribuido en varios lugares en la implementación de OOP
correspondiente) en un solo lugar. Por lo tanto, AOP hace que el
programa sea más limpio y esté más débilmente acoplado
MODULOS Y SU RESPONSABILIDAD

Modulo
Servicio de Manejo
impresión Transaccione
s

Servicio de
mensajería
Modulo
Seguridad

Servicio de
facturación

Modulo
Servicio Logging
Empleados
FUNCIONALIDAD TRANSVERSAL (cross-cutting)
Los aspectos se activan automáticamente cada vez que un componente de negocio se ejecute

Modulo Manejo Transacciones= Aspecto


Modulo Seguridad= Aspecto
Modulo Logging= Aspecto
TERMINOLOGIA AOP
La funcionalidad de un Aspecto (advice) es agregado durante la ejecución de un programa en
uno o mas join points.

Advice

Pointcu
Ejecución del programa

t
Join points
ESQUEMA GENERAL DE EJECUCION DE AOP
Lógica de Negocio Logica Advice
(Impartir clases) Aspecto Logging
(Estudiantes)
<aop:before
try {
ANTES Method:”sentarse”
poincut-ref=“ejecutar” /> estudiantes.sentarse();

profesor.ejecutar()
; Se ejecuta Lógica de Negocio

<aop:after
Method:” darOpiniones” estudiantes.darOpiniones();
poincut-ref=“ejecutar” />
DESPUES
<aop:after-throwing
} catch(Exception e) {
Method:” quejarse”
estudiantes. quejarse()
poincut-ref=“ejecutar” />
}
ADVICE EN TIEMPO DE EJECUCION
Los Aspectos en Spring son realizados en tiempo de ejecución y están envueltos por una clase
Proxy.
aop: Clase Proxy
before
Estudiante
Método
objetivo
Clase Objetivo
(target)
Cliente
(Caller)
Profesor

profesor.ejecutar()
profesor.ejecutar() ;
; aop: after-
aop: after throwing
SELECCIÓN DE JOIN POINTS CON POINCUTS
IMPLEMENTANDO POINCUTS

Tipo del
ADVICE: Retorna método Método Cualquier
cualquier tipo especificado indicado argumento

execution (* profesor.asignatura.ejecutar(..))

Especificación del
Dispara el evento en la
método coincidente
ejecución del método
coincidente
DECLARACION DE ASPECTOS EN XML
EJERCICIO PRACTICO

Objetivo del ejercicio: Agregar funcionalidad AOP


AROUND, INTRODUCTIONS Y ANOTACIONES EN
AOP
AROUND
ADVICE
Método llamado por
proceed
EJERCICIO
PRACTICO:
Objetivo: agregar funcionalidad AOP con el muso de around advice

Salida del proyecto:


PASO DE PARAMETROS A LOS METODOS OBJETIVO
• Se define un pointcut indicando cual es el argumento a enviar.
• Posteriormente en el advice se indica cual es el argumento (previamente
definido en el pointcut) que queremos enviar al método objetivo.

EJERCICIO PRACTICO:
ANOTACION DE ASPECTOS
EJERCICIO PRACTICO:
LECCION 4 JDBC CON SPRING
INTRODUCCIO
N
Se refiere al acceso a datos y la interacción entre la capa de acceso a datos y la
capa de negocio o servicio.

PUNTOS A CONSIDERAR:
Hace usos de plantillas para reducir código fuente.
Mejor manejo de excepciones.
Integración transparente con frameworks: JPA, JPO, IBATIS,HIBERNATE
OBJETIVO DE JDBC EN SPRING
Promueve la programación hacia interfaces.

Clase Servicio Interface DAO

Implementación DAO
EXCEPCIONES EN JDBC
TEMPLATE DATA ACCESS
PLANTILLAS DE ACCESO A DATOS
CONFIGURACION GENERAL DE SPRING JDBC

DataSource
Spring
config Coloca
Usa
Usa
Usa
Bean Factory
JDBCTemplate DaoImpl

S Extends

DaoImpl

SPRING FRAMEWORK Base de


Usa
datos
ServicioImpl
ARQUITECTURA MULTICAPAS
CONFIGURACION DE DATASOURCE EN SPRING
Ejemplo de un DataSource utilizando JDBC:

Ejemplo de un DataSource utilizando JNDI:

Ejemplo de un DataSource utilizando Pool de conexiones:


METODOS CALLBACK EN SPRING
Es una referencia a un código ejecutable que se envía como argumento a una función, con el
objetivo de ejecutarse posteriormente.
TIPOS DE PLANTILLAS EN JDBC EN SPRING

A partir de la versión 4.x tenemos:

JdbcTemplate.- La mas básica de Spring.

NamedParameterJdbcTemplate.- ejecuta consultas manejando parámetros por nombre en


lugar de por su índice.

Ejercicio Practico:

JDBC version1.
Ejercicio 2:
Objetivo: agregar casos de alta, baja, cambios y selección de datos de
la tabla persona.
Ejercicio 3,4:
Consultas de campos aislados con Spring JDBC.
Ejercicio 5,6,7:
Insertar, actualizar, eliminar datos.
TRANSACCIONES EN SPRING
TRANSACCION
Se conoce como una unidad de trabajo atómica, es decir, se realiza todo o nada
del método transaccional.

Query A
DAO A Base de
datos A

Servicio
Begin transaction

Commit/rollback

Query B
DAO B Base de datos
B
TRANSACCION
Se conoce como una unidad de trabajo atómica, es decir, se realiza todo o nada
del método transaccional.

commit
Base de
datos

1.- Verificar cupos


disponibles.
Matricular
2.- Reservar un cupo.
Alumno
3.- Realizar el pago.
4.- Recibir boleto. rollback
Base de datos
CARACTERISTICAS DE UNA TRANSACCION
Ejemplo código JDBC
ACRONIMO ACID
Atomic.- Las actividades de un método se consideran como una unidad de
trabajo (Atomicidad).
Consistent.- Una vez que termina la transacción la información queda en
estado consistente, ya que se realiza todo o nada.
Isolated.- Múltiples usuarios pueden utilizar los métodos transaccionales, sin
embargo debemos prevenir errores por accesos múltiples, aislando en la
medida posible nuestros métodos transaccionales.
Durable.- Sin importar si hay una caída del servidor, una transacción exitosa
debe guardarse y perdurar posterior al termino de una transacción.
OPCIONES DE TRANSACTION MANAGER EN SPRING
Se conoce como una unidad de trabajo atómica, es decir, se realiza todo o nada
del método transaccional.
DataSource JDBC
Transaction Manager

HibernateTransaction Hibernate
Plataforma Manager
para el
manejo JPA Transaction JPA
transaccional Manager

JTA Transaction JTA


Manager
OPCIONES DE TRANSACTION MANAGER EN SPRING
TIPOS DE TRANSACTION MANAGER EN SPRING
JDBC: Se utiliza DataSourceTransactionManager:

Hibernate: Se utiliza HibernateTransactionManager:

JPA: Se utiliza JpaTransactionManager:

JTA: Se utiliza JtaTransactionManager:


ATRIBUTOS DE UNA TRANSACCION EN SPRING

Propagación Aislamiento

Atributos
Transacción
declarativa
Solo lectura
Reglas
(read-only) Rollback

Timeout
PROPAGACION DE UNA TRANSACCION
CONFIGURACION

Están definidas en la interface:


org.springframework.transaction.TransactionDefinition
AISLAMIENTO DE UNA TRANSACCION
Posibles problemas cuando tenemos acceso concurrente de métodos transaccionales
Lecturas de tipo Non-
Lecturas de tipo Dirty Lecturas de tipo
repetable (No
(Sucia) Phantom (Fantasma)
repetible)
CONFIGURACION DEL AISLAMIENTO EN SPRING
CONFIGURACION DE TRANSACCIONES EN EL ARCHIVO
applicationContext.xml
CONFIGURACION DE TRANSACCIONES CON ANOTACIONES
Configuración del archivo applicationContext.xml para activar las
Anotaciones Java:

Especificar:

En las clases Java se utiliza la anotación:


Se pueden indicar atributos de una transacción en la misma anotación,
ya sea en la clase o en el método:
Ejercicios:

Manejo Transaccional en Spring


2 ejercicios
SpringJDBCV3

You might also like