TDC2010 - Turbinando sua Aplicação com CDI
-
Upload
rodrigo-candido-da-silva -
Category
Technology
-
view
3.190 -
download
2
Transcript of TDC2010 - Turbinando sua Aplicação com CDI
Globalcode – Open4education
Turbinando sua Aplicação com CDI Rodrigo Cândido da Silva
Instrutor VOffice / Globalcode
Globalcode – Open4education
Agenda
! Injeção Dependência (IoC) ! IoC no Java EE 5 ! CDI
! Objetivo ! Managed Beans ! Principais Recursos
! Demo ! Sumário ! Perguntas e Respostas
Globalcode – Open4education
Injeção Dependência (IoC)
! Mecanismo de “injeção” de recursos necessários a um componente de forma automática ! Sem a presença de instruções explícitas para acessar o
recurso ! Exemplo:
! O componente de negócios A depende do componente de negócios B e do pool de conexões C.
A B
C
Globalcode – Open4education
Injeção Dependência (IoC)
! Sem injeção de dependência ! Código fonte do componente A contém instruções para
“buscar” o componente B e o recurso C
A
B C
Serviço de Nomes
“ejb/componenteB”
“jdbc/dataSourceC”
lookups
Globalcode – Open4education
Injeção Dependência (IoC) class ComponenteA {
@EJB(name=“ejb/componenteB”) InterfaceB b;
@Resource(name=“jdbc/dataSourceC”) DataSource c;
}
A
B C
Serviço de Nomes
“ejb/componenteB”
“jdbc/dataSourceC”
injeção
Globalcode – Open4education
IoC no Java EE 5
! Limitações ! Mecanismo muito básico de IoC ! Não suporta a injeção de POJOs
! Somente componentes Java EE
! Não suporta customização ! Não tem tipagem definida ! Lista limitada de anotações
! @EJB ! @PersistenceContext, @PersistenceUnit ! @Resource
Globalcode – Open4education
CDI (JSR-299)
! CDI = Context Dependency Injection ! Novo modelo para gerenciamento de beans e
injeção de dependência ! Nova definição para escopos de aplicação ! Também conhecido como “Web Beans” ! Integra as camadas web e negócio da aplicação
! Facilita a implementação das aplicações que utilizam tecnologias como JSF e EJB (Java EE)
Globalcode – Open4education
CDI (JSR-299)
! Gerenciamento de ciclo de vida de componentes statefull
! Provê um mecanismo de DI typesafe ! Disponibiliza mecanismo de eventos facilitando o
desenvolvimento com baixo acoplamento ! Tem um mecanismo de Interceptors e Decorators ! Possibilita a criação de extensões portáveis para
qualquer implementação ! Integração com EL
Globalcode – Open4education
CDI Managed Beans
! Nova definição para “beans
! Instâncias são gerenciadas pelo container
! Serviços disponíveis ! Injeção de Dependência ! Ciclo de vida ! Interceptors ! Events
Globalcode – Open4education
O que pode ser injetado
! CDI Managed Beans (POJO) ! Objetos retornados por @Produces ! EJB Session Bean (local ou remoto) ! Java EE Resources (DataSource, JMS) ! JTA UserTransaction ! EntityManager (JPA) ! Bean Validation Factory ! Destination e ConnectionFactory JMS
Globalcode – Open4education
Principais Recursos
! Injection Points ! Qualifiers ! Alternatives ! EL Names ! Producer Methods ! Java EE Resources ! Scopes and Contexts ! Interceptors ! Stereotypes ! Events
Globalcode – Open4education
Scopes and Contexts
! Define um modelo de escopos extensível ! Escopo dependente - @Dependent
! Escopo padrão de todas classes ! Significa que o objeto “injetado” encontra-se no mesmo
escopo e tem o mesmo ciclo de vida do objeto cliente ! Outros escopos disponíveis
! @ApplicationScoped ! @RequestScoped ! @SessionScoped ! @ConversationScoped
! Request <= Conversation <= Session
Globalcode – Open4education
Implementações
! Weld / Seam ! Implementação de referência (RI) ! Incluída no JBoss AS e Glassfish ! Utilizado como base para Seam 3 ! Extensões para Spring, Drools, jBPM, JBoss ESB, GWT
! CanDI ! Caucho (Resin) ! Extensões para iBATIS, Struts 2, Wicket, Quartz, JMS, JDBC
! OpenWebBeans ! Apache (Geronimo) ! Integra com OpenEJB e funciona no Tomcat
Globalcode – Open4education
Sumário
! Java EE 6 é mais “enxuto” e mais produtivo ! CDI (JSR-299) fornece uma lista de serviços
! Integração JSF com EJB ! Desacoplamento com forte tipagem ! Modelo de eventos ! Integração com Interceptors ! API extensível para implementação customizada
Globalcode – Open4education
Referências
! JSRs ! http://jcp.org/en/jsr/summary?id=299 ! http://jcp.org/en/jsr/summary?id=330
! Implementações ! http://seamframework.org/Weld ! http://openwebbeans.apache.org/ ! http://www.caucho.com/projects/candi/
! Tutoriais ! http://docs.jboss.org/weld/reference/1.0.1-Final/en-US/html/ ! http://download.oracle.com/javaee/6/tutorial/doc/giwhb.html ! http://www.theserverside.com/news/1373391/Dependency-
Injection-in-Java-EE-6-Part-1