Mundo novo com
                       CDI
                Um ensaio sobre as mudanças encorajadas pelo
                               CDI + Seam 3




Monday, May 16, 2011
Quem sou eu ?
           •      Analista no PD da Softplan

           •      Seam 3 Contributor

           •      Hobbyist game programmer

           •      Espião da CIA




Monday, May 16, 2011
Agenda




Monday, May 16, 2011
Agenda
           •      Contextualização




Monday, May 16, 2011
Agenda
           •      Contextualização

           •      Uma rápida introdução ao CDI




Monday, May 16, 2011
Agenda
           •      Contextualização

           •      Uma rápida introdução ao CDI

           •      Uma rapidíssima introdução ao Seam 3




Monday, May 16, 2011
Agenda
           •      Contextualização

           •      Uma rápida introdução ao CDI

           •      Uma rapidíssima introdução ao Seam 3

           •      simplicidade com CDI




Monday, May 16, 2011
Contextualização




Monday, May 16, 2011
Aplicações Web na história




Monday, May 16, 2011
Ascensão do Java

           •      CGI

           •      Servlet

           •      Servlet + JSP

           •      Templating, tag libraries

           •      A era dos frameworks




Monday, May 16, 2011
Struts, Hibernate, Spring

           •      Praticamente impossível desenvolver uma aplicação
                  em J2EE puro

           •      Frameworks diferentes para abstrair necessidades
                  das aplicações

                 •     Abstração de dados

                 •     Inversão de Controle

                 •     Controle de fluxo



Monday, May 16, 2011
JEE 5

           •      JPA

           •      EJB3

           •      JSF1.2

           •      Annotations

           •      ...




Monday, May 16, 2011
Seam



              •        A cola necessária para juntar
                       JSF e EJB

              •        Contextos e Injeção de dependência




Monday, May 16, 2011
A verdadeira história
           •      Um king cansado de lazyInitializationExceptions




Monday, May 16, 2011
Quem nunca viu bizarrices assim?


          •     getCustomerWithAddress()

          •     getCustomerWithFoo()

          •     getCustomerWithFooAndBar()




Monday, May 16, 2011
JEE6

           • CDI
           • JSF2
           • JPA2
           • EJB3.1
           • ...


Monday, May 16, 2011
Principais objetivos do CDI

           •      Cola Standard entre JSF e EJB

           •      Beans injetáveis e com ciclo
                  de vida gerenciado

           •      Baixo acoplamento

           •      TypeSafe

           •      AOP e Eventos




Monday, May 16, 2011
“CDI simplifies and
                  sanitizes the API for DI
                         and AOP”


Monday, May 16, 2011
“CDI simplifies and
                  sanitizes the API for DI
                         and AOP”
                                 Rick Hightower




Monday, May 16, 2011
“CDI é foda!”



Monday, May 16, 2011
“CDI é foda!”
                                  eu




Monday, May 16, 2011
“Designing with CDI is a road to be
                       discovered, specially when we consider
                             the event handling feature”




Monday, May 16, 2011
“Designing with CDI is a road to be
                       discovered, specially when we consider
                             the event handling feature”
                                                eu também




Monday, May 16, 2011
E o seam?
                          como ficou nessa história?




Monday, May 16, 2011
Seam’s mission is to provide a fully-
                  integrated development platform for
                building rich, standards-based internet
                 applications tailored for traditional and
                            cloud development




Monday, May 16, 2011
Chegamos aonde eu
                            queria


Monday, May 16, 2011
Monday, May 16, 2011
abordagens mais
                         pragmáticas


Monday, May 16, 2011
ECB Pattern
                       • Entity - Control - Boundary



                           EJB       CDI Bean      JPA



Monday, May 16, 2011
CEC Pattern
                 • CDI - EJB - CDI



                            EJB      CDI Bean   JPA



Monday, May 16, 2011
CEC Pattern
                 • CDI - EJB - CDI



                            EJB      CDI Bean   JPA



