SlideShare una empresa de Scribd logo
1 de 105
CDI
Context and Dependency Injection

Ing. Jose Diaz Diaz
JOEDAYZ
Acerca de
Ing. José Amadeo Martin Díaz Díaz
CEO JoeDayz.pe & Docente en EPE UPC
Formación
BlueStar Energy (2007)
Bristol Myers Squibb (2006)
Trans Solutions Systems (2003 - 2005)
Telefonica Servicios Internet (2000 - 2002)
Egresado de la Pontificia Universidad Católica del Perú (1994 - 2000)
@jamdiazdiaz
JoeDayz.pe Partnership
Introducción
La primera versión de Java EE (J2EE) introdujo el
concepto de inversión de control
No fue hasta Java EE 5 y 6 que el API para
administración de ciclo de vida e inyección de
dependencias estuviese robusta.
Hoy CDI nos da un modelo de programación donde
cada componente Java EE puede ser inyectable,
interceptable y administrable.
CDI esta construido sobre la base de “pobre
acoplamiento y fuerte tipado"
¿Que son los Beans?
Entendiendo a los Beans
Java SE tiene JavaBeans
Java EE tiene Enterprise Java Beans
Otros: Servlets, SOAP WS, RESTful WS,
entidades
Beans Manejados
POJOs
Entendiendo a los Beans
Los Bean Manejados son objetos administrados
por el contenedor que soportan un conjunto
basico de servicios: inyección de recursos,
administración de ciclo de vida, e intercepción.
Introducidos en Java EE 6
Entendiendo a los Beans
Por ejemplo un EJB puede ser un Bean
Manejado con servicios extra
Un Servlet puede ser un Bean Manejado con
servicios extra (diferentes al del EJB), etc. etc.
Entendiendo a los Beans
Los Beans son objetos CDI que son
construidos sobre la base del modelo de Bean
Manejados.
Tienen contextos definidos, soporte a inyección
de dependencias, intercepción, decoración,
son especializados con el uso de qualifiers y
pueden ser usados en EL.
Entendiendo a los Beans
En resumen, cualquier clase Java que tenga un
constructor por defecto y se ejecute en un
contenedor es un bean.
De esta forma los JavaBeans y EJBs pueden
tomar ventaja de los servicios CDI
Inyección de
Dependencias
Dependency Injection
(DI)
Es un patrón de diseño que desacopla
componentes dependientes.
Termino concebido por Martin Fowler.
Java EE 5 introdujo inyección para recursos como
EJBs, entity managers, data sources, fabricas JMS,
y destinos al interior de componentes como
Servlets, JSF beans y EJBs.
Así aparecieron @Resource, @PersistenceContext,
@PersistenceUnit, @EJB y @WebServiceRef
Dependency Injection
(DI)
El primer paso tomado en Java EE 5 no fue
suficiente y Java EE 6 creo dos
especificaciones diferentes para potenciar DI en
la plataforma: Dependency Injection (JSR 350) y
Context and Dependency Injection (JSR 299)
En Java EE 7 se han juntado las dos
especificaciones
Ciclo de vida de un Bean
Manejado
Scopes y Context

CDI viene con scopes predefinidos: request,
session, application y conversation
Interception
Similar a la programación orientada a aspectos
(AOP)
El AOP se logra en la plataforma, a través, de
interceptors. Estos son automaticamente
disparados por el contenedor cuando un
método de un bean manejado es invocado.
Interception
Deployment Descriptor
beans.xml y es obligatorio
Ubicado en META-INF o WEB-INF
Aquí se configura interceptors, decoradores,
alternatives, etc.
Si tu aplicación contiene diferentes jars y
deseas tener CDI para toda la aplicación. Cada
jar debe tener su propio beans.xml
¿De que trata CDI?
Resumen
CDI es importante para otras especificaciones
como Bean Validation, JAX-RS, EJB, JSF.
Pero, CDI 1.1 no sería nada sin otras como: DI
(JSR 330), Managed Bean 1.0 (JSR 342),
Common Annotations 1.2 (JSR 250),
Expression Language 3.0 (JSR 341) e
Interceptors 1.2 (JSR 318)
Historia
En el 2006 inspirado en Seam, Guice y Spring
Framework, Gavin King (creador de Seam)
lidero la especificación JSR 299 denominada
Web Beans dirigida para Java EE 6.
Web Beans ha sido renombrado a Context and
Dependency Injection 1.0 construida sobre la
base de la nueva JSR 330 : Dependency
Injection para Java 1.0 (@Inject)
Historia
Dependency Injection aporto las anotaciones:
@Inject, @Named, @Qualifier, @Scope,
@Singleton
CDI añadió nuevas características como
context management, events, decorators, e
interceptors (JSR 318). Ademas de permitir al
desarrollador extender la plataforma que era
imposible hasta entonces.
Historia
El objetivo principal de CDI es entonces:
Dar mas cohesión a la plataforma
Unir la capa web y la capa de transacciones
Que DI sea el ciudadano de primera clase
Poder agregar nuevas extensiones facilmente
En JAVA EE 7, CDI 1.1 es el fundamento para
multiples JSRs y ha recibido muchas mejoras
¿Que hay de nuevo en
CDI 1.1?
No añade nuevas características. Su objetivo es integrar CDI con
otras especificaciones.
La nueva clase CDI provee acceso programático a facilidades de
CDI fuera de un bean manejado
Interceptors, decoradores, y alternatives pueden ser prioridades
(@Priority) y ordenados para una aplicación completa
Cualquier tipo o paquete puede ser ignorado de ser considerado un
bean para CDI con @Vetoed en el tipo o paquete
El @New qualifier es deprecado y se debe en su lugar usar
@Dependent
@WithAnnotations permite una extensión para filtrar por tipos
Principales CDI
Packages
Implementación de
Referencia
La implementación de referencia para CDI es
Weld, un proyecto Open Source de JBoss
Existen otras como Apache OpenWebBeans o
CanDi (Caucho), así como Apache DeltaSpike
Escribiendo un bean CDI
Anatomía de un CDI
Bean
No es una clase non-static inner
Es una clase concreta o anotada con
@Decorator y
Tiene un constructor por defecto sin
parámetros, o declara un constructor anotado
con @Inject
Todo lo demás es opcional
Dependency Injection
Dependency Injection
@Inject

