SlideShare ist ein Scribd-Unternehmen logo
1 von 81
Downloaden Sie, um offline zu lesen
CDI
Contextos e Injeção de Dependências
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.
CDI no Java EE 6   CDI
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.
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).
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).
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).
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.
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.
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.
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.
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...
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.
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
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.
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.
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
FUNCIONALIDADES                                 CDI
     Fabrica de objetos customizados.

        @Produces, @Disposes, InjectonPoint

     Eventos.

        @Event, @Observes

     Interceptadores/Decoradores.

        @Interceptor, @InterceptorBinding, @AroundInvoke,
       @InvocatonContext, @Decorator, @Delegate
ECOSSISTEMA   CDI
IMPLEMENTAÇÕES                                    CDI


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

    CanDI (Caucho).

    OpenWebBeans (Apache).
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.
Relação entre CDI, Weld e   CDI
Seam 3
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.
CanDI e Resin   CDI
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.
OpenWebBeans e Geronimo   CDI
Servidores de Aplicações   CDI
Java EE 6
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.
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.
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.
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.
Cade os Exemplos ??
Exemplo @Named   CDI
Exemplo @Named
JSF
                 CDI
Exemplo @Named
Browse
                 CDI
Exemplo @Named
Browse
                 CDI
Só isso de exemplo ??
Exemplo Controller   CDI
Exemplo Caixa Eletrônico   CDI
Exemplo Saldo Inicial
Sem @Inject
                        CDI
Exemplo Classe
Movimentação
                 CDI
Exemplo Criação
Stereotype
                  CDI
Exemplo JSF
Conta Bancária
                 CDI
Exemplo Tela sem
Produces
                   CDI
Exemplo Injeção Utilizando
Produces
                             CDI
Exemplo Criando
Produces
                  CDI
Exemplo Tela com
Produces
                   CDI
Exemplo Tela Sacando   CDI
Exemplo Interceptor   CDI
Exemplo XML
Interceptor
              CDI
Exemplo Controller
Qualifier Padrão
                     CDI
Exemplo Interface
Repository
                    CDI
Exemplo Qualifier
Padrão
                    CDI
Exemplo JSF
Qualifier
              CDI
Exemplo Tela
Qualifier
               CDI
Exemplo Controller Usando
Qualifier Específico
                            CDI
Exemplo Qualifier
Específico
                    CDI
Exemplo Qualifier Específico
Sem Anotação
                               CDI
Exemplo Qualifier Específico
Com Anotação
                               CDI
Exemplo Qualifier
Específico
                    CDI
Exemplo XML   CDI
Exemplo Tela Qualifier
Específico
                         CDI
Exemplo Alternatives   CDI
Exemplo Interface
Alternatives
                    CDI
Exemplo Mensagem
Alternatives Padrão
                      CDI
Exemplo JSF
Alternatives
               CDI
Exemplo XML Sem
Alternatives
                  CDI
Exemplo Tela
Alternatives
               CDI
Exemplo Mensagem
Alternatives
                   CDI
Exemplo XML com
Alternatives
                  CDI
Exemplo Tela Utilizando
Implementação Alternatives
                             CDI
Quero saber da
Conversaton ??
Exemplo Controller Usando
ConversationScoped          CDI
Exemplo JSP
ConversationScoped
                     CDI
Exemplo Tela Inicial
ConversationScoped
                       CDI
Exemplo Utilizando Tela sem
ConversationScoped
                              CDI
Exemplo Utilizando Tela sem
ConversationScoped
                              CDI
Exemplo Tela Iniciando
ConversationScoped
                         CDI
Exemplo Utilizando Tela com
ConversationScoped
                              CDI
Exemplo Utilizando Tela com
ConversationScoped
                              CDI
Obrigado

Weitere ähnliche Inhalte

Was ist angesagt?

JavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividadeJavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividade
Rafael Ponte
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Adriano Teixeira de Souza
 
