CDI Contextos e Injeção de Dependências
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.
O QUE É CDI?
CDI
CDI no Java EE 6
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.
O QUE É 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).
POR QUE EU PRECISO DE INJEÇÃO DE DEPENDÊNCIA?
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).
O que são contextos?
CDINã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).
CDI EXECUTA APENAS NOS SERVIDORES DE APLICAÇÃO?
CDI
CDI é altamente integrado com:
JSP Expression Language.
Java Server Faces (incluindo Facelets, JSF Expression Language).
Enterprise JavaBeans.
COMO CDI SE INTEGRA COM OUTROS FRAMEWORKS?
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.
PELO QUE O CDI É RESPONSÁVEL
CDI
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.
PELO QUE O CDI É RESPONSÁVEL
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.
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...
ASPECTOS DA CDI
CDI
O Java EE 6 define dois tpos de beans passíveis de serem manipulados pela CDI:
Managed Beans.
Session Beans.
MAS O QUE É DE FATO UM BEAN?
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
MANAGED 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.
SESSION BEANS
CDI
Atavés de tês formas:
Injeção por atibuto.
Injeção por método set.
Injeção por constutor.
DE QUE MANEIRA ÉREALIZADA A INJEÇÃO?
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
FUNCIONALIDADES
CDI Fabrica de objetos customizados.
@Produces, @Disposes, InjectonPoint
Eventos.
@Event, @Observes
Interceptadores/Decoradores.
@Interceptor, @InterceptorBinding, @AroundInvoke, @InvocatonContext, @Decorator, @Delegate
FUNCIONALIDADES
CDIECOSSISTEMA
CDI
Weld – implementação de referência (JBoss).
CanDI (Caucho).
OpenWebBeans (Apache).
IMPLEMENTAÇÕES
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.
Weld
CDIRelação entre CDI, Weld e Seam 3
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.
CanDI
CDICanDI e Resin
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.
OpenWebBeans
CDIOpenWebBeans e Geronimo
CDIServidores de AplicaçõesJava EE 6
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.
GlassFish v3
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.
JBoss AS 6
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.
Resin 4
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.
Geronimo 3
Cade os Exemplos ??
CDIExemplo @Named
CDIExemplo @NamedJSF
CDIExemplo @NamedBrowse
CDIExemplo @NamedBrowse
Só isso de exemplo ??
CDIExemplo Controller
CDIExemplo Caixa Eletrônico
CDIExemplo Saldo InicialSem @Inject
CDIExemplo ClasseMovimentação
CDIExemplo CriaçãoStereotype
CDIExemplo JSFConta Bancária
CDIExemplo Tela semProduces
CDIExemplo Injeção UtilizandoProduces
CDIExemplo CriandoProduces
CDIExemplo Tela comProduces
CDIExemplo Tela Sacando
CDIExemplo Interceptor
CDIExemplo XMLInterceptor
CDIExemplo ControllerQualifier Padrão
CDIExemplo InterfaceRepository
CDIExemplo QualifierPadrão
CDIExemplo JSFQualifier
CDIExemplo TelaQualifier
CDIExemplo Controller UsandoQualifier Específico
CDIExemplo QualifierEspecífico
CDIExemplo Qualifier EspecíficoSem Anotação
CDIExemplo Qualifier EspecíficoCom Anotação
CDIExemplo QualifierEspecífico
CDIExemplo XML
CDIExemplo Tela QualifierEspecífico
CDIExemplo Alternatives
CDIExemplo InterfaceAlternatives
CDIExemplo MensagemAlternatives Padrão
CDIExemplo JSFAlternatives
CDIExemplo XML SemAlternatives
CDIExemplo TelaAlternatives
CDIExemplo MensagemAlternatives
CDIExemplo XML comAlternatives
CDIExemplo Tela UtilizandoImplementação Alternatives
Quero saber da Conversaton ??
CDIExemplo Controller UsandoConversationScoped
CDIExemplo JSPConversationScoped
CDIExemplo Tela InicialConversationScoped
CDIExemplo Utilizando Tela semConversationScoped
CDIExemplo Utilizando Tela sem ConversationScoped
CDIExemplo Tela IniciandoConversationScoped
CDIExemplo Utilizando Tela com ConversationScoped
CDIExemplo Utilizando Tela com ConversationScoped
Obrigado
Top Related