SlideShare uma empresa Scribd logo
Contexts & Dependency
   Injection (CDI)
  Usando os recursos de extensibilidade da
          API de CDI do Java EE 6

                 Dr. Spock
                @drspockbr
@bout me!
• Bacharel e especialista em Física
  pela UFV e Unicamp;

• Desenvolvedor de aplicações
  Web desde 96 e Java desde 99;

• Palestrante nos principais
  eventos nacionais e
  internacionais;

• Integrante da equipe de
  desenvolvimento da Vocado LLC
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
Agenda

• Introdução

• Principais recursos

• CDI Portable Extensions

• Q&A
Introdução
O que é CDI?
“Contexts and Dependency Injection
(CDI) é a especificação da plataforma
 Java EE que adiciona os conceitos de
 injeção de dependência e contextos
aos componentes de negócios de uma
        aplicação corporativa.”
Características
• Type-safe;

• Orientado a anotações;

• Consistente;

• Portável;

• Turbina o modelo de
  componentes do Java EE.
Origens do CDI
Origens do CDI




JSR-299         JSR-330
Web Beans   Dependency Injection
                 for Java
Origens do CDI




          JSR-299                       JSR-330
Contexts and Dependency Injection   Dependency Injection
           for Java EE                   for Java
Origens do CDI




          JSR-299                       JSR-330
Contexts and Dependency Injection   Dependency Injection
           for Java EE                   for Java
Implementação
de Referência
CDI no Java EE 6
CDI no Java EE 6
Principais Recursos
Principais Recursos
• Managed Bean

• Injection

• Contexts

• Qualifiers

• Events

• Alternatives
Principais Recursos
• Specializations

• Stereotypes

• Interceptors

• Decorators

• Producers/Disposers

• Portable Extensions
  (SPI)
Development Time
       vs
    Runtime
Injeção de Dependência
       (Development Time)
                          @Inject
• @javax.inject.Inject    private ICaixaEletronico cxEletronico;


• Baseado no tipo do
  atributo ou parâmetro

• Injeta ocorrência única
  do tipo

• Instancia a partir do
  construtor sem
  parâmetros
Producers
            (Development Time)
                                         @Produces
 • Criação customizada de beans;         @BankRepository
                                         @PersistenceContext
                                         private EntityManager em;
 • Qualificador ajuda a ter
   múltiplos gerenciadores:              @Produces
                                         @BankRepository
   Ex.: @BankRepository                  @Resource
                                         private DataSource ds;


public class ProdutoDAO {          public class StoredProcedureBean {
  @Inject                            @Inject
  @BankRepository                    @BankRepository
  private EntityManager manager;     private DataSource ds;
}                                  }
Producers
        (Development Time)
                                    @Produces
• Criação customizada de beans;     @BankRepository
                                    @PersistenceContext
                                    private EntityManager em;
• Qualificador ajuda a ter
  múltiplos gerenciadores:          @Produces
                                    @BankRepository
  Ex.: @BankRepository              @Resource
                                    private DataSource ds;



      public void close(@Disposes EntityManager em) {
        em.close();
      }
Producers
                   (Runtime)
• Criação customizada de beans;

• Necessário um qualificador:
  Ex.: @Customizado @Inject
                          @Customizado
                          private ICaixaEletronico cxEletronico;

  @Producer
  @Customizado
  public ICaixaEletronico criarCaixaEletronicoCustomizado() {
    TDCBankCaixaEletronico e = new TDCBankCaixaEletronico(...);
    // customiza o caixa eletrônico
    return e;
  }
Producers
                   (Runtime)
• Criação customizada de objectos IStoredProcedure:
     @Inject
     @StoredProcedure(name = ”PROC_01”,
                      repository = @BankRepository)
     @Customizado
     private IStoredProcedure procedure;


  @Produces
  @Customizado
  public IStoredProcedure criarProcedure(InjectionPoint p) {
    // Obtem dados da anotação via objeto p.
    IStoredProcedure procedure = ... ;
    return procedure;
  }