Desenvolvimento Web com CakePHP
Desenvolvimento Web com CakePHPDesenvolvimento Web com CakePHP
Desenvolvimento Web com CakePHP
Sérgio Vilar
 

Was ist angesagt? (20)

Maverick v1.0
Maverick v1.0Maverick v1.0
Maverick v1.0
 
Enterprise JavaBeans simples e descomplicado, na prática
Enterprise JavaBeans simples e descomplicado, na práticaEnterprise JavaBeans simples e descomplicado, na prática
Enterprise JavaBeans simples e descomplicado, na prática
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em Java
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
JavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividadeJavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividade
 
Tutorial Java EE
Tutorial Java EETutorial Java EE
Tutorial Java EE
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
 
GlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EEGlassFish, Maven, Cloud e o futuro do Java EE
GlassFish, Maven, Cloud e o futuro do Java EE
 
J boss seam
J boss seamJ boss seam
J boss seam
 
JSF 2 Components JustJava2011
JSF 2 Components JustJava2011JSF 2 Components JustJava2011
JSF 2 Components JustJava2011
 
Construindo portlets para IBM WebSphere Portal – Parte 2
Construindo portlets para IBM WebSphere Portal – Parte 2Construindo portlets para IBM WebSphere Portal – Parte 2
Construindo portlets para IBM WebSphere Portal – Parte 2
 
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrõesMC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
 
Desenvolvimento Web com CakePHP
Desenvolvimento Web com CakePHPDesenvolvimento Web com CakePHP
Desenvolvimento Web com CakePHP
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
 
Introdução a Plataforma Java EE
Introdução a Plataforma Java EEIntrodução a Plataforma Java EE
Introdução a Plataforma Java EE
 
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
 
A arquitetura modular do Java 9
A arquitetura modular do Java 9A arquitetura modular do Java 9
A arquitetura modular do Java 9
 
Zend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteZend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil Competente
 
Apostila java completo
Apostila java completoApostila java completo
Apostila java completo
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks php
 

Andere mochten auch (8)

Catalogo xlx250 r-1998
Catalogo   xlx250 r-1998Catalogo   xlx250 r-1998
Catalogo xlx250 r-1998
 
Market prioritisation
Market prioritisationMarket prioritisation
Market prioritisation
 
BDI E CDI
BDI E CDIBDI E CDI
BDI E CDI
 
Manual de serviço xlx250 r informac
Manual de serviço xlx250 r informacManual de serviço xlx250 r informac
Manual de serviço xlx250 r informac
 
Brand Development Index (BDI)
Brand Development Index (BDI)Brand Development Index (BDI)
Brand Development Index (BDI)
 
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
 
Manual do proprietário HONDA XLX 250R 1984
Manual do proprietário HONDA XLX 250R 1984Manual do proprietário HONDA XLX 250R 1984
Manual do proprietário HONDA XLX 250R 1984
 
Planejamento de Mídia
Planejamento de MídiaPlanejamento de Mídia
Planejamento de Mídia
 

Ähnlich wie CDI -Contextos e Dependências

TDC2010 - Turbinando sua Aplicação com CDI
TDC2010 - Turbinando sua Aplicação com CDITDC2010 - Turbinando sua Aplicação com CDI
TDC2010 - Turbinando sua Aplicação com CDI
Rodrigo Cândido da Silva
 
TDC2012 - Implementando aplicativos Web com JSF, CDI e JPA
TDC2012 - Implementando aplicativos Web com JSF, CDI e JPA  TDC2012 - Implementando aplicativos Web com JSF, CDI e JPA
TDC2012 - Implementando aplicativos Web com JSF, CDI e JPA
Rodrigo Cândido da Silva
 
Sistemas Distribuídos - Comunicação Distribuída - EJB
Sistemas Distribuídos - Comunicação Distribuída - EJBSistemas Distribuídos - Comunicação Distribuída - EJB
Sistemas Distribuídos - Comunicação Distribuída - EJB
Adriano Teixeira de Souza
 

