SlideShare uma empresa Scribd logo
1 de 21
Introdução a CDI e como utilizá-la
       em aplicações reais

            Michel Graciano
               TDC 2012
Agenda
•   Introdução e visão geral
•   Recursos diferenciados
•   Como utilizar isso tudo junto?
•   Perguntas
“CDI is more than a framework. It's a whole, rich
programming model. The theme of CDI is loose-
 coupling with strong typing.” Weld specification
Introdução
• Abordagem fortemente tipada
  – Uso extensivo de anotações e tipos Java
• Contextual
  – O gerenciamento contextual de ciclos de vida
    desacopla o ciclo de vida de cada bean
• Injeção de dependências
  – @javax.inject.Inject
• Beans and injectable objects @Inject
                               Saudacao
                               saudacao;
Introdução
• Qualificadores
  – @Qualifier
• Nomes EL
  – @Named
• Configuração
  – beans.xml
                       @Informal
                       @Inject
                       Saudacao
                       saudacao;
DEMO
Recursos diferenciados
•   Combinação clara de escopos
•   Acesso ao ponto de injeção
•   AOP sem interfaces
•   Sistema de eventos
•   Producers
•   Extensões portáveis
Escopos
• Determina o ciclo de vida das instâncias do
  bean
• Tipos de escopos
  – Request
  – Session
  – Application
  – Dependent
  – Conversation
Interceptors
• Desacopla detalhes técnicos da lógica de
  negócio
• Ortogonal ao sistema de tipos Java e da
  aplicação
• Tipos de pontos de interceptação
  – Métodos de negócio
  – Callbacks de ciclo de vida
• Utiliza o conceito de interceptor binding
• Habilitado via beans.xml
Decorators
• Permite que regras de negócios sejam
  organizadas utilizando o conceito de
  interceptors
• Vinculado a um tipo Java
  – Inerente a interface de negócio
• Delegate através de injeção de dependência
  – @Delegate
• São executados após os interceptors
• Habilitado via beans.xml
Sistema de eventos
• Inspirado no padrão Observer
• Os produtores de eventos são totalmente
  desacoplados dos consumidores, e vice-versa
• Filtro de notificações utilizando-se
  qualificadores
• Possibilidade de uso de consumidores
  condicionais e transacionais
Stereotypes
• Agregador de metadados
  – Escopo padrão
  – Interceptors bindings
  – Nome EL padrão
  – Alternativas
  – Aninhamento de Stereotypes
• Stereotype nativo
  – @Model
Alternativas e especializações
• Permite polimorfismo em tempo de deployment
  – @Alternative
  – @Specializes
• Habilitado via beans.xml
Producers
• Permite polimorfismo em tempo de execução
• @Produces pode ser aplicado a métodos e
  campos
• Objetos injetados via producer methods podem
  ser destruídos utilizando disposer methods
  – @Disposes
Producer methods
• Podem definir um escopo
• Casos de uso comuns
  – O objeto a ser injetado não é exatamente um bean
  – O tipo do objeto a ser injetado pode variar em tempo
    de execução
  – O objeto a ser injetado precisa de uma inicialização
    personalizada
Extensões portáveis
• A SPI permite às extensões
  – Prover seus próprios beans, interceptors e
    decorators ao container
  – Injetar dependências em objetos
  – Prover uma implementação personalizada a um
    novo escopo
  – Aprimorar ou substituir metadados de anotações a
    partir de outras fontes
  – Acompanhar eventos nativos do CDI
Extensões portáveis
E como tudo isso funciona junto?
@TypedQuery tipada




-------------------------------------------------------------
COMPILATION ERROR :
-------------------------------------------------------------
and returns false.
model/CustomerModel.java:[47,25] error: Named query 'Customer.findByNme' not defined yet.
model/CustomerModel.java:[43,25] error: Named query 'Customer.findAl' not defined yet.
2 errors
-------------------------------------------------------------
Perguntas?
Obrigado!


           Michel Graciano
                @mgraciano
https://github.com/mgraciano/javaone-2012
       http://www.michelgraciano.com

Mais conteúdo relacionado

Mais procurados

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áticaGlobalcode
 