Producers
                    (Runtime)
• Obtem EntityManager de acordo anotação;
      @Inject
      @StoredProcedure(name = ”PROC_01”,
                       repository = @BankRepository)
      @Customizado
      private IStoredProcedure procedure;

@Inject
@Any
private Instance<EntityManager> managerResolver;

public IStoredProcedure criarProcedure(InjectionPoint p) {
  // Obtem dados da anotação via objeto p.
  Annotation repositoryAnnotation = ... ;
  EntityManager em = managerResolver.select(repositoryAnnotation);
  IStoredProcedure procedure = ... ;
  return procedure;
}
Portable Extensions
       (SPI)
Portable Extentions (SPI)
• Funcionalidades para runtime;

• Permite registrar:

  • Beans customizados

  • Escopos customizados

  • Interceptors

  • Decorators

  • Stereotypes
Portable Extentions (SPI)
• Busca programática de
  beans;

• Injetar CDI beans em
  objetos próprios;

• Adicionar ou sobrescrever
  meta-anotações
Partes do SPI
Meta-Interfaces
• javax.enterprise.inject.spi   • Decorator<T>

• Extension                     • Producer<T>

• InjectionPoint                • ObserverMethod<T>

• Bean<T>                       • AnnotatedType<T>

• InjectionTarget<T>            • AnnotatedMethod<T>

• Interceptor<T>                • Instance<T>
SPI Events
• BeforeBeanDiscovery            • ProcessBean

• AfterBeanDiscovery             • ProcessObserverMethod

• BeforeShutdown                 • AfterDeploymentValidat
                                   ion
• ProcessAnnotatedType

• ProcessInjectionType   public void tratadorEvento(
                               @Observes BeforeShutdown event) {
                            // Lógica para processar evento.
• ProcessProducer        };
BeanManager
• Permite interagir diretamente com o CDI

    @Inject
    private BeanManager beanManager;
Criando um Extension
• Não é exatamente um CDI bean;

• Criado durante o
  processo de inicialização,
  antes de qualquer bean
  ou contexto existir; public     class MinhaExtensao
                                  implements Extension {
                             // tratadores de eventos SPI.
• Registrado em:        };

  META-INF/services/
  javax.enterprise.inject.spi.Extension
Exemplo de Extensões
Exemplo de Extensões




 http://openwebbeans.apache.org
Perguntas
Obrigado!
• Contato:
  Dr. Spock
  tdc2012@spock.com.br

• Twitter:
  @drspockbr

• About me:
  http://about.me/drspockbr

• Slides:
  http://slideshare.net/drspockbr

Mais conteúdo relacionado

Mais procurados

Robot Framework - principais características
Robot Framework - principais característicasRobot Framework - principais características
Robot Framework - principais características
alinebiath
 
Usando containers com auto-escala de testes
Usando containers com auto-escala de testesUsando containers com auto-escala de testes
Usando containers com auto-escala de testes
Elias Nogueira
 
Segurança Através de Gerência de Configurações
Segurança Através de Gerência de ConfiguraçõesSegurança Através de Gerência de Configurações
Segurança Através de Gerência de Configurações
Jeronimo Zucco
 
Sonarqube
SonarqubeSonarqube
Sonarqube
CDS
 
Testes de unidade - RP Tec Com
Testes de unidade - RP Tec ComTestes de unidade - RP Tec Com
Testes de unidade - RP Tec Com
Igor Rozani
 
Construindo pipelines com Azure DevOps
Construindo pipelines com Azure DevOpsConstruindo pipelines com Azure DevOps
Construindo pipelines com Azure DevOps
Camila Carrera
 

Mais procurados (6)

Robot Framework - principais características
Robot Framework - principais característicasRobot Framework - principais características
Robot Framework - principais características
 
Usando containers com auto-escala de testes
Usando containers com auto-escala de testesUsando containers com auto-escala de testes
Usando containers com auto-escala de testes
 
Segurança Através de Gerência de Configurações
Segurança Através de Gerência de ConfiguraçõesSegurança Através de Gerência de Configurações
Segurança Através de Gerência de Configurações
 
