CDI - contexto de injecao de depéndencia

81
CDI Conxs e Injeção de Dependências

Transcript of CDI - contexto de injecao de depéndencia

Page 1: CDI - contexto de injecao de depéndencia

CDI Contextos e Injeção de Dependências

Page 2: CDI - contexto de injecao de depéndencia

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?

Page 3: CDI - contexto de injecao de depéndencia

CDI

CDI no Java EE 6

Page 4: CDI - contexto de injecao de depéndencia

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?

Page 5: CDI - contexto de injecao de depéndencia

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?

Page 6: CDI - contexto de injecao de depéndencia

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?

Page 7: CDI - contexto de injecao de depéndencia

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?

Page 8: CDI - contexto de injecao de depéndencia

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?

Page 9: CDI - contexto de injecao de depéndencia

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

Page 10: CDI - contexto de injecao de depéndencia

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

Page 11: CDI - contexto de injecao de depéndencia

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

Page 12: CDI - contexto de injecao de depéndencia

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

Page 13: CDI - contexto de injecao de depéndencia

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?

Page 14: CDI - contexto de injecao de depéndencia

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

Page 15: CDI - contexto de injecao de depéndencia

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

Page 16: CDI - contexto de injecao de depéndencia

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?

Page 17: CDI - contexto de injecao de depéndencia

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

Page 18: CDI - contexto de injecao de depéndencia

CDI Fabrica de objetos customizados.

@Produces, @Disposes, InjectonPoint

Eventos.

@Event, @Observes

Interceptadores/Decoradores.

@Interceptor, @InterceptorBinding, @AroundInvoke, @InvocatonContext, @Decorator, @Delegate

FUNCIONALIDADES

Page 19: CDI - contexto de injecao de depéndencia

CDIECOSSISTEMA

Page 20: CDI - contexto de injecao de depéndencia

CDI

Weld – implementação de referência (JBoss).

CanDI (Caucho).

OpenWebBeans (Apache).

IMPLEMENTAÇÕES

Page 21: CDI - contexto de injecao de depéndencia

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

Page 22: CDI - contexto de injecao de depéndencia

CDIRelação entre CDI, Weld e Seam 3

Page 23: CDI - contexto de injecao de depéndencia

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

Page 24: CDI - contexto de injecao de depéndencia

CDICanDI e Resin

Page 25: CDI - contexto de injecao de depéndencia

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

Page 26: CDI - contexto de injecao de depéndencia

CDIOpenWebBeans e Geronimo

Page 27: CDI - contexto de injecao de depéndencia

CDIServidores de AplicaçõesJava EE 6

Page 28: CDI - contexto de injecao de depéndencia

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

Page 29: CDI - contexto de injecao de depéndencia

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

Page 30: CDI - contexto de injecao de depéndencia

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

Page 31: CDI - contexto de injecao de depéndencia

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

Page 32: CDI - contexto de injecao de depéndencia

Cade os Exemplos ??

Page 33: CDI - contexto de injecao de depéndencia

CDIExemplo @Named

Page 34: CDI - contexto de injecao de depéndencia

CDIExemplo @NamedJSF

Page 35: CDI - contexto de injecao de depéndencia

CDIExemplo @NamedBrowse

Page 36: CDI - contexto de injecao de depéndencia

CDIExemplo @NamedBrowse

Page 37: CDI - contexto de injecao de depéndencia

Só isso de exemplo ??

Page 38: CDI - contexto de injecao de depéndencia

CDIExemplo Controller

Page 39: CDI - contexto de injecao de depéndencia

CDIExemplo Caixa Eletrônico

Page 40: CDI - contexto de injecao de depéndencia

CDIExemplo Saldo InicialSem @Inject

Page 41: CDI - contexto de injecao de depéndencia

CDIExemplo ClasseMovimentação

Page 42: CDI - contexto de injecao de depéndencia

CDIExemplo CriaçãoStereotype

Page 43: CDI - contexto de injecao de depéndencia