Monday, May 16, 2011
CEC Pattern
                 • CDI - EJB - CDI



             CDI bean       EJB      CDI Bean   JPA



Monday, May 16, 2011
CEC Pattern
                 • CDI - EJB - CDI

               Presenter



             CDI bean       EJB      CDI Bean   JPA



Monday, May 16, 2011
Simplicidade



Monday, May 16, 2011
Objetivos

                   • Arquitetura limpa
                   • Menos código, menos bugs
                   • Maior produtividade
                   • Mais facilidades com testes

Monday, May 16, 2011
arquitetura comum
Monday, May 16, 2011
javaee 5
Monday, May 16, 2011
javaee 6
Monday, May 16, 2011
Calma!
Monday, May 16, 2011
Monday, May 16, 2011
Monday, May 16, 2011
E para as actions?
Monday, May 16, 2011
Problemas:

                   • Mensagens para a interface
                   • Controle de fluxo



Monday, May 16, 2011
Mensagens para UI
                  • O uso de MessagesAPI do Seam




Monday, May 16, 2011
Controle de fluxo
          • Caso Típico de sucesso e erro
           • A validação pode ser feita antes de
                       chegar no serviço (Bean Validations)
                • Em caso de exceções elas podem ser
                       capturadas desacopladamente e fazer
                       redirecionamentos. (Seam Catch )



Monday, May 16, 2011
JSF Navigation Rules




Monday, May 16, 2011
xml??




Monday, May 16, 2011
controlador: Faces Servlet




                               JSF2 complete Reference, pagina 12

              • JSF Complete
Monday, May 16, 2011
Monday, May 16, 2011
e lógica de apresentação?



Monday, May 16, 2011
Model View Presenter




Monday, May 16, 2011
Cuidado!



           •      Analise sempre seu caso

           •      Simplifique sempre que possível.




Monday, May 16, 2011
Referências

                   • http://seamframework.org/
                   • http://www.jcp.org/en/jsr/detail?id=299
                   • http://www.adam-bien.com/


Monday, May 16, 2011
Obrigado!
            •     Contato:
                  José Rodolfo Freitas
                  joserodolfo.freitas@gmail.com

            •     Apoio:
                  Softplan/Poligraph
                  http://talentos.softplan.com.br

            •     Follow on Twitter:
                  @joserodolfo_f

            •     Blog
                  techblog.joserodolfo.com


Monday, May 16, 2011