Ähnlich wie CDI -Contextos e Dependências (20)

GUJavaSC - Mini-curso Java EE
GUJavaSC - Mini-curso Java EEGUJavaSC - Mini-curso Java EE
GUJavaSC - Mini-curso Java EE
 
Java CDI: Usando Java CDI em projetos Jakarta EE ou Microprofile
Java CDI: Usando Java CDI em projetos Jakarta EE ou MicroprofileJava CDI: Usando Java CDI em projetos Jakarta EE ou Microprofile
Java CDI: Usando Java CDI em projetos Jakarta EE ou Microprofile
 
TDC2010 - Turbinando sua Aplicação com CDI
TDC2010 - Turbinando sua Aplicação com CDITDC2010 - Turbinando sua Aplicação com CDI
TDC2010 - Turbinando sua Aplicação com CDI
 
Serra StarTec 2013 - Java EE
Serra StarTec 2013 - Java EESerra StarTec 2013 - Java EE
Serra StarTec 2013 - Java EE
 
Desenvolvimento de Aplicações Corporativas com Java
Desenvolvimento de Aplicações Corporativas com JavaDesenvolvimento de Aplicações Corporativas com Java
Desenvolvimento de Aplicações Corporativas com Java
 
Iniciando com realm
Iniciando com realmIniciando com realm
Iniciando com realm
 
Palestra
PalestraPalestra
Palestra
 
Curso de Java (Parte 5)
Curso de Java (Parte 5)Curso de Java (Parte 5)
Curso de Java (Parte 5)
 
EJB
EJBEJB
EJB
 
Docker para devs .NET
Docker para devs .NETDocker para devs .NET
Docker para devs .NET
 
TDC2012 - Implementando aplicativos Web com JSF, CDI e JPA
TDC2012 - Implementando aplicativos Web com JSF, CDI e JPA  TDC2012 - Implementando aplicativos Web com JSF, CDI e JPA
TDC2012 - Implementando aplicativos Web com JSF, CDI e JPA
 
Sistemas Distribuídos - Comunicação Distribuída - EJB
Sistemas Distribuídos - Comunicação Distribuída - EJBSistemas Distribuídos - Comunicação Distribuída - EJB
Sistemas Distribuídos - Comunicação Distribuída - EJB
 
Apresentando o Yii Framework
Apresentando o Yii FrameworkApresentando o Yii Framework
Apresentando o Yii Framework
 
YII - Web Programming Framework
YII - Web Programming FrameworkYII - Web Programming Framework
YII - Web Programming Framework
 
Owin e katana
Owin e katanaOwin e katana
Owin e katana
 
Spring roo produtividade no java
Spring roo produtividade no javaSpring roo produtividade no java
Spring roo produtividade no java
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev Introdução
 
J2EE Na Vida Real
J2EE Na Vida RealJ2EE Na Vida Real
J2EE Na Vida Real
 
Spring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutosSpring Boot - Uma app do 0 a Web em 30 minutos
Spring Boot - Uma app do 0 a Web em 30 minutos
 
Web Sphere
Web SphereWeb Sphere
Web Sphere
 

Mehr von Wende Mendes

Mehr von Wende Mendes (20)

Rotas com angular
Rotas com angularRotas com angular
Rotas com angular
 
Angular Nodejs e com mongolab
Angular Nodejs e com mongolabAngular Nodejs e com mongolab
Angular Nodejs e com mongolab
 
Dicas para pescar tucunare
Dicas para pescar tucunareDicas para pescar tucunare
Dicas para pescar tucunare
 
Produtividade com teste de integracao
Produtividade com teste de integracaoProdutividade com teste de integracao
Produtividade com teste de integracao
 
Táticas para motivar a sus equipe
Táticas para motivar a sus equipeTáticas para motivar a sus equipe
Táticas para motivar a sus equipe
 
