CDI -Contextos e Dependências

Post on 14-May-2015

1.732 views 3 download

description

Apresentação sobre CDI -Contextos e Dependências, com vários exemplos

Transcript of CDI -Contextos e Dependências

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