Nota en Java EE 7 aún se puede usar
@Resource, pero, deberías considerar usar
@Inject
@Inject
Puntos de Inyección
El punto de inyección puede ser en propiedad,
setter o constructor
No es necesario crear un getter/setter para un
atributo para usar inyección. No importa si es
privado.
En el caso de un constructor solo puedes tener
uno solo con @Inject
Puntos de Inyección
¿Cuándo deberías usar inyección por setter o
constructor?
No hay respuesta técnica real para esta
pregunta; depende de tu elección. Recuerda
que el contenedor es quien hace el trabajo.
Default Injection
Si en los ejemplos anteriores asumimos que
GeneradorNumero solo tiene una
implementación (IsbnGenerador). CDI puede
inyectarlo sin problemas usando @Inject
Cuando no declaras un Qualifier, el contenedor
asume el qualifier
@javax.enterprise.inject.Default.
Default Injection
Default Injection
Qualifiers

Cuando tenemos que escoger una
implementación especifica entonces usamos
Qualifiers
Qualifiers
Qualifiers
Qualifiers
Qualifiers
Qualifiers con Miembros
Que pasa si queremos tener qualifiers
combinados.
Es decir @DosDigitos, @OchoDigitos,
@DiezDigitos, @TreceDigitos
O @DosParDigitos, @OchoImparDigitos,
@OchoParDigitos, etc.
Qualifiers con Miembros

En ese caso podemos crear un solo qualifier
@NumeroDeDigitos con una enumeration como
valor y un Boolean para la paridad.
Qualifiers con Miembros
Qualifiers con Miembros
Multiples Qualifiers
Alternatives
Algunas veces tu deseas inyectar una
implementación según el escenario de
deployment.
Digamos que en el ejemplo que estamos
revisando, deseamos generar un numero falso
(mock) en un ambiente de pruebas.
Alternatives
Alternatives

Si queremos que el alternativo
funcione
tenemos que habilitarlo en
beans.xml
Producers
Hemos visto hasta ahora como un bean CDI se
inyecta en otro bean CDI.
Pero, también podemos inyectar primitivos
(long, float, …), tipos de array, o cualquier otro
POJO que no tiene CDI habilitado. Esto gracias
a los producers.
Producers
Por defecto, no podemos inyectar clases de
java.util.Date, java.lang.String. Esto debido a que
estas clases están en rt.jar y este jar no tiene un
beans.xml
Recordemos que si un archivo .jar no tiene
beans.xml bajo un META-INF, CDI no podrá
descubrir nada y el POJO no podrá tratarse como
un bean. Es decir, no podrá ser inyectable.
La única forma de hacerlo inyectable es usando
campos producers o métodos producers.
Producers
Producers
InjectionPoint API
Los atributos y tipos de retorno producidos por
@Produces no necesitan información alguna de
donde ellos serán inyectados
Pero hay otros casos en que si se necesita
saber.
Este último es el caso de
java.util.logging.Logger.
InjectionPoint API
Producer
Disposers
Hemos usado producers para crear tipos o
POJOs para que sean inyectados. Pero, no
hemos tenido que destruirlos o cerrarlos una
vez usados.
Algunos métodos producers necesitan objetos
que requieren explicitamente destrucción como
JDBC connections, JMS session, o entity
manager.
Para destrucción existen los disposers.
Disposers
Disposers

Gracias a los producers y disposers, ya no
tenemos
que crear y cerrar recursos
Scopes
@ApplicationScoped
@SessionScoped
@RequestScoped
@ConversationScoped
@Dependent (ciclo de vida que depende del
cliente)
Scopes
Los beans con scope @SessionScoped o
@ConversationScoped deben ser serializables,
puesto que el contenedor los pone en pausa
de rato en rato.
Si un scope no es dado. El default es
@Dependent
Conversation
Este scope guarda información del estado del
usuario, permanece entre multiples requests y
es demarcado programáticamente por la
aplicación.
Ejemplos de uso: reservas, compras en una
tienda virtual, wizard en general
Conversation
Conversation
Beans en Expression
Language
Por defecto los beans CDI no tienen un nombre
y no son resuelto vía EL binding.
Para asignarle un nombre se tiene que usar
@Named
Beans en Expression
Language
Interceptors
Los interceptors son de 4 tipos:
@AroundConstruct: Asociado con el
constructor de la clase destino
@AroundInvoke: Asociado con un metodo de
negocio especifico
@AroundTimeout: Solo para EJB timer service
@PostConstruct y @PreDestroy
Interceptors
Desde JAVA EE 6, los interceptors han
evolucionado a una especificación separada.
Ellos pueden ser aplicados a Bean Manejados,
así como a EJBs, SOAP y RESTful web services.
Interceptor en la misma
clase
Interceptor en la misma
clase
Respecto al ejemplo anterior. Solo se intercepta
métodos que sean públicos, privados,
protected o default; pero, no static o final
El método interceptor debe tener un
InvocationContext como parámetro y debe
retornar Object
El método puede arrojar excepciones
chequeadas
Interceptor en la misma
clase
Respecto al ejemplo anterior. Solo se intercepta
métodos que sean públicos, privados,
protected o default; pero, no static o final
El método interceptor debe tener un
InvocationContext como parámetro y debe
retornar Object
El método puede arrojar excepciones
chequeadas
InvocationContext
Interface
InvocationContext
Interface
Interceptor en la misma
clase
En el ejemplo anterior se ha usado
@Transactional. Este se usa para el manejo de
transacciones en CDI beans como Servlets,
JAX-RS, JAX-WS.
@Transactional es implementado via un
interceptor
Clases Interceptor
Esta opción es cuando se desea que el
comportamiento cross-cutting concerns se
debe tener en una clase separada.
Un ejemplo de esto es el Logging
Clases Interceptor
Clases Interceptor
Clases Interceptor
Si se desea que diferentes métodos sean
interceptados de una clase, se puede colocar la
referencia al interceptor en la parte superior de
la clase.
Y si se desa excluir algún metodo se usara
@ExcludeClassInterceptors
Interceptors de ciclo de
vida
Interceptors de ciclo de
vida
Encadenando y
Excluyendo Interceptors
Interceptor Binding
Interceptor Binding es solo permitido si CDI es
habilitado
Un Interceptor Binding es una anotación
definida por el usuario con la anotación
@InterceptorBinding
Interceptor Binding
Interceptor Binding
Interceptors