Sonarqube
SonarqubeSonarqube
Sonarqube
 
Testes de unidade - RP Tec Com
Testes de unidade - RP Tec ComTestes de unidade - RP Tec Com
Testes de unidade - RP Tec Com
 
Construindo pipelines com Azure DevOps
Construindo pipelines com Azure DevOpsConstruindo pipelines com Azure DevOps
Construindo pipelines com Azure DevOps
 

Destaque

Img 0969
Img 0969Img 0969
Img 0969
cmckoy
 
Img 0890
Img 0890Img 0890
Img 0890
cmckoy
 
Usar internet de forma segura
Usar internet de forma seguraUsar internet de forma segura
Usar internet de forma segura
mlau86
 
TDC2012: Explorando os conceitos básicos da API de CDI do Java EE 6
TDC2012: Explorando os conceitos básicos da API de CDI do Java EE 6TDC2012: Explorando os conceitos básicos da API de CDI do Java EE 6
TDC2012: Explorando os conceitos básicos da API de CDI do Java EE 6
Dr. Spock
 
FastCat Project - 2016
FastCat Project - 2016FastCat Project - 2016
FastCat Project - 2016
Katie Waite
 
Introduction to Progressive Web App
Introduction to Progressive Web AppIntroduction to Progressive Web App
Introduction to Progressive Web App
Binh Bui
 
TDC2011: Spring Mobile
TDC2011: Spring MobileTDC2011: Spring Mobile
TDC2011: Spring Mobile
Dr. Spock
 
Mapeamento Objeto-Relacional com Java Persistence API
Mapeamento Objeto-Relacional com Java Persistence APIMapeamento Objeto-Relacional com Java Persistence API
Mapeamento Objeto-Relacional com Java Persistence API
brunoleitealves
 
Dangerous CSS
Dangerous CSSDangerous CSS
Dangerous CSS
Mike Wilcox
 

Destaque (9)

Img 0969
Img 0969Img 0969
Img 0969
 
Img 0890
Img 0890Img 0890
Img 0890
 
Usar internet de forma segura
Usar internet de forma seguraUsar internet de forma segura
Usar internet de forma segura
 
TDC2012: Explorando os conceitos básicos da API de CDI do Java EE 6
TDC2012: Explorando os conceitos básicos da API de CDI do Java EE 6TDC2012: Explorando os conceitos básicos da API de CDI do Java EE 6
TDC2012: Explorando os conceitos básicos da API de CDI do Java EE 6
 
FastCat Project - 2016
FastCat Project - 2016FastCat Project - 2016
FastCat Project - 2016
 
Introduction to Progressive Web App
Introduction to Progressive Web AppIntroduction to Progressive Web App
Introduction to Progressive Web App
 
TDC2011: Spring Mobile
TDC2011: Spring MobileTDC2011: Spring Mobile
TDC2011: Spring Mobile
 
Mapeamento Objeto-Relacional com Java Persistence API
Mapeamento Objeto-Relacional com Java Persistence APIMapeamento Objeto-Relacional com Java Persistence API
Mapeamento Objeto-Relacional com Java Persistence API
 
Dangerous CSS
Dangerous CSSDangerous CSS
Dangerous CSS
 

Semelhante a TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6

CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
Rafael Benevides
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãos
Thiago Soares
 
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
Victor Osorio
 
Aplicando CDI em aplicações Java
Aplicando CDI em aplicações JavaAplicando CDI em aplicações Java
Aplicando CDI em aplicações Java
Michel Graciano
 
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
 
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
 
JSF com Primefaces
JSF com PrimefacesJSF com Primefaces
JSF com Primefaces
Fabio Noth
 
Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018
André Luiz Forchesatto
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
Alvaro Viebrantz
 
CDI -Contextos e Dependências
CDI -Contextos e DependênciasCDI -Contextos e Dependências
CDI -Contextos e Dependências
Wende Mendes
 
