TDC2010 - Turbinando sua Aplicação com CDI

36
Turbinando sua Aplicação com CDI Rodrigo Cândido da Silva Instrutor VOffice / Globalcode

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

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

Objetivo do CDI

Globalcode  –  Open4education

CDI no Java EE 6

Globalcode  –  Open4education

CDI (JSR-299)

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

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

Configuração CDI

Globalcode  –  Open4education

Hello World

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

Injection Points

Globalcode  –  Open4education

Qualifiers

Globalcode  –  Open4education

Alternatives

Globalcode  –  Open4education

EL Names

Globalcode  –  Open4education

Producer Methods

Globalcode  –  Open4education

Java EE Resources

Globalcode  –  Open4education

Java EE Resources

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

Scopes and Contexts

Globalcode  –  Open4education

Conversation Scoped

Globalcode  –  Open4education

Interceptors

Globalcode  –  Open4education

Stereotypes

Globalcode  –  Open4education

Events

Globalcode  –  Open4education

Demo

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

Globalcode  –  Open4education

Perguntas e Respostas

?