Los interceptors esta deshabitados por
defecto. Al igual que las alternatives, los
interceptors tienen que ser definidos en el
beans.xml del jar o módulo Java EE.
Interceptors
Priorizando Interceptors
Binding
Si bien los Interceptors binding nos dan pobre
acoplamiento de interceptors, perdemos la
posibilidad de ordenarlos.
Desde CDI 1.1 ya podemos hacerlo usando
@Priority
Priorizando Interceptors
Binding
Priorizando Interceptors
Binding
@Priority puede tomar un Integer de cualquier
valor.
La regla es que interceptors con prioridad
pequeña son llamados primero.
Java EE 7 define prioridades a nivel de la
plataforma y podemos tener interceptors
llamados antes o después de ciertos eventos.
Priorizando Interceptors
Binding
PLATFORM_BEFORE = 0: Inicio de un rango de interceptors
definidos por la plataforma Java EE
LIBRARY_BEFORE = 1000: Inicio de un rango de interceptors
definidos por extension libraries
APPLICATION = 2000: Inicio de un rango de interceptors
definidos por aplicaciones
LIBRARY_AFTER = 3000: Inicio de un rango de últimos
interceptors definidos por extension libraries
PLATFORM_AFTER = 4000: Inicio de un rango de últimos
interceptors definidos por la plataforma Java EE
Priorizando Interceptors
Binding
En Conclusión, si deseamos que nuestro
interceptor sea ejecutado antes de cualquier
interceptor de aplicación, pero después de
cualquier interceptor temprano de la plataforma
debemos escribir:
Decoradores
Los decoradores son un patrón de diseño común de
Gang of Four. La idea es tomar una clase y wrap otra
clase alrededor de ella (decorarla).
Es decir, si llamas a una clase decorada, pasamos, a
través, del decorador antes de llegar a la clase destino.
Los Decoradores son especiales para añadir lógica
adicional a un método de negocios.
Son similares a los interceptors en cierta forma, pero
son complementarios
Decoradores
Decoradores
Los decoradores deben tener un delegate
injection point anotado con @Delegate, del
mismo tipo que el bean que se esta decorando.
Esto permite al decorador invocar al objeto
delegado y adicionalmente llamar a un método
de negocio de este.
Los decoradores por defecto están
deshabilitados. Estos deben ser habilitados en
el beans.xml
Decoradores
Eventos
Los Events permite a los beans interactuar fuera
del tiempo de compilación.
Un Bean puede definir un evento, otro puede
dispararlo y otro manejar el evento
Los beans pueden estar en paquetes separados y
aún en capas separadas de la aplicación
Este es el observer/observable design pattern del
Gang of Four
Eventos
Event producers disparan eventos usando la
interface Event. Un producer lanza eventos
llamando al método fire(), pasa el objeto event y no
es dependiente del observer.
En el ejemplo que vamos a ver LibroService
dispara un event (LibroAddedEvent) cada vez que
un Libro es creado.
Este fire(libro) dispara el evento y notifica a los
metodos observer este particular evento.
Eventos
Eventos
Eventos
Demos en
https://github.com/joedayz/javaee7samples
https://github.com/joedayz/javaee7samples
https://github.com/joedayz/javaee7samples
Libros Recomendos

http://oreil.ly/1jUrX
Db

http://amzn.to/1bzie
KC
Participa en GitHub
https://github.com/javaeesamples
Gracias por su atención

JOEDAY
Z
@joedayz
www.joedayz.pe
Ing. Jose Diaz

Más contenido relacionado

La actualidad más candente

Java collections concept
Java collections conceptJava collections concept
Java collections conceptkumar gaurav
 
Core java concepts
Core java  conceptsCore java  concepts
Core java conceptsRam132
 
8b Curso de POO en java - paso de diagrama clases a java 1
8b Curso de POO en java - paso de diagrama clases a java 18b Curso de POO en java - paso de diagrama clases a java 1
8b Curso de POO en java - paso de diagrama clases a java 1Clara Patricia Avella Ibañez
 