Inversão de Controlo e Injecção de Dependência na .NET Framework
Inversão de Controlo e Injecção de Dependência na .NET FrameworkInversão de Controlo e Injecção de Dependência na .NET Framework
Inversão de Controlo e Injecção de Dependência na .NET Framework
C. Augusto Proiete
 
Maven 2
Maven 2Maven 2
Introdução a CDI e como utilizá-la em aplicações reais
Introdução a CDI e como utilizá-la em aplicações reaisIntrodução a CDI e como utilizá-la em aplicações reais
Introdução a CDI e como utilizá-la em aplicações reais
Michel Graciano
 
EBAC Django
EBAC DjangoEBAC Django
Oficina de Django
Oficina de DjangoOficina de Django
Oficina de Django
Thiago Avelino
 
Python 06
Python 06Python 06
Python 06
Bruno Catão
 
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
Mariana de Azevedo Santos
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Amazon Web Services LATAM
 
De 0 a DevOps
De 0 a DevOpsDe 0 a DevOps
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
 

Semelhante a TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6 (20)

CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãos
 
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
 
Aplicando CDI em aplicações Java
Aplicando CDI em aplicações JavaAplicando CDI em aplicações Java
Aplicando CDI em aplicações Java
 
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
 
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)
 
JSF com Primefaces
JSF com PrimefacesJSF com Primefaces
JSF com Primefaces
 
Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
CDI -Contextos e Dependências
CDI -Contextos e DependênciasCDI -Contextos e Dependências
CDI -Contextos e Dependências
 
Inversão de Controlo e Injecção de Dependência na .NET Framework
Inversão de Controlo e Injecção de Dependência na .NET FrameworkInversão de Controlo e Injecção de Dependência na .NET Framework
Inversão de Controlo e Injecção de Dependência na .NET Framework
 
Maven 2
Maven 2Maven 2
Maven 2
 
Introdução a CDI e como utilizá-la em aplicações reais
Introdução a CDI e como utilizá-la em aplicações reaisIntrodução a CDI e como utilizá-la em aplicações reais
Introdução a CDI e como utilizá-la em aplicações reais
 
EBAC Django
EBAC DjangoEBAC Django
EBAC Django
 
Oficina de Django
Oficina de DjangoOficina de Django
Oficina de Django
 
Python 06
Python 06Python 06
Python 06
 
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
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
 
De 0 a DevOps
De 0 a DevOpsDe 0 a DevOps
De 0 a DevOps
 
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
 

Mais de Dr. Spock

Improving Batch-Process Testing Techniques with a Domain-Specific Language
Improving Batch-Process Testing Techniques with a Domain-Specific LanguageImproving Batch-Process Testing Techniques with a Domain-Specific Language
Improving Batch-Process Testing Techniques with a Domain-Specific Language
Dr. Spock
 
Avoiding Java EE Application Design Traps to Achieve Effective Use of Cloud C...
Avoiding Java EE Application Design Traps to Achieve Effective Use of Cloud C...Avoiding Java EE Application Design Traps to Achieve Effective Use of Cloud C...
Avoiding Java EE Application Design Traps to Achieve Effective Use of Cloud C...
Dr. Spock
 
Evitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvem
Evitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvemEvitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvem
Evitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvem
Dr. Spock
 
TDC2011: Spring, uma plataforma enterprise, social, móvel e nas nuvens
TDC2011: Spring, uma plataforma enterprise, social, móvel e nas nuvensTDC2011: Spring, uma plataforma enterprise, social, móvel e nas nuvens
TDC2011: Spring, uma plataforma enterprise, social, móvel e nas nuvens
Dr. Spock
 
TDC2011: Arquitetura de Software Enterprise
TDC2011: Arquitetura de Software EnterpriseTDC2011: Arquitetura de Software Enterprise
TDC2011: Arquitetura de Software Enterprise
Dr. Spock
 
TDC2011: Java EE 6 & Azure
TDC2011: Java EE 6 & AzureTDC2011: Java EE 6 & Azure
TDC2011: Java EE 6 & Azure
Dr. Spock
 