Apreenda a trabalhar em equipe
Apreenda a trabalhar em equipeApreenda a trabalhar em equipe
Apreenda a trabalhar em equipe
 
Pare de dar descupas a voce mesmo e aproveite a vida
Pare de dar descupas a voce mesmo e aproveite a vidaPare de dar descupas a voce mesmo e aproveite a vida
Pare de dar descupas a voce mesmo e aproveite a vida
 
Aprenda com o simples
Aprenda com o simples Aprenda com o simples
Aprenda com o simples
 
Motivação e Metas para Equipe
Motivação e Metas para EquipeMotivação e Metas para Equipe
Motivação e Metas para Equipe
 
Uma breve introdução de play framework
Uma breve introdução de play frameworkUma breve introdução de play framework
Uma breve introdução de play framework
 
100 maneiras de motivar sua equipe parte 1
100 maneiras de motivar sua equipe parte 1100 maneiras de motivar sua equipe parte 1
100 maneiras de motivar sua equipe parte 1
 
Domain-Driven-Design
Domain-Driven-DesignDomain-Driven-Design
Domain-Driven-Design
 
Como aumentar a produtividade da sua equipe
Como aumentar a produtividade da sua equipeComo aumentar a produtividade da sua equipe
Como aumentar a produtividade da sua equipe
 
Apresentação de Ruby para desktop, xml, yaml, e testes unitários
Apresentação de Ruby para desktop, xml, yaml, e testes unitáriosApresentação de Ruby para desktop, xml, yaml, e testes unitários
Apresentação de Ruby para desktop, xml, yaml, e testes unitários
 
Apresentação de ruby parte 5
Apresentação de ruby parte 5Apresentação de ruby parte 5
Apresentação de ruby parte 5
 
Apresentação de ruby com blocos de programação, módulos e outros exemplos
Apresentação de ruby com blocos de programação, módulos e outros exemplosApresentação de ruby com blocos de programação, módulos e outros exemplos
Apresentação de ruby com blocos de programação, módulos e outros exemplos
 
Ruby com Singleton class, Metaprogramação e muito mais
Ruby com Singleton class, Metaprogramação e muito maisRuby com Singleton class, Metaprogramação e muito mais
Ruby com Singleton class, Metaprogramação e muito mais
 
Ruby com Objetos e classes
Ruby com Objetos e classesRuby com Objetos e classes
Ruby com Objetos e classes
 
Introdução a ruby
Introdução a rubyIntrodução a ruby
Introdução a ruby
 
Javaone2010
Javaone2010Javaone2010
Javaone2010
 

CDI -Contextos e Dependências

  • 1. CDI Contextos e Injeção de Dependências
  • 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.
  • 3. CDI no Java EE 6 CDI
  • 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
  • 18. FUNCIONALIDADES CDI Fabrica de objetos customizados. @Produces, @Disposes, InjectonPoint Eventos. @Event, @Observes Interceptadores/Decoradores. @Interceptor, @InterceptorBinding, @AroundInvoke, @InvocatonContext, @Decorator, @Delegate
  • 19. ECOSSISTEMA CDI
  • 20. IMPLEMENTAÇÕES CDI Weld – implementação de referência (JBoss). CanDI (Caucho). OpenWebBeans (Apache).
  • 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.
  • 22. Relação entre CDI, Weld e CDI Seam 3
  • 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.
  • 27. Servidores de Aplicações CDI Java EE 6
  • 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.
  • 37. Só isso de exemplo ??
  • 61. Exemplo XML CDI
  • 76. Exemplo Utilizando Tela sem ConversationScoped CDI
  • 77. Exemplo Utilizando Tela sem ConversationScoped CDI
  • 79. Exemplo Utilizando Tela com ConversationScoped CDI
  • 80. Exemplo Utilizando Tela com ConversationScoped CDI