Basic Concepts Of OOPS/OOPS in Java,C++
Basic Concepts Of OOPS/OOPS in Java,C++Basic Concepts Of OOPS/OOPS in Java,C++
Basic Concepts Of OOPS/OOPS in Java,C++Guneesh Basundhra
 
JavaScript - Chapter 7 - Advanced Functions
 JavaScript - Chapter 7 - Advanced Functions JavaScript - Chapter 7 - Advanced Functions
JavaScript - Chapter 7 - Advanced FunctionsWebStackAcademy
 
Virtual base class
Virtual base classVirtual base class
Virtual base classTech_MX
 
Java Tutorial | Java Programming Tutorial | Java Basics | Java Training | Edu...
Java Tutorial | Java Programming Tutorial | Java Basics | Java Training | Edu...Java Tutorial | Java Programming Tutorial | Java Basics | Java Training | Edu...
Java Tutorial | Java Programming Tutorial | Java Basics | Java Training | Edu...Edureka!
 
This keyword and final keyword
This keyword and final  keywordThis keyword and final  keyword
This keyword and final keywordkinjalbirare
 
Spring Framework
Spring FrameworkSpring Framework
Spring FrameworkNaLUG
 
learn what React JS is & why we should use React JS .
learn what React JS is & why we should use React JS .learn what React JS is & why we should use React JS .
learn what React JS is & why we should use React JS .paradisetechsoftsolutions
 
SOLID Design Principles
SOLID Design PrinciplesSOLID Design Principles
SOLID Design PrinciplesAndreas Enbohm
 
Object Oriented PHP - PART-1
Object Oriented PHP - PART-1Object Oriented PHP - PART-1
Object Oriented PHP - PART-1Jalpesh Vasa
 
Selenium interview questions
Selenium interview questionsSelenium interview questions
Selenium interview questionsgirichinna27
 

La actualidad más candente (20)

Java collections concept
Java collections conceptJava collections concept
Java collections concept
 
Core java concepts
Core java  conceptsCore java  concepts
Core java concepts
 
8b Curso de POO en java - paso de diagrama clases a java 1
8b Curso de POO en java - paso de diagrama clases a java 18b Curso de POO en java - paso de diagrama clases a java 1
8b Curso de POO en java - paso de diagrama clases a java 1
 
Basic Concepts Of OOPS/OOPS in Java,C++
Basic Concepts Of OOPS/OOPS in Java,C++Basic Concepts Of OOPS/OOPS in Java,C++
Basic Concepts Of OOPS/OOPS in Java,C++
 
Object oriented programming in python
Object oriented programming in pythonObject oriented programming in python
Object oriented programming in python
 
JavaScript - Chapter 7 - Advanced Functions
 JavaScript - Chapter 7 - Advanced Functions JavaScript - Chapter 7 - Advanced Functions
JavaScript - Chapter 7 - Advanced Functions
 
Virtual base class
Virtual base classVirtual base class
Virtual base class
 
Inheritance
InheritanceInheritance
Inheritance
 
Java Tutorial | Java Programming Tutorial | Java Basics | Java Training | Edu...
Java Tutorial | Java Programming Tutorial | Java Basics | Java Training | Edu...Java Tutorial | Java Programming Tutorial | Java Basics | Java Training | Edu...
Java Tutorial | Java Programming Tutorial | Java Basics | Java Training | Edu...
 
This keyword and final keyword
This keyword and final  keywordThis keyword and final  keyword
This keyword and final keyword
 
Core java
Core javaCore java
Core java
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Final keyword in java
Final keyword in javaFinal keyword in java
Final keyword in java
 
learn what React JS is & why we should use React JS .
learn what React JS is & why we should use React JS .learn what React JS is & why we should use React JS .
learn what React JS is & why we should use React JS .
 
SOLID Design Principles
SOLID Design PrinciplesSOLID Design Principles
SOLID Design Principles
 
C# operators
C# operatorsC# operators
C# operators
 
Object Oriented PHP - PART-1
Object Oriented PHP - PART-1Object Oriented PHP - PART-1
Object Oriented PHP - PART-1
 
Selenium interview questions
Selenium interview questionsSelenium interview questions
Selenium interview questions
 
TestNG Framework
TestNG Framework TestNG Framework
TestNG Framework
 
Java Strings
Java StringsJava Strings
Java Strings
 

Destacado

Fairway galle holdings
Fairway galle holdingsFairway galle holdings
Fairway galle holdingsJoey Perera
 
Những bức ảnh cực yêu cho thấy mọi em bé nên có một bạn thú cưng
Những bức ảnh cực yêu cho thấy mọi em bé nên có một bạn thú cưngNhững bức ảnh cực yêu cho thấy mọi em bé nên có một bạn thú cưng
Những bức ảnh cực yêu cho thấy mọi em bé nên có một bạn thú cưngcuongdienbaby05
 
2015 05-27 00-43-02
2015 05-27 00-43-022015 05-27 00-43-02
2015 05-27 00-43-02VICOAPAUL
 
income and costs planning pivot use
income and costs planning pivot useincome and costs planning pivot use
income and costs planning pivot useConstantin Andronic
 
Ilmu pengetahuan sosial
Ilmu pengetahuan sosialIlmu pengetahuan sosial
Ilmu pengetahuan sosialMuzahimah
 
Viên Xương Khớp Makong
Viên Xương Khớp MakongViên Xương Khớp Makong
Viên Xương Khớp Makongalonzo681
 
2015 05-27 00-43-34
2015 05-27 00-43-342015 05-27 00-43-34
2015 05-27 00-43-34VICOAPAUL
 
El mono y el bosque
El mono y el bosqueEl mono y el bosque
El mono y el bosquerockydog50
 
