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

1,553 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
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,553
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
0
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

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

×