Mundo novo com cdi

  • 1.
    Mundo novo com CDI Um ensaio sobre as mudanças encorajadas pelo CDI + Seam 3 Monday, May 16, 2011
  • 2.
    Quem sou eu? • Analista no PD da Softplan • Seam 3 Contributor • Hobbyist game programmer • Espião da CIA Monday, May 16, 2011
  • 3.
  • 4.
    Agenda • Contextualização Monday, May 16, 2011
  • 5.
    Agenda • Contextualização • Uma rápida introdução ao CDI Monday, May 16, 2011
  • 6.
    Agenda • Contextualização • Uma rápida introdução ao CDI • Uma rapidíssima introdução ao Seam 3 Monday, May 16, 2011
  • 7.
    Agenda • Contextualização • Uma rápida introdução ao CDI • Uma rapidíssima introdução ao Seam 3 • simplicidade com CDI Monday, May 16, 2011
  • 8.
  • 9.
    Aplicações Web nahistória Monday, May 16, 2011
  • 10.
    Ascensão do Java • CGI • Servlet • Servlet + JSP • Templating, tag libraries • A era dos frameworks Monday, May 16, 2011
  • 11.
    Struts, Hibernate, Spring • Praticamente impossível desenvolver uma aplicação em J2EE puro • Frameworks diferentes para abstrair necessidades das aplicações • Abstração de dados • Inversão de Controle • Controle de fluxo Monday, May 16, 2011
  • 12.
    JEE 5 • JPA • EJB3 • JSF1.2 • Annotations • ... Monday, May 16, 2011
  • 13.
    Seam • A cola necessária para juntar JSF e EJB • Contextos e Injeção de dependência Monday, May 16, 2011
  • 14.
    A verdadeira história • Um king cansado de lazyInitializationExceptions Monday, May 16, 2011
  • 15.
    Quem nunca viubizarrices assim? • getCustomerWithAddress() • getCustomerWithFoo() • getCustomerWithFooAndBar() Monday, May 16, 2011
  • 16.
    JEE6 • CDI • JSF2 • JPA2 • EJB3.1 • ... Monday, May 16, 2011
  • 17.
    Principais objetivos doCDI • Cola Standard entre JSF e EJB • Beans injetáveis e com ciclo de vida gerenciado • Baixo acoplamento • TypeSafe • AOP e Eventos Monday, May 16, 2011
  • 18.
    “CDI simplifies and sanitizes the API for DI and AOP” Monday, May 16, 2011
  • 19.
    “CDI simplifies and sanitizes the API for DI and AOP” Rick Hightower Monday, May 16, 2011
  • 20.
  • 21.
    “CDI é foda!” eu Monday, May 16, 2011
  • 22.
    “Designing with CDIis a road to be discovered, specially when we consider the event handling feature” Monday, May 16, 2011
  • 23.
    “Designing with CDIis a road to be discovered, specially when we consider the event handling feature” eu também Monday, May 16, 2011
  • 24.
    E o seam? como ficou nessa história? Monday, May 16, 2011
  • 25.
    Seam’s mission isto provide a fully- integrated development platform for building rich, standards-based internet applications tailored for traditional and cloud development Monday, May 16, 2011
  • 26.
    Chegamos aonde eu queria Monday, May 16, 2011
  • 27.
  • 28.
    abordagens mais pragmáticas Monday, May 16, 2011
  • 29.
    ECB Pattern • Entity - Control - Boundary EJB CDI Bean JPA Monday, May 16, 2011
  • 30.
    CEC Pattern • CDI - EJB - CDI EJB CDI Bean JPA Monday, May 16, 2011
  • 31.
    CEC Pattern • CDI - EJB - CDI EJB CDI Bean JPA Monday, May 16, 2011
  • 32.
    CEC Pattern • CDI - EJB - CDI CDI bean EJB CDI Bean JPA Monday, May 16, 2011
  • 33.
    CEC Pattern • CDI - EJB - CDI Presenter CDI bean EJB CDI Bean JPA Monday, May 16, 2011
  • 34.
  • 35.
    Objetivos • Arquitetura limpa • Menos código, menos bugs • Maior produtividade • Mais facilidades com testes Monday, May 16, 2011
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
    E para asactions? Monday, May 16, 2011
  • 43.
    Problemas: • Mensagens para a interface • Controle de fluxo Monday, May 16, 2011
  • 44.
    Mensagens para UI • O uso de MessagesAPI do Seam Monday, May 16, 2011
  • 45.
    Controle de fluxo • Caso Típico de sucesso e erro • A validação pode ser feita antes de chegar no serviço (Bean Validations) • Em caso de exceções elas podem ser capturadas desacopladamente e fazer redirecionamentos. (Seam Catch ) Monday, May 16, 2011
  • 46.
  • 47.
  • 48.
    controlador: Faces Servlet JSF2 complete Reference, pagina 12 • JSF Complete Monday, May 16, 2011
  • 49.
  • 50.
    e lógica deapresentação? Monday, May 16, 2011
  • 51.
  • 52.
    Cuidado! • Analise sempre seu caso • Simplifique sempre que possível. Monday, May 16, 2011
  • 53.
    Referências • http://seamframework.org/ • http://www.jcp.org/en/jsr/detail?id=299 • http://www.adam-bien.com/ Monday, May 16, 2011
  • 54.
    Obrigado! • Contato: José Rodolfo Freitas joserodolfo.freitas@gmail.com • Apoio: Softplan/Poligraph http://talentos.softplan.com.br • Follow on Twitter: @joserodolfo_f • Blog techblog.joserodolfo.com Monday, May 16, 2011