Spring Framework no desenvolvimento móvel
Spring Framework no desenvolvimento móvelSpring Framework no desenvolvimento móvel
Spring Framework no desenvolvimento móvel
Dr. Spock
 
Desafios no deploy de aplicações Java EE 6 no Microsoft Azure
Desafios no deploy de aplicações Java EE 6 no Microsoft AzureDesafios no deploy de aplicações Java EE 6 no Microsoft Azure
Desafios no deploy de aplicações Java EE 6 no Microsoft Azure
Dr. Spock
 
Performance Tips and Tricks: Java EE, Java Persistence API and JavaServer Faces
Performance Tips and Tricks: Java EE, Java Persistence API and JavaServer FacesPerformance Tips and Tricks: Java EE, Java Persistence API and JavaServer Faces
Performance Tips and Tricks: Java EE, Java Persistence API and JavaServer Faces
Dr. Spock
 
Dicas e truques sobre performance em JavaEE, JPA e JSF
Dicas e truques sobre performance em JavaEE, JPA e JSFDicas e truques sobre performance em JavaEE, JPA e JSF
Dicas e truques sobre performance em JavaEE, JPA e JSF
Dr. Spock
 
Computação Física com Arduino, Program-ME e Java
Computação Física com Arduino, Program-ME e JavaComputação Física com Arduino, Program-ME e Java
Computação Física com Arduino, Program-ME e Java
Dr. Spock
 
Spring 3: Uma Plataforma além do Framework
Spring 3: Uma Plataforma além do FrameworkSpring 3: Uma Plataforma além do Framework
Spring 3: Uma Plataforma além do Framework
Dr. Spock
 
Produtividade com Spring Roo no Google App Engine
Produtividade com Spring Roo no Google App EngineProdutividade com Spring Roo no Google App Engine
Produtividade com Spring Roo no Google App Engine
Dr. Spock
 
Criando uma Aplicação Web com Spring Roo em 5 minutos!
Criando uma Aplicação Web com Spring Roo em 5 minutos!Criando uma Aplicação Web com Spring Roo em 5 minutos!
Criando uma Aplicação Web com Spring Roo em 5 minutos!
Dr. Spock
 
Spring Framework 3: Um 'brainstorm' de novas funcionalidades
Spring Framework 3: Um 'brainstorm' de novas funcionalidadesSpring Framework 3: Um 'brainstorm' de novas funcionalidades
Spring Framework 3: Um 'brainstorm' de novas funcionalidades
Dr. Spock
 
Dicas e Truques sobre Performance em Java EE, JPA e JSF
Dicas e Truques sobre Performance em Java EE, JPA e JSFDicas e Truques sobre Performance em Java EE, JPA e JSF
Dicas e Truques sobre Performance em Java EE, JPA e JSF
Dr. Spock
 
Computação Física com Arduino/Program-ME e a Plataforma Java
Computação Física com Arduino/Program-ME e a Plataforma JavaComputação Física com Arduino/Program-ME e a Plataforma Java
Computação Física com Arduino/Program-ME e a Plataforma Java
Dr. Spock
 
Os 5 Níveis de Reuso
Os 5 Níveis de ReusoOs 5 Níveis de Reuso
Os 5 Níveis de Reuso
Dr. Spock
 
JSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaJSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com Java
Dr. Spock
 
Dojo com Arduino e Program-ME
Dojo com Arduino e Program-MEDojo com Arduino e Program-ME
Dojo com Arduino e Program-ME
Dr. Spock
 

Mais de Dr. Spock (20)

Improving Batch-Process Testing Techniques with a Domain-Specific Language
Improving Batch-Process Testing Techniques with a Domain-Specific LanguageImproving Batch-Process Testing Techniques with a Domain-Specific Language
Improving Batch-Process Testing Techniques with a Domain-Specific Language
 
Avoiding Java EE Application Design Traps to Achieve Effective Use of Cloud C...
Avoiding Java EE Application Design Traps to Achieve Effective Use of Cloud C...Avoiding Java EE Application Design Traps to Achieve Effective Use of Cloud C...
Avoiding Java EE Application Design Traps to Achieve Effective Use of Cloud C...
 
Evitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvem
Evitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvemEvitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvem
Evitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvem
 
TDC2011: Spring, uma plataforma enterprise, social, móvel e nas nuvens
TDC2011: Spring, uma plataforma enterprise, social, móvel e nas nuvensTDC2011: Spring, uma plataforma enterprise, social, móvel e nas nuvens
TDC2011: Spring, uma plataforma enterprise, social, móvel e nas nuvens
 
TDC2011: Arquitetura de Software Enterprise
TDC2011: Arquitetura de Software EnterpriseTDC2011: Arquitetura de Software Enterprise
TDC2011: Arquitetura de Software Enterprise
 
TDC2011: Java EE 6 & Azure
TDC2011: Java EE 6 & AzureTDC2011: Java EE 6 & Azure
TDC2011: Java EE 6 & Azure
 
Spring Framework no desenvolvimento móvel
Spring Framework no desenvolvimento móvelSpring Framework no desenvolvimento móvel
Spring Framework no desenvolvimento móvel
 
Desafios no deploy de aplicações Java EE 6 no Microsoft Azure
Desafios no deploy de aplicações Java EE 6 no Microsoft AzureDesafios no deploy de aplicações Java EE 6 no Microsoft Azure
Desafios no deploy de aplicações Java EE 6 no Microsoft Azure
 
Performance Tips and Tricks: Java EE, Java Persistence API and JavaServer Faces
Performance Tips and Tricks: Java EE, Java Persistence API and JavaServer FacesPerformance Tips and Tricks: Java EE, Java Persistence API and JavaServer Faces
Performance Tips and Tricks: Java EE, Java Persistence API and JavaServer Faces
 
Dicas e truques sobre performance em JavaEE, JPA e JSF
Dicas e truques sobre performance em JavaEE, JPA e JSFDicas e truques sobre performance em JavaEE, JPA e JSF
Dicas e truques sobre performance em JavaEE, JPA e JSF
 
Computação Física com Arduino, Program-ME e Java
Computação Física com Arduino, Program-ME e JavaComputação Física com Arduino, Program-ME e Java
Computação Física com Arduino, Program-ME e Java
 
Spring 3: Uma Plataforma além do Framework
Spring 3: Uma Plataforma além do FrameworkSpring 3: Uma Plataforma além do Framework
Spring 3: Uma Plataforma além do Framework
 
Produtividade com Spring Roo no Google App Engine
Produtividade com Spring Roo no Google App EngineProdutividade com Spring Roo no Google App Engine
Produtividade com Spring Roo no Google App Engine
 
Criando uma Aplicação Web com Spring Roo em 5 minutos!
Criando uma Aplicação Web com Spring Roo em 5 minutos!Criando uma Aplicação Web com Spring Roo em 5 minutos!
Criando uma Aplicação Web com Spring Roo em 5 minutos!
 
Spring Framework 3: Um 'brainstorm' de novas funcionalidades
Spring Framework 3: Um 'brainstorm' de novas funcionalidadesSpring Framework 3: Um 'brainstorm' de novas funcionalidades
Spring Framework 3: Um 'brainstorm' de novas funcionalidades
 
Dicas e Truques sobre Performance em Java EE, JPA e JSF
Dicas e Truques sobre Performance em Java EE, JPA e JSFDicas e Truques sobre Performance em Java EE, JPA e JSF
Dicas e Truques sobre Performance em Java EE, JPA e JSF
 
Computação Física com Arduino/Program-ME e a Plataforma Java
Computação Física com Arduino/Program-ME e a Plataforma JavaComputação Física com Arduino/Program-ME e a Plataforma Java
Computação Física com Arduino/Program-ME e a Plataforma Java
 
Os 5 Níveis de Reuso
Os 5 Níveis de ReusoOs 5 Níveis de Reuso
Os 5 Níveis de Reuso
 
JSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaJSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com Java
 