Resume - Kevin Brock
Resume - Kevin BrockResume - Kevin Brock
Resume - Kevin BrockKevin Brock
 
Thuốc Chữa Bệnh Khớp
Thuốc Chữa Bệnh KhớpThuốc Chữa Bệnh Khớp
Thuốc Chữa Bệnh Khớpconcetta546
 
Proteccio al menor
Proteccio al menorProteccio al menor
Proteccio al menornusca13
 

Destacado (18)

Fairway galle holdings
Fairway galle holdingsFairway galle holdings
Fairway galle holdings
 
Những bức ảnh cực yêu cho thấy mọi em bé nên có một bạn thú cưng
Những bức ảnh cực yêu cho thấy mọi em bé nên có một bạn thú cưngNhững bức ảnh cực yêu cho thấy mọi em bé nên có một bạn thú cưng
Những bức ảnh cực yêu cho thấy mọi em bé nên có một bạn thú cưng
 
2015 05-27 00-43-02
2015 05-27 00-43-022015 05-27 00-43-02
2015 05-27 00-43-02
 
income and costs planning pivot use
income and costs planning pivot useincome and costs planning pivot use
income and costs planning pivot use
 
Lipidos
Lipidos Lipidos
Lipidos
 
presidents list
presidents listpresidents list
presidents list
 
Ilmu pengetahuan sosial
Ilmu pengetahuan sosialIlmu pengetahuan sosial
Ilmu pengetahuan sosial
 
Viên Xương Khớp Makong
Viên Xương Khớp MakongViên Xương Khớp Makong
Viên Xương Khớp Makong
 
2015 05-27 00-43-34
2015 05-27 00-43-342015 05-27 00-43-34
2015 05-27 00-43-34
 
El mono y el bosque
El mono y el bosqueEl mono y el bosque
El mono y el bosque
 
Lipidos 23
Lipidos 23Lipidos 23
Lipidos 23
 
Mappestruktur periodeplaner
Mappestruktur periodeplanerMappestruktur periodeplaner
Mappestruktur periodeplaner
 
Resume - Kevin Brock
Resume - Kevin BrockResume - Kevin Brock
Resume - Kevin Brock
 
111
111111
111
 
Thuốc Chữa Bệnh Khớp
Thuốc Chữa Bệnh KhớpThuốc Chữa Bệnh Khớp
Thuốc Chữa Bệnh Khớp
 
Nieuwe openingsuren: invloed
Nieuwe openingsuren: invloedNieuwe openingsuren: invloed
Nieuwe openingsuren: invloed
 
Proteccio al menor
Proteccio al menorProteccio al menor
Proteccio al menor
 
Informatica
Informatica Informatica
Informatica
 

Similar a CDI para Java EE 7

01_ppt_introduccion_spring_mmmmmmmmm.pdf
01_ppt_introduccion_spring_mmmmmmmmm.pdf01_ppt_introduccion_spring_mmmmmmmmm.pdf
01_ppt_introduccion_spring_mmmmmmmmm.pdfMarvelNanosoft
 
SpringFramework Overview
SpringFramework OverviewSpringFramework Overview
SpringFramework Overviewzerovirus23
 
Ejb30 3
Ejb30 3 Ejb30 3
Ejb30 3 oscar
 
01 jee5-componentes
01 jee5-componentes01 jee5-componentes
01 jee5-componentesUTN
 
01.springframework.pptx
01.springframework.pptx01.springframework.pptx
01.springframework.pptxjohann
 
Introducción a java EE 7
Introducción a java EE 7Introducción a java EE 7
Introducción a java EE 7Carlos Camacho
 
Modulo Jee Intro Pos Fp Une
Modulo Jee Intro  Pos Fp UneModulo Jee Intro  Pos Fp Une
Modulo Jee Intro Pos Fp UneMarcos Jara
 
1/9 Curso JEE5, Soa, Web Services, ESB y XML
1/9 Curso JEE5, Soa, Web Services, ESB y XML1/9 Curso JEE5, Soa, Web Services, ESB y XML
1/9 Curso JEE5, Soa, Web Services, ESB y XMLJuan Carlos Rubio Pineda
 
Arquitectura y diseño de aplicaciones Java EE
Arquitectura y diseño de aplicaciones Java EEArquitectura y diseño de aplicaciones Java EE
Arquitectura y diseño de aplicaciones Java EECarlos Gavidia-Calderon
 
Html5, Rest, JSON, Angular JS y Java EE 7 - Aplicaciones Web Modernas y Esca...
Html5, Rest, JSON, Angular JS y Java EE 7  - Aplicaciones Web Modernas y Esca...Html5, Rest, JSON, Angular JS y Java EE 7  - Aplicaciones Web Modernas y Esca...
Html5, Rest, JSON, Angular JS y Java EE 7 - Aplicaciones Web Modernas y Esca...Eudris Cabrera
 

Similar a CDI para Java EE 7 (20)

Spring
SpringSpring
Spring
 
Introducción a Spring framework
Introducción a Spring frameworkIntroducción a Spring framework
Introducción a Spring framework
 
Capitulo_3_1.pptx
Capitulo_3_1.pptxCapitulo_3_1.pptx
Capitulo_3_1.pptx
 
01_ppt_introduccion_spring_mmmmmmmmm.pdf
01_ppt_introduccion_spring_mmmmmmmmm.pdf01_ppt_introduccion_spring_mmmmmmmmm.pdf
01_ppt_introduccion_spring_mmmmmmmmm.pdf
 
Curso Java Avanzado 5 Ejb
Curso Java Avanzado   5 EjbCurso Java Avanzado   5 Ejb
Curso Java Avanzado 5 Ejb
 
