O documento fornece uma introdução sobre CDI (Contexts and Dependency Injection) em 3 frases:
CDI é uma API que implementa injeção de dependência e contextos, fazendo parte da especificação Java EE 6 como uma alternativa para frameworks como Spring e Google Guice. CDI permite a criação e gerenciamento de objetos através de anotações e permite definir o escopo de vida dos componentes usando contextos como request, conversation e application.
2. O QUE É CDI? CDI
API, que implementa a injeção de dependência e contextos.
Parte da especificação do Java EE 6 (JSR 299).
Uma alternatva para os fameworks de injeção de
dependência como Spring ou Google Guice.
Um sucessor do JBOSS Seam Framework.
4. O QUE É INJEÇÃO DE
DEPENDÊNCIA? CDI
Basicamente instanciação de objetos. O objetos são criados por um
container que os associa a um contexto e gerencia seu ciclo de vida.
As referências ente instâncias também são inicializadas pelo
container e são injetados no objeto.
A configuração de criação do objeto e a injeção é feita utlizando:
Anotações.
Configuração de XML.
Código Java.
5. POR QUE EU PRECISO DE
INJEÇÃO DE DEPENDÊNCIA?
CDI
Manter o baixo acoplamento ente os componentes.
Facilidade na criação de testes.
Código mais limpo.
Isto leva a um maior grau de fexibilidade para diferentes
configurações de um aplicatvo (por exemplo, em cenários de
teste, ambientes de integração e a reutlização em outas
aplicações ou contextos).
6. O que são contextos?
CDI
Os contextos determinam o ciclo de vida dos componentes,
na CDI (duração e visibilidade) dos objetos.
O desenvolvedor configura o escopo usando anotações:
@ApplicatonScoped (aplicação).
@SessionScoped (sessão do usuário).
@ConversatonScoped (conversação).
@RequestScoped (http request).
@Dependent (depende do ciclo de vida do compomente
referenciado).
7. CDI EXECUTA APENAS NOS
SERVIDORES DE APLICAÇÃO?
CDI
Não. Weld (implementação de referência da CDI) pode ser
usado em:
Aplicações Java SE.
Aplicações em execução nos containers de servlets como o
Apache Tomcat.
Servidores de aplicações Java EE. (obrigatóriamente Java
EE 6).
8. COMO CDI SE INTEGRA COM
OUTROS FRAMEWORKS?
CDI
CDI é altamente integrado com:
JSP Expression Language.
Java Server Faces (incluindo Facelets, JSF Expression
Language).
Enterprise JavaBeans.
9. PELO QUE O CDI É
RESPONSÁVEL CDI
Por permitr que qualquer um de seus objetos gernciados
sejam acessíveis diretamente por um inferface JSF ou JSP
atavés de Unified Expression Language(EL).
Oferecer novo mecanismo de declaração de interceptadores
facamente acoplados.
Habilidade de “decorar” objetos injetados.
10. PELO QUE O CDI É CDI
RESPONSÁVEL
Um modelo de notficação de eventos.
Um novo contexto web, somando ao Request, Applicaton
e Session, chamado de Conversaton.
Fornecer um conjunto de SPI, Service Provide Interface,
para possibilitar extensões portáveis.
11. ASPECTOS DA CDI CDI
Objeto gerenciável pela especificação, o “Bean”.
Uma vez tendo uma aplicação CDI, todos os “beans” do
projeto passam a ser gerenciados pelo servidor de
aplicação.
12. ASPECTOS DA CDI CDI
Resolução de tpos a serem injetados nas dependências de
um “bean” (Typesafe Resoluton – mecanismo de tpagem
para DI), com algumas vantagens:
Prevenção conta erros de injeção em tempo de
execução.
Apoio de ferramentas IDE para produtvidade.
Clareza nos códigos.
Ente outas...
13. MAS O QUE É DE FATO UM
BEAN?
CDI
O Java EE 6 define dois tpos de beans passíveis de
serem manipulados pela CDI:
Managed Beans.
Session Beans.
14. MANAGED BEANS CDI
Na CDI, um bean do tpo Managed Bean é qualquer classe java que:
Seja concreta ou anotada com @Decorator.
Tenha pelo menos um constutor sem parâmeto ou anotado com
@Inject.
Não seja um EJB.
Não seja uma JPA Entty.
Não seja uma classe interna.
Não implemente a interface javax.enterprise.inject.spi.Extension
15. SESSION BEANS CDI
Componentes gerenciados pelo servidor de aplicação
definidos pela especificação Enterprise JavaBeans.
Quem define seu gerenciamento de estado é sua
especificação e não a CDI.
Contudo, todas as fncionalidades expostas para uma bean
do tpo Managed Bean também é válida para o bean do tpo
Session Bean.
16. DE QUE MANEIRA É
REALIZADA A INJEÇÃO?
CDI
Atavés de tês formas:
Injeção por atibuto.
Injeção por método set.
Injeção por constutor.
17. FUNCIONALIDADES CDI
Injeção de dependência básica.
@Inject, @Qualifier, @Stereotype, @Alternatve,
@Instance, @All, @Any
Nome de componente.
@Named
Gerenciamento de contexto.
@Dependent, @RequestScoped, @SessionScoped,
@ConversatonScoped, @ApplicatonScoped, @Scope
21. Weld CDI
Implementação de referência da CDI.
Documentação de referência excelente.
Evoluída a partr do core do Seam 2.
Incluída no GlassFish e Jboss AS.
Pode ser usada com o Tomcat, Jetty.
Pode ser usada em aplicações Java SE.
23. CanDI CDI
Implementação incluida no servidor de aplicação Resin da
Caucho.
CanDI forma o core do Resin.
Configuração de tpagem por XML, compacta.
Usa anotações como @TransactonAttribute, @Schedule,
@Asynchronous, @RolesAllowed, @RunAs, @Lock, @Startup and
@Remote.
Incorporado a container de famework de testes que integram
EJB, JPA com Junit.
25. OpenWebBeans CDI
Implementação da Apache incluída no Gerônimo.
Intmamente relacionado com Apache OpenEJB.
Grande integração com o Tomcat junto com OpenEJB.
Injeção estendida de objetos JMS (sessões, conexões de
fábricas).
Roda aplicações Java SE.
Portável para extensões de grandes projetos da Apache.
28. GlassFish v3 CDI
Implementação de referência Java EE 6 open source.
Totalmente apoiado pela Oracle.
Mais antga runtme Java EE 6.
Suporte total a plataforma bem com ao Web Profile.
Arquitetura modular baseado em OSGi.
Pooling excelente, clustering e fncionalidades
administatvas.
Container embutdo para testar.
29. JBoss AS 6 CDI
Servidor de aplicação open source Java mais utlizado.
Recentemente implementou Java EE 6 Web Profile TCK.
Implementação completa do Profile Java EE 6.
Pooling, caching, clustering administados pelo console.
HornetQ excelente implementação JMS.
30. Resin 4 CDI
Servidor de aplicações open soruce Java EE 6 Web Profile,
concenta-se em ser rápido, leve.
Suporta agendamento, processamento assíncrono,
comunicação remota Hessian, message-driven beans e JMS.
Servidor HTTP, proxy caching, load-balancing, pooling,
clustering, caching, suporta cloud, SSL.
Executa PHP em Java.
31. Geronimo 3 CDI
Servidor de aplicação open source lencenciado pela Apache.
Base para o IBM WebShere Community Editon.
Em breve tera a implementação completa do Java EE 6 Web
Profile TCK.
OSGi, clustering, administação pelo console.
Inclui Tomcat / Jetty, MyFaces, OpenWebBeans, OpenEJB,
OpenJPA, ActveMQ, CXF / Axi, Derby.
TomEE, Tomcat voltado para o Java EE 6 Web Profile.