Dojo com Arduino e Program-ME
Dojo com Arduino e Program-MEDojo com Arduino e Program-ME
Dojo com Arduino e Program-ME
 

Último

Subindo uma aplicação WordPress em docker na AWS
Subindo uma aplicação WordPress em docker na AWSSubindo uma aplicação WordPress em docker na AWS
Subindo uma aplicação WordPress em docker na AWS
Ismael Ash
 
Ferramentas que irão te ajudar a entrar no mundo de DevOps/CLoud
Ferramentas que irão te ajudar a entrar no mundo de   DevOps/CLoudFerramentas que irão te ajudar a entrar no mundo de   DevOps/CLoud
Ferramentas que irão te ajudar a entrar no mundo de DevOps/CLoud
Ismael Ash
 
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docxse38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
ronaldos10
 
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
Faga1939
 
Aula combustiveis mais utilizados na indústria
Aula combustiveis mais utilizados na indústriaAula combustiveis mais utilizados na indústria
Aula combustiveis mais utilizados na indústria
zetec10
 
Apresentação sobre Deep Web e anonimização
Apresentação sobre Deep Web e anonimizaçãoApresentação sobre Deep Web e anonimização
Apresentação sobre Deep Web e anonimização
snerdct
 

Último (6)

Subindo uma aplicação WordPress em docker na AWS
Subindo uma aplicação WordPress em docker na AWSSubindo uma aplicação WordPress em docker na AWS
Subindo uma aplicação WordPress em docker na AWS
 
Ferramentas que irão te ajudar a entrar no mundo de DevOps/CLoud
Ferramentas que irão te ajudar a entrar no mundo de   DevOps/CLoudFerramentas que irão te ajudar a entrar no mundo de   DevOps/CLoud
Ferramentas que irão te ajudar a entrar no mundo de DevOps/CLoud
 
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docxse38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
 
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
 
Aula combustiveis mais utilizados na indústria
Aula combustiveis mais utilizados na indústriaAula combustiveis mais utilizados na indústria
Aula combustiveis mais utilizados na indústria
 
Apresentação sobre Deep Web e anonimização
Apresentação sobre Deep Web e anonimizaçãoApresentação sobre Deep Web e anonimização
Apresentação sobre Deep Web e anonimização
 

TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6

  • 1. Contexts & Dependency Injection (CDI) Usando os recursos de extensibilidade da API de CDI do Java EE 6 Dr. Spock @drspockbr
  • 2. @bout me! • Bacharel e especialista em Física pela UFV e Unicamp; • Desenvolvedor de aplicações Web desde 96 e Java desde 99; • Palestrante nos principais eventos nacionais e internacionais; • Integrante da equipe de desenvolvimento da Vocado LLC
  • 4. Agenda • Introdução • Principais recursos • CDI Portable Extensions • Q&A
  • 6. O que é CDI?
  • 7. “Contexts and Dependency Injection (CDI) é a especificação da plataforma Java EE que adiciona os conceitos de injeção de dependência e contextos aos componentes de negócios de uma aplicação corporativa.”
  • 8. Características • Type-safe; • Orientado a anotações; • Consistente; • Portável; • Turbina o modelo de componentes do Java EE.
  • 10. Origens do CDI JSR-299 JSR-330 Web Beans Dependency Injection for Java
  • 11. Origens do CDI JSR-299 JSR-330 Contexts and Dependency Injection Dependency Injection for Java EE for Java
  • 12. Origens do CDI JSR-299 JSR-330 Contexts and Dependency Injection Dependency Injection for Java EE for Java
  • 14. CDI no Java EE 6
  • 15. CDI no Java EE 6
  • 17. Principais Recursos • Managed Bean • Injection • Contexts • Qualifiers • Events • Alternatives
  • 18. Principais Recursos • Specializations • Stereotypes • Interceptors • Decorators • Producers/Disposers • Portable Extensions (SPI)
  • 19. Development Time vs Runtime
  • 20. Injeção de Dependência (Development Time) @Inject • @javax.inject.Inject private ICaixaEletronico cxEletronico; • Baseado no tipo do atributo ou parâmetro • Injeta ocorrência única do tipo • Instancia a partir do construtor sem parâmetros
  • 21. Producers (Development Time) @Produces • Criação customizada de beans; @BankRepository @PersistenceContext private EntityManager em; • Qualificador ajuda a ter múltiplos gerenciadores: @Produces @BankRepository Ex.: @BankRepository @Resource private DataSource ds; public class ProdutoDAO { public class StoredProcedureBean { @Inject @Inject @BankRepository @BankRepository private EntityManager manager; private DataSource ds; } }
  • 22. Producers (Development Time) @Produces • Criação customizada de beans; @BankRepository @PersistenceContext private EntityManager em; • Qualificador ajuda a ter múltiplos gerenciadores: @Produces @BankRepository Ex.: @BankRepository @Resource private DataSource ds; public void close(@Disposes EntityManager em) { em.close(); }
  • 23. Producers (Runtime) • Criação customizada de beans; • Necessário um qualificador: Ex.: @Customizado @Inject @Customizado private ICaixaEletronico cxEletronico; @Producer @Customizado public ICaixaEletronico criarCaixaEletronicoCustomizado() { TDCBankCaixaEletronico e = new TDCBankCaixaEletronico(...); // customiza o caixa eletrônico return e; }
  • 24. Producers (Runtime) • Criação customizada de objectos IStoredProcedure: @Inject @StoredProcedure(name = ”PROC_01”, repository = @BankRepository) @Customizado private IStoredProcedure procedure; @Produces @Customizado public IStoredProcedure criarProcedure(InjectionPoint p) { // Obtem dados da anotação via objeto p. IStoredProcedure procedure = ... ; return procedure; }
  • 25. Producers (Runtime) • Obtem EntityManager de acordo anotação; @Inject @StoredProcedure(name = ”PROC_01”, repository = @BankRepository) @Customizado private IStoredProcedure procedure; @Inject @Any private Instance<EntityManager> managerResolver; public IStoredProcedure criarProcedure(InjectionPoint p) { // Obtem dados da anotação via objeto p. Annotation repositoryAnnotation = ... ; EntityManager em = managerResolver.select(repositoryAnnotation); IStoredProcedure procedure = ... ; return procedure; }
  • 27. Portable Extentions (SPI) • Funcionalidades para runtime; • Permite registrar: • Beans customizados • Escopos customizados • Interceptors • Decorators • Stereotypes
  • 28. Portable Extentions (SPI) • Busca programática de beans; • Injetar CDI beans em objetos próprios; • Adicionar ou sobrescrever meta-anotações
  • 30. Meta-Interfaces • javax.enterprise.inject.spi • Decorator<T> • Extension • Producer<T> • InjectionPoint • ObserverMethod<T> • Bean<T> • AnnotatedType<T> • InjectionTarget<T> • AnnotatedMethod<T> • Interceptor<T> • Instance<T>
  • 31. SPI Events • BeforeBeanDiscovery • ProcessBean • AfterBeanDiscovery • ProcessObserverMethod • BeforeShutdown • AfterDeploymentValidat ion • ProcessAnnotatedType • ProcessInjectionType public void tratadorEvento( @Observes BeforeShutdown event) { // Lógica para processar evento. • ProcessProducer };
  • 32. BeanManager • Permite interagir diretamente com o CDI @Inject private BeanManager beanManager;
  • 33. Criando um Extension • Não é exatamente um CDI bean; • Criado durante o processo de inicialização, antes de qualquer bean ou contexto existir; public class MinhaExtensao implements Extension { // tratadores de eventos SPI. • Registrado em: }; META-INF/services/ javax.enterprise.inject.spi.Extension
  • 35. Exemplo de Extensões http://openwebbeans.apache.org
  • 37. Obrigado! • Contato: Dr. Spock tdc2012@spock.com.br • Twitter: @drspockbr • About me: http://about.me/drspockbr • Slides: http://slideshare.net/drspockbr