Introdução ao Spring Framework
Introdução ao Spring FrameworkIntrodução ao Spring Framework
Introdução ao Spring FrameworkNatanael Fonseca
 
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 produtividadeRafael Ponte
 
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 JavaMariana de Azevedo Santos
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Helder da Rocha
 
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 CakePHPSérgio Vilar
 
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 2rodrigoareis
 
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 ZendThiago Sinésio
 
JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010Eder Magalhães
 
A arquitetura modular do Java 9
A arquitetura modular do Java 9A arquitetura modular do Java 9
A arquitetura modular do Java 9Helder da Rocha
 
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õesRodrigo Cândido da Silva
 
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 2Cezar Souza
 

Mais procurados (20)

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
 
EJB
EJBEJB
EJB
 
Introdução ao Spring Framework
Introdução ao Spring FrameworkIntrodução ao Spring Framework
Introdução ao Spring Framework
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Introducao EJB 3
Introducao EJB 3Introducao EJB 3
Introducao EJB 3
 
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
 
Maverick v1.0
Maverick v1.0Maverick v1.0
Maverick v1.0
 
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
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 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)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
 
Desenvolvimento Web com CakePHP
Desenvolvimento Web com CakePHPDesenvolvimento Web com CakePHP
Desenvolvimento Web com CakePHP
 
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
 
Tutorial Java EE
Tutorial Java EETutorial Java EE
Tutorial Java EE
 
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
 
JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010
 
A arquitetura modular do Java 9
A arquitetura modular do Java 9A arquitetura modular do Java 9
A arquitetura modular do Java 9
 
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
 
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
 
J boss seam
J boss seamJ boss seam
J boss seam
 
Java 9, 10, 11
Java 9, 10, 11Java 9, 10, 11
Java 9, 10, 11
 

Semelhante a CDI: Introdução aos recursos e como utilizá-los em aplicações

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 MicroprofileVictor Osorio
 
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 6Dr. Spock
 
Padrões de Projeto - Observer e Strategy
Padrões de Projeto - Observer e StrategyPadrões de Projeto - Observer e Strategy
Padrões de Projeto - Observer e StrategyJoão Carlos Ottobboni
 
REFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADE
REFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADEREFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADE
REFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADEAlexsander Camargo
 
Aspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpAspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpComunidade NetPonto
 
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6Dr. Spock
 
Diapositivos práticos - Integração de Sistemas.pdf
Diapositivos práticos - Integração de Sistemas.pdfDiapositivos práticos - Integração de Sistemas.pdf
Diapositivos práticos - Integração de Sistemas.pdfJ0071
 
Aula 2 modelo de processo de software1
Aula 2   modelo de processo de software1Aula 2   modelo de processo de software1
Aula 2 modelo de processo de software1Tiago Vizoto
 
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 CDIRodrigo Cândido da Silva
 
Microprofile - Facilitando o desenvolvimento de Microserviços
Microprofile - Facilitando o desenvolvimento de MicroserviçosMicroprofile - Facilitando o desenvolvimento de Microserviços
Microprofile - Facilitando o desenvolvimento de MicroserviçosIvan Junckes Filho
 
Revisitando as Práticas de Engenharia Ágil
Revisitando as Práticas de Engenharia ÁgilRevisitando as Práticas de Engenharia Ágil
Revisitando as Práticas de Engenharia ÁgilDanilo Sato
 
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EEUso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EEMarco Antonio Maciel
 
TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"Cesar Romero
 
ERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
ERES 2018 - Microserviços: Desafios para Lidar com a QualidadeERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
ERES 2018 - Microserviços: Desafios para Lidar com a QualidadeAndré Abe Vicente
 

Semelhante a CDI: Introdução aos recursos e como utilizá-los em aplicações (20)

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
 
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
 
Padrões de Projeto - Observer e Strategy
Padrões de Projeto - Observer e StrategyPadrões de Projeto - Observer e Strategy
Padrões de Projeto - Observer e Strategy
 
REFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADE
REFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADEREFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADE
REFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADE
 
Potencializando a qualidade de código
Potencializando a qualidade de códigoPotencializando a qualidade de código
Potencializando a qualidade de código
 
Mini curso JBC
Mini curso JBCMini curso JBC
Mini curso JBC
 
Aspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpAspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharp
 
Rational Unfied Process
Rational Unfied ProcessRational Unfied Process
Rational Unfied Process
 
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
 
Diapositivos práticos - Integração de Sistemas.pdf
Diapositivos práticos - Integração de Sistemas.pdfDiapositivos práticos - Integração de Sistemas.pdf
Diapositivos práticos - Integração de Sistemas.pdf
 
Aula 2 modelo de processo de software1
Aula 2   modelo de processo de software1Aula 2   modelo de processo de software1
Aula 2 modelo de processo de software1
 
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
 
Microprofile - Facilitando o desenvolvimento de Microserviços
Microprofile - Facilitando o desenvolvimento de MicroserviçosMicroprofile - Facilitando o desenvolvimento de Microserviços
Microprofile - Facilitando o desenvolvimento de Microserviços
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
Revisitando as Práticas de Engenharia Ágil
Revisitando as Práticas de Engenharia ÁgilRevisitando as Práticas de Engenharia Ágil
Revisitando as Práticas de Engenharia Ágil
 
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EEUso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
 
TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"
 
ERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
ERES 2018 - Microserviços: Desafios para Lidar com a QualidadeERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
ERES 2018 - Microserviços: Desafios para Lidar com a Qualidade
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
Aula 3
Aula 3Aula 3
Aula 3
 

Mais de Michel Graciano

Aplicando CDI em aplicações Java
Aplicando CDI em aplicações JavaAplicando CDI em aplicações Java
Aplicando CDI em aplicações JavaMichel Graciano
 
O papel e a carreira de um desenvolvedor de software
O papel e a carreira de um desenvolvedor de softwareO papel e a carreira de um desenvolvedor de software
O papel e a carreira de um desenvolvedor de softwareMichel Graciano
 
Finalmente java sabe trabalhar com data e hora (gu java sc)
Finalmente java sabe trabalhar com data e hora (gu java sc)Finalmente java sabe trabalhar com data e hora (gu java sc)
Finalmente java sabe trabalhar com data e hora (gu java sc)Michel Graciano
 
CON6423: Scalable JavaScript applications with Project Nashorn
CON6423: Scalable JavaScript applications with Project NashornCON6423: Scalable JavaScript applications with Project Nashorn
CON6423: Scalable JavaScript applications with Project NashornMichel Graciano
 
Finalmente java sabe trabalhar com data e hora
Finalmente java sabe trabalhar com data e horaFinalmente java sabe trabalhar com data e hora
Finalmente java sabe trabalhar com data e horaMichel Graciano
 
Designing Java EE Applications in the Age of CDI
Designing Java EE Applications in the Age of CDIDesigning Java EE Applications in the Age of CDI
Designing Java EE Applications in the Age of CDIMichel Graciano
 
genesis - Acelerando o desenvolvimento de aplicações desktop
genesis - Acelerando o desenvolvimento de aplicações desktopgenesis - Acelerando o desenvolvimento de aplicações desktop
genesis - Acelerando o desenvolvimento de aplicações desktopMichel Graciano
 

Mais de Michel Graciano (7)

Aplicando CDI em aplicações Java
Aplicando CDI em aplicações JavaAplicando CDI em aplicações Java
Aplicando CDI em aplicações Java
 
O papel e a carreira de um desenvolvedor de software
O papel e a carreira de um desenvolvedor de softwareO papel e a carreira de um desenvolvedor de software
O papel e a carreira de um desenvolvedor de software
 
Finalmente java sabe trabalhar com data e hora (gu java sc)
Finalmente java sabe trabalhar com data e hora (gu java sc)Finalmente java sabe trabalhar com data e hora (gu java sc)
Finalmente java sabe trabalhar com data e hora (gu java sc)
 
CON6423: Scalable JavaScript applications with Project Nashorn
CON6423: Scalable JavaScript applications with Project NashornCON6423: Scalable JavaScript applications with Project Nashorn
CON6423: Scalable JavaScript applications with Project Nashorn
 
Finalmente java sabe trabalhar com data e hora
Finalmente java sabe trabalhar com data e horaFinalmente java sabe trabalhar com data e hora
Finalmente java sabe trabalhar com data e hora
 