SpringFramework Overview
SpringFramework OverviewSpringFramework Overview
SpringFramework Overview
 
Ejb30 3
Ejb30 3 Ejb30 3
Ejb30 3
 
01 jee5-componentes
01 jee5-componentes01 jee5-componentes
01 jee5-componentes
 
01.springframework.pptx
01.springframework.pptx01.springframework.pptx
01.springframework.pptx
 
Introducción a java EE 7
Introducción a java EE 7Introducción a java EE 7
Introducción a java EE 7
 
Modulo Jee Intro Pos Fp Une
Modulo Jee Intro  Pos Fp UneModulo Jee Intro  Pos Fp Une
Modulo Jee Intro Pos Fp Une
 
spring
springspring
spring
 
framework.pptx
framework.pptxframework.pptx
framework.pptx
 
1/9 Curso JEE5, Soa, Web Services, ESB y XML
1/9 Curso JEE5, Soa, Web Services, ESB y XML1/9 Curso JEE5, Soa, Web Services, ESB y XML
1/9 Curso JEE5, Soa, Web Services, ESB y XML
 
4 Jhs J Developer Adf
4  Jhs J Developer Adf4  Jhs J Developer Adf
4 Jhs J Developer Adf
 
Arquitectura y diseño de aplicaciones Java EE
Arquitectura y diseño de aplicaciones Java EEArquitectura y diseño de aplicaciones Java EE
Arquitectura y diseño de aplicaciones Java EE
 
Framework spring
Framework springFramework spring
Framework spring
 
Java persitence api
Java persitence apiJava persitence api
Java persitence api
 
spring framework
spring frameworkspring framework
spring framework
 
Html5, Rest, JSON, Angular JS y Java EE 7 - Aplicaciones Web Modernas y Esca...
Html5, Rest, JSON, Angular JS y Java EE 7  - Aplicaciones Web Modernas y Esca...Html5, Rest, JSON, Angular JS y Java EE 7  - Aplicaciones Web Modernas y Esca...
Html5, Rest, JSON, Angular JS y Java EE 7 - Aplicaciones Web Modernas y Esca...
 

Último

Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramDIDIERFERNANDOGUERRE
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 

Último (20)

Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ram
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 

