Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Contexts & Dependency   Injection (CDI)  Usando os recursos de extensibilidade da          API de CDI do Java EE 6        ...
@bout me!• Bacharel e especialista em Física  pela UFV e Unicamp;• Desenvolvedor de aplicações  Web desde 96 e Java desde ...
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 dep...
Características• Type-safe;• Orientado a anotações;• Consistente;• Portável;• Turbina o modelo de  componentes do Java EE.
Origens do CDI
Origens do CDIJSR-299         JSR-330Web Beans   Dependency Injection                 for Java
Origens do CDI          JSR-299                       JSR-330Contexts and Dependency Injection   Dependency Injection     ...
Origens do CDI          JSR-299                       JSR-330Contexts and Dependency Injection   Dependency Injection     ...
Implementaçãode 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 ICaixaEl...
Producers            (Development Time)                                         @Produces • Criação customizada de beans; ...
Producers        (Development Time)                                    @Produces• Criação customizada de beans;     @BankR...
Producers                   (Runtime)• Criação customizada de beans;• Necessário um qualificador:  Ex.: @Customizado @Injec...
Producers                   (Runtime)• Criação customizada de objectos IStoredProcedure:     @Inject     @StoredProcedure(...
Producers                    (Runtime)• Obtem EntityManager de acordo anotação;      @Inject      @StoredProcedure(name = ...
Portable Extensions       (SPI)
Portable Extentions (SPI)• Funcionalidades para runtime;• Permite registrar:  • Beans customizados  • Escopos customizados...
Portable Extentions (SPI)• Busca programática de  beans;• Injetar CDI beans em  objetos próprios;• Adicionar ou sobrescrev...
Partes do SPI
Meta-Interfaces• javax.enterprise.inject.spi   • Decorator<T>• Extension                     • Producer<T>• InjectionPoint...
SPI Events• BeforeBeanDiscovery            • ProcessBean• AfterBeanDiscovery             • ProcessObserverMethod• BeforeSh...
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 ...
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: ...
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
Upcoming SlideShare
Loading in …5
×

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

1,687 views

Published on

Palestra que explorou os recursos de extensibilidade da API de CDI (Contexts & Dependency Injection) do Java EE 6 e foi realizada no The Developers Conference 2012 em São Paulo para a trilha de Java EE.

Resumo: "Dentre todas as APIs que compõem a especificação da plataforma Java EE 6, a API de Contextos e Injeção de Dependência (Contexts and Dependency Injection), ou simplesmente CDI, é a grande novidade que não existia nas versões anteriores desta plataforma. Esta API adiciona um suporte ao conceito de "Injeção de Dependências" como uma ferramenta de modelagem. Contudo, esta API suporta um conjunto de pontos de extensão que permitem uma aplicação adicionar novas funcionalidades na plataforma ou mudar o comportamento padrão definido pela especificação. Esta apresentação irá explorar recursos de extensibilidade do CDI para um uso avançado ao criar componentes numa aplicação enterprise baseados em CDI beans integrados à plataforma."

Published in: Technology
  • Be the first to comment

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

  1. 1. Contexts & Dependency Injection (CDI) Usando os recursos de extensibilidade da API de CDI do Java EE 6 Dr. Spock @drspockbr
  2. 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
  3. 3. Agenda• Introdução• Principais recursos• CDI Portable Extensions• Q&A
  4. 4. Introdução
  5. 5. O que é CDI?
  6. 6. “Contexts and Dependency Injection(CDI) é a especificação da plataforma Java EE que adiciona os conceitos de injeção de dependência e contextosaos componentes de negócios de uma aplicação corporativa.”
  7. 7. Características• Type-safe;• Orientado a anotações;• Consistente;• Portável;• Turbina o modelo de componentes do Java EE.
  8. 8. Origens do CDI
  9. 9. Origens do CDIJSR-299 JSR-330Web Beans Dependency Injection for Java
  10. 10. Origens do CDI JSR-299 JSR-330Contexts and Dependency Injection Dependency Injection for Java EE for Java
  11. 11. Origens do CDI JSR-299 JSR-330Contexts and Dependency Injection Dependency Injection for Java EE for Java
  12. 12. Implementaçãode Referência
  13. 13. CDI no Java EE 6
  14. 14. CDI no Java EE 6
  15. 15. Principais Recursos
  16. 16. Principais Recursos• Managed Bean• Injection• Contexts• Qualifiers• Events• Alternatives
  17. 17. Principais Recursos• Specializations• Stereotypes• Interceptors• Decorators• Producers/Disposers• Portable Extensions (SPI)
  18. 18. Development Time vs Runtime
  19. 19. 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
  20. 20. 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;} }
  21. 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 void close(@Disposes EntityManager em) { em.close(); }
  22. 22. 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; }
  23. 23. 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; }
  24. 24. Producers (Runtime)• Obtem EntityManager de acordo anotação; @Inject @StoredProcedure(name = ”PROC_01”, repository = @BankRepository) @Customizado private IStoredProcedure procedure;@Inject@Anyprivate 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;}
  25. 25. Portable Extensions (SPI)
  26. 26. Portable Extentions (SPI)• Funcionalidades para runtime;• Permite registrar: • Beans customizados • Escopos customizados • Interceptors • Decorators • Stereotypes
  27. 27. Portable Extentions (SPI)• Busca programática de beans;• Injetar CDI beans em objetos próprios;• Adicionar ou sobrescrever meta-anotações
  28. 28. Partes do SPI
  29. 29. 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>
  30. 30. SPI Events• BeforeBeanDiscovery • ProcessBean• AfterBeanDiscovery • ProcessObserverMethod• BeforeShutdown • AfterDeploymentValidat ion• ProcessAnnotatedType• ProcessInjectionType public void tratadorEvento( @Observes BeforeShutdown event) { // Lógica para processar evento.• ProcessProducer };
  31. 31. BeanManager• Permite interagir diretamente com o CDI @Inject private BeanManager beanManager;
  32. 32. 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
  33. 33. Exemplo de Extensões
  34. 34. Exemplo de Extensões http://openwebbeans.apache.org
  35. 35. Perguntas
  36. 36. Obrigado!• Contato: Dr. Spock tdc2012@spock.com.br• Twitter: @drspockbr• About me: http://about.me/drspockbr• Slides: http://slideshare.net/drspockbr

×