Designing Java EE Applications in the Age of CDI
Designing Java EE Applications in the Age of CDIDesigning Java EE Applications in the Age of CDI
Designing Java EE Applications in the Age of CDI
 
genesis - Acelerando o desenvolvimento de aplicações desktop
genesis - Acelerando o desenvolvimento de aplicações desktopgenesis - Acelerando o desenvolvimento de aplicações desktop
genesis - Acelerando o desenvolvimento de aplicações desktop
 

CDI: Introdução aos recursos e como utilizá-los em aplicações

  • 1. Introdução a CDI e como utilizá-la em aplicações reais Michel Graciano TDC 2012
  • 2. Agenda • Introdução e visão geral • Recursos diferenciados • Como utilizar isso tudo junto? • Perguntas
  • 3. “CDI is more than a framework. It's a whole, rich programming model. The theme of CDI is loose- coupling with strong typing.” Weld specification
  • 4. Introdução • Abordagem fortemente tipada – Uso extensivo de anotações e tipos Java • Contextual – O gerenciamento contextual de ciclos de vida desacopla o ciclo de vida de cada bean • Injeção de dependências – @javax.inject.Inject • Beans and injectable objects @Inject Saudacao saudacao;
  • 5. Introdução • Qualificadores – @Qualifier • Nomes EL – @Named • Configuração – beans.xml @Informal @Inject Saudacao saudacao;
  • 7. Recursos diferenciados • Combinação clara de escopos • Acesso ao ponto de injeção • AOP sem interfaces • Sistema de eventos • Producers • Extensões portáveis
  • 8. Escopos • Determina o ciclo de vida das instâncias do bean • Tipos de escopos – Request – Session – Application – Dependent – Conversation
  • 9. Interceptors • Desacopla detalhes técnicos da lógica de negócio • Ortogonal ao sistema de tipos Java e da aplicação • Tipos de pontos de interceptação – Métodos de negócio – Callbacks de ciclo de vida • Utiliza o conceito de interceptor binding • Habilitado via beans.xml
  • 10. Decorators • Permite que regras de negócios sejam organizadas utilizando o conceito de interceptors • Vinculado a um tipo Java – Inerente a interface de negócio • Delegate através de injeção de dependência – @Delegate • São executados após os interceptors • Habilitado via beans.xml
  • 11. Sistema de eventos • Inspirado no padrão Observer • Os produtores de eventos são totalmente desacoplados dos consumidores, e vice-versa • Filtro de notificações utilizando-se qualificadores • Possibilidade de uso de consumidores condicionais e transacionais
  • 12. Stereotypes • Agregador de metadados – Escopo padrão – Interceptors bindings – Nome EL padrão – Alternativas – Aninhamento de Stereotypes • Stereotype nativo – @Model
  • 13. Alternativas e especializações • Permite polimorfismo em tempo de deployment – @Alternative – @Specializes • Habilitado via beans.xml
  • 14. Producers • Permite polimorfismo em tempo de execução • @Produces pode ser aplicado a métodos e campos • Objetos injetados via producer methods podem ser destruídos utilizando disposer methods – @Disposes
  • 15. Producer methods • Podem definir um escopo • Casos de uso comuns – O objeto a ser injetado não é exatamente um bean – O tipo do objeto a ser injetado pode variar em tempo de execução – O objeto a ser injetado precisa de uma inicialização personalizada
  • 16. Extensões portáveis • A SPI permite às extensões – Prover seus próprios beans, interceptors e decorators ao container – Injetar dependências em objetos – Prover uma implementação personalizada a um novo escopo – Aprimorar ou substituir metadados de anotações a partir de outras fontes – Acompanhar eventos nativos do CDI
  • 18. E como tudo isso funciona junto?
  • 19. @TypedQuery tipada ------------------------------------------------------------- COMPILATION ERROR : ------------------------------------------------------------- and returns false. model/CustomerModel.java:[47,25] error: Named query 'Customer.findByNme' not defined yet. model/CustomerModel.java:[43,25] error: Named query 'Customer.findAl' not defined yet. 2 errors -------------------------------------------------------------
  • 21. Obrigado! Michel Graciano @mgraciano https://github.com/mgraciano/javaone-2012 http://www.michelgraciano.com