CDI para Java EE 7

  • 1. CDI Context and Dependency Injection Ing. Jose Diaz Diaz JOEDAYZ
  • 2. Acerca de Ing. José Amadeo Martin Díaz Díaz CEO JoeDayz.pe & Docente en EPE UPC Formación BlueStar Energy (2007) Bristol Myers Squibb (2006) Trans Solutions Systems (2003 - 2005) Telefonica Servicios Internet (2000 - 2002) Egresado de la Pontificia Universidad Católica del Perú (1994 - 2000) @jamdiazdiaz
  • 4. Introducción La primera versión de Java EE (J2EE) introdujo el concepto de inversión de control No fue hasta Java EE 5 y 6 que el API para administración de ciclo de vida e inyección de dependencias estuviese robusta. Hoy CDI nos da un modelo de programación donde cada componente Java EE puede ser inyectable, interceptable y administrable. CDI esta construido sobre la base de “pobre acoplamiento y fuerte tipado"
  • 5. ¿Que son los Beans?
  • 6. Entendiendo a los Beans Java SE tiene JavaBeans Java EE tiene Enterprise Java Beans Otros: Servlets, SOAP WS, RESTful WS, entidades Beans Manejados POJOs
  • 7. Entendiendo a los Beans Los Bean Manejados son objetos administrados por el contenedor que soportan un conjunto basico de servicios: inyección de recursos, administración de ciclo de vida, e intercepción. Introducidos en Java EE 6
  • 8. Entendiendo a los Beans Por ejemplo un EJB puede ser un Bean Manejado con servicios extra Un Servlet puede ser un Bean Manejado con servicios extra (diferentes al del EJB), etc. etc.
  • 9. Entendiendo a los Beans Los Beans son objetos CDI que son construidos sobre la base del modelo de Bean Manejados. Tienen contextos definidos, soporte a inyección de dependencias, intercepción, decoración, son especializados con el uso de qualifiers y pueden ser usados en EL.
  • 10. Entendiendo a los Beans En resumen, cualquier clase Java que tenga un constructor por defecto y se ejecute en un contenedor es un bean. De esta forma los JavaBeans y EJBs pueden tomar ventaja de los servicios CDI
  • 12. Dependency Injection (DI) Es un patrón de diseño que desacopla componentes dependientes. Termino concebido por Martin Fowler. Java EE 5 introdujo inyección para recursos como EJBs, entity managers, data sources, fabricas JMS, y destinos al interior de componentes como Servlets, JSF beans y EJBs. Así aparecieron @Resource, @PersistenceContext, @PersistenceUnit, @EJB y @WebServiceRef
  • 13. Dependency Injection (DI) El primer paso tomado en Java EE 5 no fue suficiente y Java EE 6 creo dos especificaciones diferentes para potenciar DI en la plataforma: Dependency Injection (JSR 350) y Context and Dependency Injection (JSR 299) En Java EE 7 se han juntado las dos especificaciones
  • 14. Ciclo de vida de un Bean Manejado
  • 15. Scopes y Context CDI viene con scopes predefinidos: request, session, application y conversation
  • 16. Interception Similar a la programación orientada a aspectos (AOP) El AOP se logra en la plataforma, a través, de interceptors. Estos son automaticamente disparados por el contenedor cuando un método de un bean manejado es invocado.
  • 18. Deployment Descriptor beans.xml y es obligatorio Ubicado en META-INF o WEB-INF Aquí se configura interceptors, decoradores, alternatives, etc. Si tu aplicación contiene diferentes jars y deseas tener CDI para toda la aplicación. Cada jar debe tener su propio beans.xml
  • 20. Resumen CDI es importante para otras especificaciones como Bean Validation, JAX-RS, EJB, JSF. Pero, CDI 1.1 no sería nada sin otras como: DI (JSR 330), Managed Bean 1.0 (JSR 342), Common Annotations 1.2 (JSR 250), Expression Language 3.0 (JSR 341) e Interceptors 1.2 (JSR 318)
  • 21. Historia En el 2006 inspirado en Seam, Guice y Spring Framework, Gavin King (creador de Seam) lidero la especificación JSR 299 denominada Web Beans dirigida para Java EE 6. Web Beans ha sido renombrado a Context and Dependency Injection 1.0 construida sobre la base de la nueva JSR 330 : Dependency Injection para Java 1.0 (@Inject)
  • 22. Historia Dependency Injection aporto las anotaciones: @Inject, @Named, @Qualifier, @Scope, @Singleton CDI añadió nuevas características como context management, events, decorators, e interceptors (JSR 318). Ademas de permitir al desarrollador extender la plataforma que era imposible hasta entonces.
  • 23. Historia El objetivo principal de CDI es entonces: Dar mas cohesión a la plataforma Unir la capa web y la capa de transacciones Que DI sea el ciudadano de primera clase Poder agregar nuevas extensiones facilmente En JAVA EE 7, CDI 1.1 es el fundamento para multiples JSRs y ha recibido muchas mejoras
  • 24. ¿Que hay de nuevo en CDI 1.1? No añade nuevas características. Su objetivo es integrar CDI con otras especificaciones. La nueva clase CDI provee acceso programático a facilidades de CDI fuera de un bean manejado Interceptors, decoradores, y alternatives pueden ser prioridades (@Priority) y ordenados para una aplicación completa Cualquier tipo o paquete puede ser ignorado de ser considerado un bean para CDI con @Vetoed en el tipo o paquete El @New qualifier es deprecado y se debe en su lugar usar @Dependent @WithAnnotations permite una extensión para filtrar por tipos
  • 26. Implementación de Referencia La implementación de referencia para CDI es Weld, un proyecto Open Source de JBoss Existen otras como Apache OpenWebBeans o CanDi (Caucho), así como Apache DeltaSpike
  • 28. Anatomía de un CDI Bean No es una clase non-static inner Es una clase concreta o anotada con @Decorator y Tiene un constructor por defecto sin parámetros, o declara un constructor anotado con @Inject Todo lo demás es opcional
  • 31. @Inject Nota en Java EE 7 aún se puede usar @Resource, pero, deberías considerar usar @Inject
  • 33. Puntos de Inyección El punto de inyección puede ser en propiedad, setter o constructor No es necesario crear un getter/setter para un atributo para usar inyección. No importa si es privado. En el caso de un constructor solo puedes tener uno solo con @Inject
  • 34. Puntos de Inyección ¿Cuándo deberías usar inyección por setter o constructor? No hay respuesta técnica real para esta pregunta; depende de tu elección. Recuerda que el contenedor es quien hace el trabajo.
  • 35. Default Injection Si en los ejemplos anteriores asumimos que GeneradorNumero solo tiene una implementación (IsbnGenerador). CDI puede inyectarlo sin problemas usando @Inject Cuando no declaras un Qualifier, el contenedor asume el qualifier @javax.enterprise.inject.Default.
  • 38. Qualifiers Cuando tenemos que escoger una implementación especifica entonces usamos Qualifiers
  • 43. Qualifiers con Miembros Que pasa si queremos tener qualifiers combinados. Es decir @DosDigitos, @OchoDigitos, @DiezDigitos, @TreceDigitos O @DosParDigitos, @OchoImparDigitos, @OchoParDigitos, etc.
  • 44. Qualifiers con Miembros En ese caso podemos crear un solo qualifier @NumeroDeDigitos con una enumeration como valor y un Boolean para la paridad.
  • 48. Alternatives Algunas veces tu deseas inyectar una implementación según el escenario de deployment. Digamos que en el ejemplo que estamos revisando, deseamos generar un numero falso (mock) en un ambiente de pruebas.
  • 50. Alternatives Si queremos que el alternativo funcione tenemos que habilitarlo en beans.xml
  • 51. Producers Hemos visto hasta ahora como un bean CDI se inyecta en otro bean CDI. Pero, también podemos inyectar primitivos (long, float, …), tipos de array, o cualquier otro POJO que no tiene CDI habilitado. Esto gracias a los producers.
  • 52. Producers Por defecto, no podemos inyectar clases de java.util.Date, java.lang.String. Esto debido a que estas clases están en rt.jar y este jar no tiene un beans.xml Recordemos que si un archivo .jar no tiene beans.xml bajo un META-INF, CDI no podrá descubrir nada y el POJO no podrá tratarse como un bean. Es decir, no podrá ser inyectable. La única forma de hacerlo inyectable es usando campos producers o métodos producers.
  • 55. InjectionPoint API Los atributos y tipos de retorno producidos por @Produces no necesitan información alguna de donde ellos serán inyectados Pero hay otros casos en que si se necesita saber. Este último es el caso de java.util.logging.Logger.
  • 58. Disposers Hemos usado producers para crear tipos o POJOs para que sean inyectados. Pero, no hemos tenido que destruirlos o cerrarlos una vez usados. Algunos métodos producers necesitan objetos que requieren explicitamente destrucción como JDBC connections, JMS session, o entity manager. Para destrucción existen los disposers.
  • 60. Disposers Gracias a los producers y disposers, ya no tenemos que crear y cerrar recursos
  • 62. Scopes Los beans con scope @SessionScoped o @ConversationScoped deben ser serializables, puesto que el contenedor los pone en pausa de rato en rato. Si un scope no es dado. El default es @Dependent
  • 63. Conversation Este scope guarda información del estado del usuario, permanece entre multiples requests y es demarcado programáticamente por la aplicación. Ejemplos de uso: reservas, compras en una tienda virtual, wizard en general
  • 66. Beans en Expression Language Por defecto los beans CDI no tienen un nombre y no son resuelto vía EL binding. Para asignarle un nombre se tiene que usar @Named
  • 68. Interceptors Los interceptors son de 4 tipos: @AroundConstruct: Asociado con el constructor de la clase destino @AroundInvoke: Asociado con un metodo de negocio especifico @AroundTimeout: Solo para EJB timer service @PostConstruct y @PreDestroy
  • 69. Interceptors Desde JAVA EE 6, los interceptors han evolucionado a una especificación separada. Ellos pueden ser aplicados a Bean Manejados, así como a EJBs, SOAP y RESTful web services.
  • 70. Interceptor en la misma clase
  • 71. Interceptor en la misma clase Respecto al ejemplo anterior. Solo se intercepta métodos que sean públicos, privados, protected o default; pero, no static o final El método interceptor debe tener un InvocationContext como parámetro y debe retornar Object El método puede arrojar excepciones chequeadas
  • 72. Interceptor en la misma clase Respecto al ejemplo anterior. Solo se intercepta métodos que sean públicos, privados, protected o default; pero, no static o final El método interceptor debe tener un InvocationContext como parámetro y debe retornar Object El método puede arrojar excepciones chequeadas
  • 75. Interceptor en la misma clase En el ejemplo anterior se ha usado @Transactional. Este se usa para el manejo de transacciones en CDI beans como Servlets, JAX-RS, JAX-WS. @Transactional es implementado via un interceptor
  • 76. Clases Interceptor Esta opción es cuando se desea que el comportamiento cross-cutting concerns se debe tener en una clase separada. Un ejemplo de esto es el Logging
  • 79. Clases Interceptor Si se desea que diferentes métodos sean interceptados de una clase, se puede colocar la referencia al interceptor en la parte superior de la clase. Y si se desa excluir algún metodo se usara @ExcludeClassInterceptors
  • 83. Interceptor Binding Interceptor Binding es solo permitido si CDI es habilitado Un Interceptor Binding es una anotación definida por el usuario con la anotación @InterceptorBinding
  • 86. Interceptors Los interceptors esta deshabitados por defecto. Al igual que las alternatives, los interceptors tienen que ser definidos en el beans.xml del jar o módulo Java EE.
  • 88. Priorizando Interceptors Binding Si bien los Interceptors binding nos dan pobre acoplamiento de interceptors, perdemos la posibilidad de ordenarlos. Desde CDI 1.1 ya podemos hacerlo usando @Priority
  • 90. Priorizando Interceptors Binding @Priority puede tomar un Integer de cualquier valor. La regla es que interceptors con prioridad pequeña son llamados primero. Java EE 7 define prioridades a nivel de la plataforma y podemos tener interceptors llamados antes o después de ciertos eventos.
  • 91. Priorizando Interceptors Binding PLATFORM_BEFORE = 0: Inicio de un rango de interceptors definidos por la plataforma Java EE LIBRARY_BEFORE = 1000: Inicio de un rango de interceptors definidos por extension libraries APPLICATION = 2000: Inicio de un rango de interceptors definidos por aplicaciones LIBRARY_AFTER = 3000: Inicio de un rango de últimos interceptors definidos por extension libraries PLATFORM_AFTER = 4000: Inicio de un rango de últimos interceptors definidos por la plataforma Java EE
  • 92. Priorizando Interceptors Binding En Conclusión, si deseamos que nuestro interceptor sea ejecutado antes de cualquier interceptor de aplicación, pero después de cualquier interceptor temprano de la plataforma debemos escribir:
  • 93. Decoradores Los decoradores son un patrón de diseño común de Gang of Four. La idea es tomar una clase y wrap otra clase alrededor de ella (decorarla). Es decir, si llamas a una clase decorada, pasamos, a través, del decorador antes de llegar a la clase destino. Los Decoradores son especiales para añadir lógica adicional a un método de negocios. Son similares a los interceptors en cierta forma, pero son complementarios
  • 95. Decoradores Los decoradores deben tener un delegate injection point anotado con @Delegate, del mismo tipo que el bean que se esta decorando. Esto permite al decorador invocar al objeto delegado y adicionalmente llamar a un método de negocio de este. Los decoradores por defecto están deshabilitados. Estos deben ser habilitados en el beans.xml
  • 97. Eventos Los Events permite a los beans interactuar fuera del tiempo de compilación. Un Bean puede definir un evento, otro puede dispararlo y otro manejar el evento Los beans pueden estar en paquetes separados y aún en capas separadas de la aplicación Este es el observer/observable design pattern del Gang of Four
  • 98. Eventos Event producers disparan eventos usando la interface Event. Un producer lanza eventos llamando al método fire(), pasa el objeto event y no es dependiente del observer. En el ejemplo que vamos a ver LibroService dispara un event (LibroAddedEvent) cada vez que un Libro es creado. Este fire(libro) dispara el evento y notifica a los metodos observer este particular evento.
  • 105. Gracias por su atención JOEDAY Z @joedayz www.joedayz.pe Ing. Jose Diaz