CDIExemplo JSFConta Bancária

Page 44: CDI - contexto de injecao de depéndencia

CDIExemplo Tela semProduces

Page 45: CDI - contexto de injecao de depéndencia

CDIExemplo Injeção UtilizandoProduces

Page 46: CDI - contexto de injecao de depéndencia

CDIExemplo CriandoProduces

Page 47: CDI - contexto de injecao de depéndencia

CDIExemplo Tela comProduces

Page 48: CDI - contexto de injecao de depéndencia

CDIExemplo Tela Sacando

Page 49: CDI - contexto de injecao de depéndencia

CDIExemplo Interceptor

Page 50: CDI - contexto de injecao de depéndencia

CDIExemplo XMLInterceptor

Page 51: CDI - contexto de injecao de depéndencia

CDIExemplo ControllerQualifier Padrão

Page 52: CDI - contexto de injecao de depéndencia

CDIExemplo InterfaceRepository

Page 53: CDI - contexto de injecao de depéndencia

CDIExemplo QualifierPadrão

Page 54: CDI - contexto de injecao de depéndencia

CDIExemplo JSFQualifier

Page 55: CDI - contexto de injecao de depéndencia

CDIExemplo TelaQualifier

Page 56: CDI - contexto de injecao de depéndencia

CDIExemplo Controller UsandoQualifier Específico

Page 57: CDI - contexto de injecao de depéndencia

CDIExemplo QualifierEspecífico

Page 58: CDI - contexto de injecao de depéndencia

CDIExemplo Qualifier EspecíficoSem Anotação

Page 59: CDI - contexto de injecao de depéndencia

CDIExemplo Qualifier EspecíficoCom Anotação

Page 60: CDI - contexto de injecao de depéndencia

CDIExemplo QualifierEspecífico

Page 61: CDI - contexto de injecao de depéndencia

CDIExemplo XML

Page 62: CDI - contexto de injecao de depéndencia

CDIExemplo Tela QualifierEspecífico

Page 63: CDI - contexto de injecao de depéndencia

CDIExemplo Alternatives

Page 64: CDI - contexto de injecao de depéndencia

CDIExemplo InterfaceAlternatives

Page 65: CDI - contexto de injecao de depéndencia

CDIExemplo MensagemAlternatives Padrão

Page 66: CDI - contexto de injecao de depéndencia

CDIExemplo JSFAlternatives

Page 67: CDI - contexto de injecao de depéndencia

CDIExemplo XML SemAlternatives

Page 68: CDI - contexto de injecao de depéndencia

CDIExemplo TelaAlternatives

Page 69: CDI - contexto de injecao de depéndencia

CDIExemplo MensagemAlternatives

Page 70: CDI - contexto de injecao de depéndencia

CDIExemplo XML comAlternatives

Page 71: CDI - contexto de injecao de depéndencia

CDIExemplo Tela UtilizandoImplementação Alternatives

Page 72: CDI - contexto de injecao de depéndencia

Quero saber da Conversaton ??

Page 73: CDI - contexto de injecao de depéndencia

CDIExemplo Controller UsandoConversationScoped

Page 74: CDI - contexto de injecao de depéndencia

CDIExemplo JSPConversationScoped

Page 75: CDI - contexto de injecao de depéndencia

CDIExemplo Tela InicialConversationScoped

Page 76: CDI - contexto de injecao de depéndencia

CDIExemplo Utilizando Tela semConversationScoped

Page 77: CDI - contexto de injecao de depéndencia

CDIExemplo Utilizando Tela sem ConversationScoped

Page 78: CDI - contexto de injecao de depéndencia

CDIExemplo Tela IniciandoConversationScoped

Page 79: CDI - contexto de injecao de depéndencia

CDIExemplo Utilizando Tela com ConversationScoped

Page 80: CDI - contexto de injecao de depéndencia

CDIExemplo Utilizando Tela com ConversationScoped

Page 81: CDI - contexto de injecao de depéndencia

Obrigado