SlideShare une entreprise Scribd logo
1  sur  159
Télécharger pour lire hors ligne
Lato Sensu em
                                       Sistemas Orientados a Objetos




                               Módulo 3
                          Web JEE Design Patterns




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                          Desenvolvimento de Aplicaões Web Avançado - 2°/2009




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                       Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                                Agenda

               • Remote Proxy                    • Service Facade
               • Front Controller                • Service Locator
               • Intercepting Filter             • Business Delegate
               • View Helper                     • Service-to-Worker
               • Transfer Object                 • Dispatcher-to-View
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                       Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                             Padrões JEE

            • Os padrões JEE foram baseados na experiência
                   de anos de trabalho com a arquitetura JEE.
            • Padrão de Projeto X Padrão de Arquitetura.
            • Evoluem à medida que surgem mudanças na
                   especificação e nas tecnologias relacionadas.



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                           Padrões JEE
 Apresentação             Negócio                           Integração

   Interception Filter     Session Façade                    Data Access Object
   Front Controller        Business Delegate                 Service Activator
   View Helper             Data Transfer Object
   Composite View          Data Transfer Object Assembler
   Service to Worker       Composite Entity
   Dispatcher View         Service Locator
                           Fast Lane Reader
                           Value List Handler




                          http://www.corej2eepatterns.com
Monday, August 17, 2009
Monday, August 17, 2009
http://java.sun.com/blueprints/patterns/catalog.html
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                                 Desenvolvimento de Aplicaões Web Avançado - 2°/2009



                                 Estrutura de apresentação
                                     de um padrão JEE

                    •     Nome
                    •     Contexto
                    •     Problema
                    •     Motivação
                    •     Solução
                          -   Estrutura

                          -   Estratégias

                    •     Conseqüências
                    •     Código Exemplo
                    •     Padrões Relacionados

Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                              Desenvolvimento de Aplicaões Web Avançado - 2°/2009



                             Padrões de projeto JEE
                                         Benefícios


       • Aperfeiçoar o projeto de um sistema:
             -       Reuso interno, evitam a 'reinvenção da roda'.

             -       Facilidade de manutenção

             -       Facilidade de evolução

       • Estabelecer um vocabulário comum.
       • Cria fronteiras, definindo um escopo para a solução
               de um problema.
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




           Como usar um padrão de projeto?

                    • Leia o padrão de projeto inteiro para ter
                          uma visão geral.
                    • Certifique-se que entendeu bem a estrutura
                          do padrão.
                    • Veja como implementar o padrão no Código
                          de Exemplo.
                    • Escolha nomes para os participantes de
                          acordo com o contexto da aplicação.

Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                                Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                Como não usar um padrão de projeto

                    •     Se existe uma maneira trivial para resolver um
                          problema e um padrão de projeto, prefira a
                          simplicidade.


                    •     Só use um padrão de projeto quando necessário
                          -   deve haver ganhos claros com o uso do padrão



                    •     Padrões de projeto indevidamente aplicados aumentam
                          a complexidade do software sem necessidade.


Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                               Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Remote Proxy



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                 Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                              Contexto


                          A                                        B

Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema
                                              comunicação
                                               não trivial




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema
                                                            comunicação
                                                              remota




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema


                                                                     objeto ainda
                                                                      não existe




                                                                ?
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                  Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                           Solução



           A               B’                                                  B
                          Proxy



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                  Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                             Solução


                          Proxy




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                              Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema


                            Proxy




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                              Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema


                            Proxy


                                                      ?
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                              Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema


                            Stub




                                                                               ?
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                  Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                            Solução




                          Proxy

Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                              Desenvolvimento de Aplicaões Web Avançado - 2°/2009



                            Proxy
                            Sinônimos




                          Surrogate


Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                                  Desenvolvimento de Aplicaões Web Avançado - 2°/2009



                                               Proxy
                                                Motivação


                    •     O Proxy é:
                          -   Uma pessoa autorizada a atuar no lugar de outra pessoa
                              (procurador).

                    •     Existem situações onde o cliente não quer ou não
                          pode referenciar a um objeto diretamente, mas
                          mesmo assim quer iteragir com o mesmo.
                    •     O proxy tem a mesma interface que o objeto alvo.
                    •     O proxy delega as requisições (Delegação).



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009



                                         Proxy
                                         Aplicabilidade




                    • O padrão Proxy é aplicável sempre que há
                          necessidade de uma referência mais
                          versátil, ou sofisticada, do que um simples
                          apontador para um objeto.




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Proxy
                          Estrutura




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                           Desenvolvimento de Aplicaões Web Avançado - 2°/2009



                                        Proxy
                                       Conseqüências




                    • Oculta o fato de que um objeto reside num
                          espaço de endereçamento diferente.


                    • Provê tarefas adicionais de organização
                          quando um objeto é acessado.



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                     Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                                  Proxy
                               Código de Exemplo



                          public interface Subject {
                             public Object operation();
                          }




 public class RealSubject implements Subject {

            public Object operation()‫{ ‏‬
               return new Object();
            }
 }
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                                         Proxy
                                       Código de Exemplo


                          public class Proxy implements Subject {

                              private RealSubject real;

                              public Object operation()‫{‏‬
                                 makeSomething();
                                 return real.operation();
                              }

                              private void makeSomething()‫{ ‏‬

                              }
                          }
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009



                                        Proxy
                                       Usos Conhecidos




                    • Objetos Distribuídos – RMI e EJB.

                    • Image Proxy – Guardar o lugar da imagem
                          sendo carregada.




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009



                                         Proxy
                                Padrões de Projeto Relacionados




                    • Adapter

                    • Decorator


Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                 Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Front Controller



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Contexto




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Contexto




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema




Monday, August 17, 2009
                          ?
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Solução




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                                      Solução
                                      Front Controller


                       log, segurança,
                   roteamento, exceções




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                      Desenvolvimento de Aplicaões Web Avançado - 2°/2009



                           Front Controller
                                  consequências




                    • Controle centralizado
                    • Melhora gerência sobre a segurança
                    • Aumenta o potencial de reutilização

Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                  Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Front Controller
                                estrutura




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                        Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Front Controller


                    • Participantes e Responsabilidades



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                                    Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                               Front Controller
                    • Padrões Relacionados
                          -   View Helper


                          -   Intercepting Filter


                          -   Dispatcher View e Service to Worker



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                  Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Intercepting Filter



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Contexto




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                 Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Solução
                          Intercepting Filter




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                   Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                            Solução
                            Intercepting Filter
          log, segurança,
         compatibilidade




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                               Desenvolvimento de Aplicaões Web Avançado - 2°/2009




 ???????????????????????


                          ==                    ==



 ???????????????????????
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                          Desenvolvimento de Aplicaões Web Avançado - 2°/2009




              Pré e pós-processamento




Monday, August 17, 2009
Monday, August 17, 2009
Monday, August 17, 2009
?
Monday, August 17, 2009
Monday, August 17, 2009
intercepting
            filter


                          intercepting
                              filter
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                 Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Encadeamento
                             filter chaining




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                   Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Intercepting Filter
                                 Estrutura




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                         Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Intercepting Filter
                           Participantes e Responsabilidades




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                  Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Intercepting Filter


             Parte integrante da especificacão
                     desde Servlets 2.3



Monday, August 17, 2009
public final class SimpleFilter implements Filter {
   private FilterConfig filterConfig = null;

     public void doFilter(ServletRequest req, ServletResponse res, FilterChain ch)
                 throws IOException, ServletException {

           if (filterConfig == null)‫‏‬
              throw new ServletException("FilterConfig not set before first request");
           filterConfig.getServletContext().log("in SimpleFilter");
           Object curVal = request.getAttribute("MsgOut");
           if (curVal == null)‫‏‬
              request.setAttribute("MsgOut", new String("SimpleFilter"));
           else
              request.setAttribute("MsgOut", (String) curVal + " :SimpleFilter");
           chain.doFilter(request, response);
           filterConfig.getServletContext().log("Getting out of SimpleFilter");
     }

     public void destroy(){
        filterConfig = null;
     }

     public void init(FilterConfig filterConfig){
        this.filterConfig = filterConfig;
     }
}



Monday, August 17, 2009
<filter>
    <filter-name>Simple Filter</filter-name>
    <filter-class>capitulo12.SimpleFilter</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>Simple Filter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <filter>
    <filter-name>Simple Filter 2</filter-name>
    <filter-class>capitulo12.SimpleFilter2</filter-class>
  </filter>

  <filter>
    <filter-name>Audit Filter</filter-name>
    <filter-class>capitulo12.AuditFilter</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>Simple Filter 2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <filter-mapping>
    <filter-name>Audit Filter</filter-name>
    <servlet-name>MyServlet</servlet-name>
  </filter-mapping>
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                                    Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                              Intercepting Filter
                    •     Conseqüências
                          -   Centraliza o controle com baixo acoplamento.


                          -   Aumenta o potencial de reuso.


                          -   Configuração declarativa e flexível.


                          -   Compartilhamento de informações entre filtros pode ser
                              ineficiente.



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                                 Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                              Intercepting Filter
                    • Padrões Relacionados
                          -   Pipes and Filter [POSA]


                          -   Front Controller


                          -   Decorator [GoF]



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                              Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          View Helper



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Contexto




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Contexto




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                              Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema

 //         conecte-se ao banco de dados via JDBC
 //         recupere do banco o nome do usuário logado
 //         recupere do banco a data do último acesso
 //         desenhe uma tabela linda na tela
 //         apresente os dados nesta tabela
                                                                          index.jsp




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema



 //       conecte-se ao banco de dados via JDBC
 //       recupere do banco o nome do usuário logado
 //       recupere do banco a data do último acesso
 //       desenhe uma tabela linda na tela
 //       apresente os dados nesta tabela
                                                         index.jsp

Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema



 //       conecte-se ao banco de dados via JDBC
 //       recupere do banco o nome do usuário logado
 //       recupere do banco a data do último acesso
 //       desenhe uma tabela linda na tela
 //       apresente os dados nesta tabela
                                                         index.jsp

Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema




Monday, August 17, 2009
                          + +                                           index.jsp
Lato Sensu em Sistemas Orientados a Objetos
                                                     Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                                    View Helper
     • Problema
           -      Mudanças na camada de apresentação ocorrem com
                  freqüência e são difíceis de serem implementadas e
                  mantidas.

           -      O problema ocorre quando a lógica de acesso a dados e a
                  lógica de apresentação estão acopladas:
                   Menor flexibilidade

                   Dificuldade de reuso

                   Reduz a modularidade

                   Web Designers X Desenvolvedores
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                                         Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                                      View Helper
                    • Motivação
                          -   Inserir lógica de negócio na 'visão' viabiliza
                              reaproveitamento de código por meio de uma
                              abordagem 'copy-paste'.
                              Surgem problemas de manutenção.

                              Código duplicado gera bugs.




                          -   É importante separar o papel do desenvolvedor
                              de software e do Web Designer.
                              Melhora a qualidade e a produtividade.

Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Solução




          index.jsp
Monday, August 17, 2009
                          + +            JavaBean, CustomTag, Servlet
Lato Sensu em Sistemas Orientados a Objetos
                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Solução

                            View Helper


          index.jsp
Monday, August 17, 2009
                          + +            JavaBean, CustomTag, Servlet
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Solução

                             View Helper


          index.jsp
Monday, August 17, 2009
                          + +
                           JavaBean, CustomTag, Servlet
Lato Sensu em Sistemas Orientados a Objetos
                                           Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                               View Helper

       • Solução
             -      A visão mantém apenas código de formatação, delegando
                    responsabilidades de processamento para helper classes,
                    implementadas como JavaBeans ou tags customizadas.

             -      Os helpers armazenam uma visão intermediária dos dados
                    e servem como classes/componentes adaptadores.

             -      Um sinal → excesso de scriptlets em uma página JSP.

Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                 View                  Controller                          Model


                                       +           +                        +
  index.jsp               ViewHelper


Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                               Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          View Helper
                             Estrutura




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                        Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                            View Helper
                          Participantes e Responsabilidades




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                                Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                                    View Helper
                    • Conseqüências
                          -   Facilita a manutenção


                          -   Aumenta o potencial de reuso


                          -   Promove a separação de papéis



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                                  Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                                   View Helper
                    • Padrões Relacionados
                          -   Business Delegate


                          -   Front Controller


                          -   Dispatcher View e Service to Worker



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                  Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Transfer Object
                          Data Transfer Object
                              Value Object




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Contexto




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema



                          ?
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Solução




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Solução




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Solução

            !

Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                              Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Solução


                          !
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Solução

                            !

Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Solução


                                                   !
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Solução


                                                                      !

Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Solução




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Solução




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Solução




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Solução




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Solução




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Solução




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                 Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Transfer Object
                               Estrutura




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                        Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Transfer Object
                          Participantes e Responsabilidades




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                                   Desenvolvimento de Aplicaões Web Avançado - 2°/2009



                                     Transfer Object
                                               Conseqüências


                    •     Benefícios
                          -   Simplifica o componente de negócio e a interface remota.

                          -   Transfere mais dados em menos chamadas remotas.

                          -   Reduz o trafego na rede.

                          -   Reduz a duplicação do código.

                    •     Cuidados
                          -   Introdução de objetos obsoletos.

                          -   Acesso a transações concorrentes


Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                                   Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                                Transfer Object
                    • Padrões Relacionados
                          -   Session Facade

                          -   Transfer Object Assembler

                          -   Value List Handler

                          -   Composite Entity




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Service Facade



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Contexto




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                                Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                                 Session Facade
                    • Problema
                          -   Forte acoplamento, que leva a uma dependência
                              direta entre clientes e objetos de negócio.

                          -   Grande quantidade de invocações de métodos
                              remotos entre cliente e servidor, levando a
                              problemas de desempenho da rede.

                          -   Ausência de uma estratégia uniforme de acesso
                              para o cliente, expondo objetos de negócio à
                              possibilidade de serem usados de forma incorreta.


Monday, August 17, 2009
Monday, August 17, 2009
Solução
                          Session Facade




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009



                          Solução
                          Session Facade




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                                    Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                                  Session Facade
                    •     Solução
                          -   Utilizar um Session Bean como 'fachada' para encapsular a
                              complexidade das interações entre os objetos de negócio
                              que participam de um serviço.


                          -   Um Session Facade gerencia os objetos de negócio e provê
                              um serviço uniforme e de alta granularidade aos clientes.


                          -   Quando usado com o Business Delegate, geralmente há um
                              relacionamento One-to-One entre eles.



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                  Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                           Session Facade


                    • Estrutura



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                        Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                           Session Facade


                    • Participantes e Responsabilidades



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                                  Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                                 Session Facade

                    • Padrões Relacionados
                          -   Facade [GoF]

                          -   Service Locator

                          -   Business Delegate




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Service Locator



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Contexto




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema


                          JNDI



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                   Desenvolvimento de Aplicaões Web Avançado - 2°/2009



                              Problema
                                   JNDI
   try {

            InitialContext ctx = new InitialContext();
            Object objref = ctx.lookup(“MeuEJB”);
            Object obj = PortableRemoteObject.narrow(objref,
                                                     MeuEJB.class);
            EJBHome ejb = (EJBHome)obj;
             ejb.servico()

   } catch (NamingException ne) {
      System.err.println(se);
   } catch (ServiceLocatorException se) {
      System.err.println(se);
   } catch (Exception e) {
      System.err.println(se);
   }
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                          Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                               Problema
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos

                          Solução
                               Desenvolvimento de Aplicaões Web Avançado - 2°/2009



                          auxílio à lista




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                               Desenvolvimento de Aplicaões Web Avançado - 2°/2009



                           Solução
                          Service Locator




                             102




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                                        Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                               Service Locator
      • Solução
            -      O Service Locator centraliza todo o acesso ao servidor
                   JNDI, facilitando:
                   Localização de objetos EJBHome.

                   Localização de serviços como conexões de bancos de dados ou conexões de
                   servidores de messaging.

                   Localização de canais e filas JMS

                   Obtenção de variáveis configuradas.


            -      Service Locator pode melhorar a performance da pesquisa
                   oferecendo um cache para as pesquisas mais frequentes.
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                 Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Service Locator
                               Estrutura




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                        Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Service Locator
                          Participantes e Responsabilidades




Monday, August 17, 2009
// imports
 public class ServiceLocator {                     Service Locator
        private InitialContext initialContext;
        private Map cache;
                                                            código de exemplo
        private static ServiceLocator _instance;

        static {
            try {
                 _instance = new ServiceLocator();
            } catch (ServiceLocatorException se) {
                 System.err.println(se);
            }
        }

        private ServiceLocator() throws ServiceLocatorException {
            try {
                initialContext = new InitialContext();
                cache = Collections.synchronizedMap(new HashMap());
            } catch (NamingException ne) {
                throw new ServiceLocatorException(ne);
            } catch (Exception e) {
                throw new ServiceLocatorException(e);
            }
        }

        static public ServiceLocator getInstance() {
            return _instance;
        }

        // implement lookup methods here
        . . .
 }
Monday, August 17, 2009
Service Locator
                                  código de exemplo

  public EJBLocalHome getLocalHome(String jndiHomeName) throws ServiceLocatorException
  {
     EJBLocalHome localHome = null;
     try
     {
         if (cache.containsKey(jndiHomeName))‫‏‬
         {
            localHome = (EJBLocalHome)cache.get(jndiHomeName);
         }
         else
         {
            localHome = (EJBLocalHome)initialContext.lookup(jndiHomeName);
            cache.put(jndiHomeName, localHome);
         }
     }
     catch(NamingException nex)‫‏‬
     {
         throw new ServiceLocatorException(nex);
     }
     catch (Exception ex)‫‏‬
     {
         throw new ServiceLocatorException(ex);
     }
     return localHome;
  }
Monday, August 17, 2009
// lookup a remote home given the JNDI name for the remote home
  public EJBHome getRemoteHome(String jndiHomeName, Class homeClassName)
                                                        throws ServiceLocatorException
  {

        EJBHome remoteHome = null;
        try
        {
            if (cache.containsKey(jndiHomeName))‫‏‬
            {
               remoteHome = (EJBHome) cache.get(jndiHomeName);
            }
            else
            {
               Object objref = initialContext.lookup(jndiHomeName);
               Object obj = PortableRemoteObject.narrow(objref, homeClassName);
               remoteHome = (EJBHome)obj;
               cache.put(jndiHomeName, remoteHome);
            }
        }
        catch (NamingException nex)‫‏‬
        {
            throw new ServiceLocatorException(nex);
        }
        catch (Exception ex)‫‏‬
        {
            throw new ServiceLocatorException(ex);
        }
        return remoteHome;
  }

Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                                  Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                                Service Locator

                    • Padrões Relacionados
                          -   Business Delegate

                          -   Session Facade

                          -   Transfer Object Assembler

                          -   Data Access Object



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                 Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Business Delegate



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Contexto




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema


                          JNDI



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema


                          JNDI


                                     EJB
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema


                          JNDI


                          RMI           EJB
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                    Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                                 Problema
                                                            EJB

                          JNDI

                                                                 RMI




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                               Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                            Problema


                      EJB                                           EJB
                     JNDI                                          JNDI
                      RMI                                           RMI




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                               Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                            Problema


                      EJB                                           EJB
                     JNDI                                          JNDI
                      RMI                                           RMI




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                 Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                              Problema



                          !                                WebService!




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Problema


                                                       WebService!




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Solução


                             EJB                                 EJB
                            JNDI                                JNDI
                             RMI                                 RMI




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                    Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                                 Problema
                                                            EJB

                          JNDI

                                                                 RMI




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                            Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Business Delegate
      • Problema
            -       A disponibilização direta de uma API de negócio força o
                    cliente a tratar características específicas de natureza
                    distribuída da tecnologia EJB.

            -       Pode haver um impacto em desempenho se a camada de
                    apresentação realizar um grande número de invocações
                    remotas.

            -       Os componentes da camada de apresentação ficam
                    vulneráveis a mudanças na implementação de componentes
                    de negócio.
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                        Desenvolvimento de Aplicaões Web Avançado - 2°/2009



                                    Solução
                                  Business Delegate




                            EJB                     JNDI
                           RMI
                          JNDI


                                                      RMI             EJB


Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                             Desenvolvimento de Aplicaões Web Avançado - 2°/2009



                                      Mais comum
                              Business Delegate + Session Facade




                          Busines
                                  s               Session
                          Delegat
                                  e               Facade




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                               Desenvolvimento de Aplicaões Web Avançado - 2°/2009



                               Business Delegate
                                             Benefícios


       •       O padrão esconde os detalhes do componente de negócio
             -       Serviços de nomes e lookup.

             -       Tratamento de exceções remotas, JMS etc.

             -       Pode tratar exceções de sistema e gerar exceções de aplicação.

             -       Pode realizar operações novas tentativas de conexão em caso de
                     falha.

       •       Mecanismo de Cache
       •       Pode ser usado para reduzir o acoplamento entre outras
               camadas.
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                 Desenvolvimento de Aplicaões Web Avançado - 2°/2009



                          Business Delegate
                               Estrutura




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                         Desenvolvimento de Aplicaões Web Avançado - 2°/2009



                          Business Delegate
                           Participantes e Responsabilidades




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                                 Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                             Business Delegate

          • Conseqüências
                -         Reduz o acoplamento.

                -         Traduz exceções de sistema em exceções de aplicação.

                -         Pode prover melhor desempenho.

                -         Esconde a natureza remota da aplicação ao cliente.

                -         Introduz uma nova camada para a aplicação.


Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                                Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                              Business Delegate

                    • Padrões Relacionados
                          -   Service Locator

                          -   Proxy [GoF]

                          -   Adapter [GoF]




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                 Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Service to Worker



Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                          Desenvolvimento de Aplicaões Web Avançado - 2°/2009




       Front Controller +
             Dispatcher +
            View Helper
      Service to Worker
Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                  Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Service to Worker
                                Estrutura




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                         Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Service to Worker
                           Participantes e Responsabilidades




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                          Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                          Service to Worker

      • Conseqüências
            -      Centraliza o controle com baixo acoplamento.

            -      Aumenta o potencial de reuso.

            -      Melhora a separação de papéis no projeto.




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                                Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                              Service to Worker

                    • Padrões Relacionados
                          -   Front Controller e View Helper

                          -   Dispatcher View




Monday, August 17, 2009
Lato Sensu em Sistemas Orientados a Objetos
                                                Desenvolvimento de Aplicaões Web Avançado - 2°/2009




                                      Revisão
   •       Remote Proxy                                 •    Session Facade

         -       Procurador                                 -    Despachante

   •       Front Controller                             •    Service Locator

         -       Porteiro Zé                                -    102


   •       Intercepting Filter                          •    Business Delegate

         -       Motores de Combustão Interna               -    Proxy do Session Facade
                                                                  Procurador da Secretária

   •       View Helper
                                                        •    Service-to-Worker
         -       Ajudante
                                                            -    Roteador Inteligente
   •       Transfer Object
                                                        •    Dispatcher-to-View
         -       Sacola da Feira
                                                            -    Roteador Burro
Monday, August 17, 2009
Lato Sensu em
                                     Sistemas Orientados a Objetos




                  Q&A     MSc. Alexandre Gomes
                          alegomes@gmail.com
Monday, August 17, 2009

Contenu connexe

En vedette

Criando aplicacoes-web-java-netberans
Criando aplicacoes-web-java-netberansCriando aplicacoes-web-java-netberans
Criando aplicacoes-web-java-netberansMony Pinheiro
 
Criação de Sites - David Arty - SENAC
Criação de Sites - David Arty - SENACCriação de Sites - David Arty - SENAC
Criação de Sites - David Arty - SENACDavid Arty
 
Introdução a Wordpress - David Arty - SENAC
Introdução a Wordpress - David Arty - SENACIntrodução a Wordpress - David Arty - SENAC
Introdução a Wordpress - David Arty - SENACDavid Arty
 
K19 k03-sql-e-modelo-relacional
K19 k03-sql-e-modelo-relacionalK19 k03-sql-e-modelo-relacional
K19 k03-sql-e-modelo-relacionalJean Lopes
 
K19 k12-desenvolvimento-web-com-jsf2-e-jpa2
K19 k12-desenvolvimento-web-com-jsf2-e-jpa2K19 k12-desenvolvimento-web-com-jsf2-e-jpa2
K19 k12-desenvolvimento-web-com-jsf2-e-jpa2surdido
 
Sintaxe Ling Java Pilares Oo 4
Sintaxe Ling Java Pilares Oo 4Sintaxe Ling Java Pilares Oo 4
Sintaxe Ling Java Pilares Oo 4Felipe Valcanaia
 
Desenvolvimento Web 03 - David Arty - SENAC
Desenvolvimento Web 03 - David Arty - SENACDesenvolvimento Web 03 - David Arty - SENAC
Desenvolvimento Web 03 - David Arty - SENACDavid Arty
 
Desenvolvimento Web 02 - David Arty - SENAC
Desenvolvimento Web 02 - David Arty - SENACDesenvolvimento Web 02 - David Arty - SENAC
Desenvolvimento Web 02 - David Arty - SENACDavid Arty
 
Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)jose-junior89
 
Java - Visão geral e Exercícios
Java - Visão geral e ExercíciosJava - Visão geral e Exercícios
Java - Visão geral e ExercíciosArthur Emanuel
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsIgo Coelho
 
Aula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de ProjetoAula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de ProjetoVinícius de Paula
 
3.2 introdução a linguagem java
3.2 introdução a linguagem java3.2 introdução a linguagem java
3.2 introdução a linguagem javaPAULO Moreira
 
Banco de Dados II Aula 10 - Linguagem de Consulta SQL (SQL Avançada)
Banco de Dados II Aula 10 - Linguagem de Consulta SQL (SQL Avançada)Banco de Dados II Aula 10 - Linguagem de Consulta SQL (SQL Avançada)
Banco de Dados II Aula 10 - Linguagem de Consulta SQL (SQL Avançada)Leinylson Fontinele
 

En vedette (19)

World Wide Fund
World Wide FundWorld Wide Fund
World Wide Fund
 
Dia do abraço
Dia do abraçoDia do abraço
Dia do abraço
 
Criando aplicacoes-web-java-netberans
Criando aplicacoes-web-java-netberansCriando aplicacoes-web-java-netberans
Criando aplicacoes-web-java-netberans
 
Criação de Sites - David Arty - SENAC
Criação de Sites - David Arty - SENACCriação de Sites - David Arty - SENAC
Criação de Sites - David Arty - SENAC
 
Introdução a Wordpress - David Arty - SENAC
Introdução a Wordpress - David Arty - SENACIntrodução a Wordpress - David Arty - SENAC
Introdução a Wordpress - David Arty - SENAC
 
K19 k03-sql-e-modelo-relacional
K19 k03-sql-e-modelo-relacionalK19 k03-sql-e-modelo-relacional
K19 k03-sql-e-modelo-relacional
 
K19 k12-desenvolvimento-web-com-jsf2-e-jpa2
K19 k12-desenvolvimento-web-com-jsf2-e-jpa2K19 k12-desenvolvimento-web-com-jsf2-e-jpa2
K19 k12-desenvolvimento-web-com-jsf2-e-jpa2
 
Sintaxe Ling Java Pilares Oo 4
Sintaxe Ling Java Pilares Oo 4Sintaxe Ling Java Pilares Oo 4
Sintaxe Ling Java Pilares Oo 4
 
Desenvolvimento Web 03 - David Arty - SENAC
Desenvolvimento Web 03 - David Arty - SENACDesenvolvimento Web 03 - David Arty - SENAC
Desenvolvimento Web 03 - David Arty - SENAC
 
Desenvolvimento Web 02 - David Arty - SENAC
Desenvolvimento Web 02 - David Arty - SENACDesenvolvimento Web 02 - David Arty - SENAC
Desenvolvimento Web 02 - David Arty - SENAC
 
Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)Exercicios professor marcos monteiro (1)
Exercicios professor marcos monteiro (1)
 
Exercicios de JAVA
Exercicios de JAVAExercicios de JAVA
Exercicios de JAVA
 
Java - Visão geral e Exercícios
Java - Visão geral e ExercíciosJava - Visão geral e Exercícios
Java - Visão geral e Exercícios
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e Servlets
 
Aula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de ProjetoAula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de Projeto
 
3.2 introdução a linguagem java
3.2 introdução a linguagem java3.2 introdução a linguagem java
3.2 introdução a linguagem java
 
Introdução - Java WEB
Introdução - Java WEBIntrodução - Java WEB
Introdução - Java WEB
 
Banco de Dados II Aula 10 - Linguagem de Consulta SQL (SQL Avançada)
Banco de Dados II Aula 10 - Linguagem de Consulta SQL (SQL Avançada)Banco de Dados II Aula 10 - Linguagem de Consulta SQL (SQL Avançada)
Banco de Dados II Aula 10 - Linguagem de Consulta SQL (SQL Avançada)
 
Java Lista Exercicios 06
Java Lista Exercicios 06Java Lista Exercicios 06
Java Lista Exercicios 06
 

Similaire à Padrões JEE para desenvolvimento web

Qualificação MACC- Entities
Qualificação MACC- EntitiesQualificação MACC- Entities
Qualificação MACC- EntitiesMarcius Brandão
 
Arquitetura jee bp_overview
Arquitetura jee bp_overviewArquitetura jee bp_overview
Arquitetura jee bp_overviewJuarez Junior
 
Liferay RoadShow 2010 | O Futuro no Desenvolvimento de Portais. Por Bruno Tar...
Liferay RoadShow 2010 | O Futuro no Desenvolvimento de Portais. Por Bruno Tar...Liferay RoadShow 2010 | O Futuro no Desenvolvimento de Portais. Por Bruno Tar...
Liferay RoadShow 2010 | O Futuro no Desenvolvimento de Portais. Por Bruno Tar...Vertigo Tecnologia
 
Currículo Fernanda Paulo Ramos - Nov/2013
Currículo Fernanda Paulo Ramos - Nov/2013Currículo Fernanda Paulo Ramos - Nov/2013
Currículo Fernanda Paulo Ramos - Nov/2013Fernanda Paulo Ramos
 
Alexandre Fonseca - Bazaar Enhancements
Alexandre Fonseca - Bazaar EnhancementsAlexandre Fonseca - Bazaar Enhancements
Alexandre Fonseca - Bazaar Enhancementscm_seminars
 
Qualificação Mestrado
Qualificação MestradoQualificação Mestrado
Qualificação MestradoFilipe Grillo
 
Pesquisas em usabilidade de interfaces e interação - 2 bim
Pesquisas em usabilidade de interfaces e interação -  2 bimPesquisas em usabilidade de interfaces e interação -  2 bim
Pesquisas em usabilidade de interfaces e interação - 2 bimReuel Lopes
 
Otimizando os projetos de TI com User Experience
Otimizando os projetos de TI com User ExperienceOtimizando os projetos de TI com User Experience
Otimizando os projetos de TI com User ExperienceTuia
 
Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)
Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)
Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)Luciano Condé
 
Apresentação de minha Monografia do curso de Sistema e Mídias Digitais
Apresentação de minha Monografia do curso de Sistema e Mídias DigitaisApresentação de minha Monografia do curso de Sistema e Mídias Digitais
Apresentação de minha Monografia do curso de Sistema e Mídias DigitaisÉdipo Souza
 
Curso C sharp plus Framework NET (NOTURNO)
Curso C sharp plus Framework NET (NOTURNO)Curso C sharp plus Framework NET (NOTURNO)
Curso C sharp plus Framework NET (NOTURNO)Grupo Treinar
 
Curso C sharp plus Framework NET (DIURNO)
Curso C sharp plus Framework NET (DIURNO) Curso C sharp plus Framework NET (DIURNO)
Curso C sharp plus Framework NET (DIURNO) Grupo Treinar
 
Multiedro - google apps - cloud computing
Multiedro - google apps - cloud computingMultiedro - google apps - cloud computing
Multiedro - google apps - cloud computingMultiedro
 
Avaliação em mobile Websites
Avaliação em mobile WebsitesAvaliação em mobile Websites
Avaliação em mobile WebsitesMCM-IPG
 
Ibolt e Procnet
Ibolt e ProcnetIbolt e Procnet
Ibolt e ProcnetProcnet
 
QCon 2011
QCon 2011QCon 2011
QCon 2011Ismael
 
Apresentação sobre web 2.0
Apresentação sobre web 2.0Apresentação sobre web 2.0
Apresentação sobre web 2.0Carlos Serrao
 

Similaire à Padrões JEE para desenvolvimento web (20)

Qualificação MACC- Entities
Qualificação MACC- EntitiesQualificação MACC- Entities
Qualificação MACC- Entities
 
Arquitetura jee bp_overview
Arquitetura jee bp_overviewArquitetura jee bp_overview
Arquitetura jee bp_overview
 
Liferay RoadShow 2010 | O Futuro no Desenvolvimento de Portais. Por Bruno Tar...
Liferay RoadShow 2010 | O Futuro no Desenvolvimento de Portais. Por Bruno Tar...Liferay RoadShow 2010 | O Futuro no Desenvolvimento de Portais. Por Bruno Tar...
Liferay RoadShow 2010 | O Futuro no Desenvolvimento de Portais. Por Bruno Tar...
 
Currículo Fernanda Paulo Ramos - Nov/2013
Currículo Fernanda Paulo Ramos - Nov/2013Currículo Fernanda Paulo Ramos - Nov/2013
Currículo Fernanda Paulo Ramos - Nov/2013
 
Alexandre Fonseca - Bazaar Enhancements
Alexandre Fonseca - Bazaar EnhancementsAlexandre Fonseca - Bazaar Enhancements
Alexandre Fonseca - Bazaar Enhancements
 
Qualificação Mestrado
Qualificação MestradoQualificação Mestrado
Qualificação Mestrado
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
Pesquisas em usabilidade de interfaces e interação - 2 bim
Pesquisas em usabilidade de interfaces e interação -  2 bimPesquisas em usabilidade de interfaces e interação -  2 bim
Pesquisas em usabilidade de interfaces e interação - 2 bim
 
Otimizando os projetos de TI com User Experience
Otimizando os projetos de TI com User ExperienceOtimizando os projetos de TI com User Experience
Otimizando os projetos de TI com User Experience
 
Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)
Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)
Encontro no .NET Architects - Application Architecture Guide (AppArchGuide)
 
Apresentação de minha Monografia do curso de Sistema e Mídias Digitais
Apresentação de minha Monografia do curso de Sistema e Mídias DigitaisApresentação de minha Monografia do curso de Sistema e Mídias Digitais
Apresentação de minha Monografia do curso de Sistema e Mídias Digitais
 
2 curso-titanium-plataforma
2 curso-titanium-plataforma2 curso-titanium-plataforma
2 curso-titanium-plataforma
 
Curso C sharp plus Framework NET (NOTURNO)
Curso C sharp plus Framework NET (NOTURNO)Curso C sharp plus Framework NET (NOTURNO)
Curso C sharp plus Framework NET (NOTURNO)
 
Curso C sharp plus Framework NET (DIURNO)
Curso C sharp plus Framework NET (DIURNO) Curso C sharp plus Framework NET (DIURNO)
Curso C sharp plus Framework NET (DIURNO)
 
Multiedro - google apps - cloud computing
Multiedro - google apps - cloud computingMultiedro - google apps - cloud computing
Multiedro - google apps - cloud computing
 
Avaliação em mobile Websites
Avaliação em mobile WebsitesAvaliação em mobile Websites
Avaliação em mobile Websites
 
CV Alexandre R. de Castro
CV Alexandre R. de CastroCV Alexandre R. de Castro
CV Alexandre R. de Castro
 
Ibolt e Procnet
Ibolt e ProcnetIbolt e Procnet
Ibolt e Procnet
 
QCon 2011
QCon 2011QCon 2011
QCon 2011
 
Apresentação sobre web 2.0
Apresentação sobre web 2.0Apresentação sobre web 2.0
Apresentação sobre web 2.0
 

Padrões JEE para desenvolvimento web

  • 1. Lato Sensu em Sistemas Orientados a Objetos Módulo 3 Web JEE Design Patterns Monday, August 17, 2009
  • 2. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Monday, August 17, 2009
  • 3. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Agenda • Remote Proxy • Service Facade • Front Controller • Service Locator • Intercepting Filter • Business Delegate • View Helper • Service-to-Worker • Transfer Object • Dispatcher-to-View Monday, August 17, 2009
  • 4. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Padrões JEE • Os padrões JEE foram baseados na experiência de anos de trabalho com a arquitetura JEE. • Padrão de Projeto X Padrão de Arquitetura. • Evoluem à medida que surgem mudanças na especificação e nas tecnologias relacionadas. Monday, August 17, 2009
  • 5. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Padrões JEE Apresentação Negócio Integração Interception Filter Session Façade Data Access Object Front Controller Business Delegate Service Activator View Helper Data Transfer Object Composite View Data Transfer Object Assembler Service to Worker Composite Entity Dispatcher View Service Locator Fast Lane Reader Value List Handler http://www.corej2eepatterns.com Monday, August 17, 2009
  • 8. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Estrutura de apresentação de um padrão JEE • Nome • Contexto • Problema • Motivação • Solução - Estrutura - Estratégias • Conseqüências • Código Exemplo • Padrões Relacionados Monday, August 17, 2009
  • 9. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Padrões de projeto JEE Benefícios • Aperfeiçoar o projeto de um sistema: - Reuso interno, evitam a 'reinvenção da roda'. - Facilidade de manutenção - Facilidade de evolução • Estabelecer um vocabulário comum. • Cria fronteiras, definindo um escopo para a solução de um problema. Monday, August 17, 2009
  • 10. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Como usar um padrão de projeto? • Leia o padrão de projeto inteiro para ter uma visão geral. • Certifique-se que entendeu bem a estrutura do padrão. • Veja como implementar o padrão no Código de Exemplo. • Escolha nomes para os participantes de acordo com o contexto da aplicação. Monday, August 17, 2009
  • 11. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Como não usar um padrão de projeto • Se existe uma maneira trivial para resolver um problema e um padrão de projeto, prefira a simplicidade. • Só use um padrão de projeto quando necessário - deve haver ganhos claros com o uso do padrão • Padrões de projeto indevidamente aplicados aumentam a complexidade do software sem necessidade. Monday, August 17, 2009
  • 12. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Remote Proxy Monday, August 17, 2009
  • 13. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Contexto A B Monday, August 17, 2009
  • 14. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema comunicação não trivial Monday, August 17, 2009
  • 15. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema comunicação remota Monday, August 17, 2009
  • 16. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema objeto ainda não existe ? Monday, August 17, 2009
  • 17. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução A B’ B Proxy Monday, August 17, 2009
  • 18. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Proxy Monday, August 17, 2009
  • 19. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Proxy Monday, August 17, 2009
  • 20. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Proxy ? Monday, August 17, 2009
  • 21. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Stub ? Monday, August 17, 2009
  • 22. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009
  • 23. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Proxy Monday, August 17, 2009
  • 24. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Proxy Sinônimos Surrogate Monday, August 17, 2009
  • 25. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Proxy Motivação • O Proxy é: - Uma pessoa autorizada a atuar no lugar de outra pessoa (procurador). • Existem situações onde o cliente não quer ou não pode referenciar a um objeto diretamente, mas mesmo assim quer iteragir com o mesmo. • O proxy tem a mesma interface que o objeto alvo. • O proxy delega as requisições (Delegação). Monday, August 17, 2009
  • 26. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Proxy Aplicabilidade • O padrão Proxy é aplicável sempre que há necessidade de uma referência mais versátil, ou sofisticada, do que um simples apontador para um objeto. Monday, August 17, 2009
  • 27. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Proxy Estrutura Monday, August 17, 2009
  • 28. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Proxy Conseqüências • Oculta o fato de que um objeto reside num espaço de endereçamento diferente. • Provê tarefas adicionais de organização quando um objeto é acessado. Monday, August 17, 2009
  • 29. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Proxy Código de Exemplo public interface Subject { public Object operation(); } public class RealSubject implements Subject { public Object operation()‫{ ‏‬ return new Object(); } } Monday, August 17, 2009
  • 30. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Proxy Código de Exemplo public class Proxy implements Subject { private RealSubject real; public Object operation()‫{‏‬ makeSomething(); return real.operation(); } private void makeSomething()‫{ ‏‬ } } Monday, August 17, 2009
  • 31. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Proxy Usos Conhecidos • Objetos Distribuídos – RMI e EJB. • Image Proxy – Guardar o lugar da imagem sendo carregada. Monday, August 17, 2009
  • 32. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Proxy Padrões de Projeto Relacionados • Adapter • Decorator Monday, August 17, 2009
  • 33. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Front Controller Monday, August 17, 2009
  • 34. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Contexto Monday, August 17, 2009
  • 35. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Contexto Monday, August 17, 2009
  • 36. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009
  • 37. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009 ?
  • 38. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009
  • 39. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Monday, August 17, 2009
  • 40. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Front Controller log, segurança, roteamento, exceções Monday, August 17, 2009
  • 41. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Front Controller consequências • Controle centralizado • Melhora gerência sobre a segurança • Aumenta o potencial de reutilização Monday, August 17, 2009
  • 42. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Front Controller estrutura Monday, August 17, 2009
  • 43. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Front Controller • Participantes e Responsabilidades Monday, August 17, 2009
  • 44. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Front Controller • Padrões Relacionados - View Helper - Intercepting Filter - Dispatcher View e Service to Worker Monday, August 17, 2009
  • 45. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Intercepting Filter Monday, August 17, 2009
  • 46. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Contexto Monday, August 17, 2009
  • 47. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009
  • 48. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Intercepting Filter Monday, August 17, 2009
  • 49. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Intercepting Filter log, segurança, compatibilidade Monday, August 17, 2009
  • 50. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 ??????????????????????? == == ??????????????????????? Monday, August 17, 2009
  • 51. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Pré e pós-processamento Monday, August 17, 2009
  • 56. intercepting filter intercepting filter Monday, August 17, 2009
  • 57. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Encadeamento filter chaining Monday, August 17, 2009
  • 58. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Intercepting Filter Estrutura Monday, August 17, 2009
  • 59. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Intercepting Filter Participantes e Responsabilidades Monday, August 17, 2009
  • 60. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Intercepting Filter Parte integrante da especificacão desde Servlets 2.3 Monday, August 17, 2009
  • 61. public final class SimpleFilter implements Filter { private FilterConfig filterConfig = null; public void doFilter(ServletRequest req, ServletResponse res, FilterChain ch) throws IOException, ServletException { if (filterConfig == null)‫‏‬ throw new ServletException("FilterConfig not set before first request"); filterConfig.getServletContext().log("in SimpleFilter"); Object curVal = request.getAttribute("MsgOut"); if (curVal == null)‫‏‬ request.setAttribute("MsgOut", new String("SimpleFilter")); else request.setAttribute("MsgOut", (String) curVal + " :SimpleFilter"); chain.doFilter(request, response); filterConfig.getServletContext().log("Getting out of SimpleFilter"); } public void destroy(){ filterConfig = null; } public void init(FilterConfig filterConfig){ this.filterConfig = filterConfig; } } Monday, August 17, 2009
  • 62. <filter> <filter-name>Simple Filter</filter-name> <filter-class>capitulo12.SimpleFilter</filter-class> </filter> <filter-mapping> <filter-name>Simple Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>Simple Filter 2</filter-name> <filter-class>capitulo12.SimpleFilter2</filter-class> </filter> <filter> <filter-name>Audit Filter</filter-name> <filter-class>capitulo12.AuditFilter</filter-class> </filter> <filter-mapping> <filter-name>Simple Filter 2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>Audit Filter</filter-name> <servlet-name>MyServlet</servlet-name> </filter-mapping> Monday, August 17, 2009
  • 63. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Intercepting Filter • Conseqüências - Centraliza o controle com baixo acoplamento. - Aumenta o potencial de reuso. - Configuração declarativa e flexível. - Compartilhamento de informações entre filtros pode ser ineficiente. Monday, August 17, 2009
  • 64. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Intercepting Filter • Padrões Relacionados - Pipes and Filter [POSA] - Front Controller - Decorator [GoF] Monday, August 17, 2009
  • 65. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 View Helper Monday, August 17, 2009
  • 66. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Contexto Monday, August 17, 2009
  • 67. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009
  • 68. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Contexto Monday, August 17, 2009
  • 69. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema // conecte-se ao banco de dados via JDBC // recupere do banco o nome do usuário logado // recupere do banco a data do último acesso // desenhe uma tabela linda na tela // apresente os dados nesta tabela index.jsp Monday, August 17, 2009
  • 70. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema // conecte-se ao banco de dados via JDBC // recupere do banco o nome do usuário logado // recupere do banco a data do último acesso // desenhe uma tabela linda na tela // apresente os dados nesta tabela index.jsp Monday, August 17, 2009
  • 71. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema // conecte-se ao banco de dados via JDBC // recupere do banco o nome do usuário logado // recupere do banco a data do último acesso // desenhe uma tabela linda na tela // apresente os dados nesta tabela index.jsp Monday, August 17, 2009
  • 72. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009 + + index.jsp
  • 73. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 View Helper • Problema - Mudanças na camada de apresentação ocorrem com freqüência e são difíceis de serem implementadas e mantidas. - O problema ocorre quando a lógica de acesso a dados e a lógica de apresentação estão acopladas: Menor flexibilidade Dificuldade de reuso Reduz a modularidade Web Designers X Desenvolvedores Monday, August 17, 2009
  • 74. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 View Helper • Motivação - Inserir lógica de negócio na 'visão' viabiliza reaproveitamento de código por meio de uma abordagem 'copy-paste'. Surgem problemas de manutenção. Código duplicado gera bugs. - É importante separar o papel do desenvolvedor de software e do Web Designer. Melhora a qualidade e a produtividade. Monday, August 17, 2009
  • 75. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução index.jsp Monday, August 17, 2009 + + JavaBean, CustomTag, Servlet
  • 76. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução View Helper index.jsp Monday, August 17, 2009 + + JavaBean, CustomTag, Servlet
  • 77. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução View Helper index.jsp Monday, August 17, 2009 + + JavaBean, CustomTag, Servlet
  • 78. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 View Helper • Solução - A visão mantém apenas código de formatação, delegando responsabilidades de processamento para helper classes, implementadas como JavaBeans ou tags customizadas. - Os helpers armazenam uma visão intermediária dos dados e servem como classes/componentes adaptadores. - Um sinal → excesso de scriptlets em uma página JSP. Monday, August 17, 2009
  • 79. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 View Controller Model + + + index.jsp ViewHelper Monday, August 17, 2009
  • 80. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 View Helper Estrutura Monday, August 17, 2009
  • 81. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 View Helper Participantes e Responsabilidades Monday, August 17, 2009
  • 82. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 View Helper • Conseqüências - Facilita a manutenção - Aumenta o potencial de reuso - Promove a separação de papéis Monday, August 17, 2009
  • 83. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 View Helper • Padrões Relacionados - Business Delegate - Front Controller - Dispatcher View e Service to Worker Monday, August 17, 2009
  • 84. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Transfer Object Data Transfer Object Value Object Monday, August 17, 2009
  • 85. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Contexto Monday, August 17, 2009
  • 86. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009
  • 87. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009
  • 88. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema ? Monday, August 17, 2009
  • 89. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Monday, August 17, 2009
  • 90. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Monday, August 17, 2009
  • 91. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução ! Monday, August 17, 2009
  • 92. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução ! Monday, August 17, 2009
  • 93. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução ! Monday, August 17, 2009
  • 94. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução ! Monday, August 17, 2009
  • 95. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução ! Monday, August 17, 2009
  • 96. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Monday, August 17, 2009
  • 97. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Monday, August 17, 2009
  • 98. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Monday, August 17, 2009
  • 99. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Monday, August 17, 2009
  • 100. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Monday, August 17, 2009
  • 101. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Monday, August 17, 2009
  • 102. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Transfer Object Estrutura Monday, August 17, 2009
  • 103. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Transfer Object Participantes e Responsabilidades Monday, August 17, 2009
  • 104. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Transfer Object Conseqüências • Benefícios - Simplifica o componente de negócio e a interface remota. - Transfere mais dados em menos chamadas remotas. - Reduz o trafego na rede. - Reduz a duplicação do código. • Cuidados - Introdução de objetos obsoletos. - Acesso a transações concorrentes Monday, August 17, 2009
  • 105. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Transfer Object • Padrões Relacionados - Session Facade - Transfer Object Assembler - Value List Handler - Composite Entity Monday, August 17, 2009
  • 106. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Service Facade Monday, August 17, 2009
  • 107. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Contexto Monday, August 17, 2009
  • 108. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009
  • 109. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Session Facade • Problema - Forte acoplamento, que leva a uma dependência direta entre clientes e objetos de negócio. - Grande quantidade de invocações de métodos remotos entre cliente e servidor, levando a problemas de desempenho da rede. - Ausência de uma estratégia uniforme de acesso para o cliente, expondo objetos de negócio à possibilidade de serem usados de forma incorreta. Monday, August 17, 2009
  • 111. Solução Session Facade Monday, August 17, 2009
  • 112. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Session Facade Monday, August 17, 2009
  • 113. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Session Facade • Solução - Utilizar um Session Bean como 'fachada' para encapsular a complexidade das interações entre os objetos de negócio que participam de um serviço. - Um Session Facade gerencia os objetos de negócio e provê um serviço uniforme e de alta granularidade aos clientes. - Quando usado com o Business Delegate, geralmente há um relacionamento One-to-One entre eles. Monday, August 17, 2009
  • 114. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Session Facade • Estrutura Monday, August 17, 2009
  • 115. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Session Facade • Participantes e Responsabilidades Monday, August 17, 2009
  • 116. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Session Facade • Padrões Relacionados - Facade [GoF] - Service Locator - Business Delegate Monday, August 17, 2009
  • 117. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Service Locator Monday, August 17, 2009
  • 118. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Contexto Monday, August 17, 2009
  • 119. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema JNDI Monday, August 17, 2009
  • 120. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema JNDI try { InitialContext ctx = new InitialContext(); Object objref = ctx.lookup(“MeuEJB”); Object obj = PortableRemoteObject.narrow(objref, MeuEJB.class); EJBHome ejb = (EJBHome)obj; ejb.servico() } catch (NamingException ne) { System.err.println(se); } catch (ServiceLocatorException se) { System.err.println(se); } catch (Exception e) { System.err.println(se); } Monday, August 17, 2009
  • 121. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009
  • 122. Lato Sensu em Sistemas Orientados a Objetos Solução Desenvolvimento de Aplicaões Web Avançado - 2°/2009 auxílio à lista Monday, August 17, 2009
  • 123. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Service Locator 102 Monday, August 17, 2009
  • 124. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Service Locator • Solução - O Service Locator centraliza todo o acesso ao servidor JNDI, facilitando: Localização de objetos EJBHome. Localização de serviços como conexões de bancos de dados ou conexões de servidores de messaging. Localização de canais e filas JMS Obtenção de variáveis configuradas. - Service Locator pode melhorar a performance da pesquisa oferecendo um cache para as pesquisas mais frequentes. Monday, August 17, 2009
  • 125. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Service Locator Estrutura Monday, August 17, 2009
  • 126. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Service Locator Participantes e Responsabilidades Monday, August 17, 2009
  • 127. // imports public class ServiceLocator { Service Locator private InitialContext initialContext; private Map cache; código de exemplo private static ServiceLocator _instance; static { try { _instance = new ServiceLocator(); } catch (ServiceLocatorException se) { System.err.println(se); } } private ServiceLocator() throws ServiceLocatorException { try { initialContext = new InitialContext(); cache = Collections.synchronizedMap(new HashMap()); } catch (NamingException ne) { throw new ServiceLocatorException(ne); } catch (Exception e) { throw new ServiceLocatorException(e); } } static public ServiceLocator getInstance() { return _instance; } // implement lookup methods here . . . } Monday, August 17, 2009
  • 128. Service Locator código de exemplo public EJBLocalHome getLocalHome(String jndiHomeName) throws ServiceLocatorException { EJBLocalHome localHome = null; try { if (cache.containsKey(jndiHomeName))‫‏‬ { localHome = (EJBLocalHome)cache.get(jndiHomeName); } else { localHome = (EJBLocalHome)initialContext.lookup(jndiHomeName); cache.put(jndiHomeName, localHome); } } catch(NamingException nex)‫‏‬ { throw new ServiceLocatorException(nex); } catch (Exception ex)‫‏‬ { throw new ServiceLocatorException(ex); } return localHome; } Monday, August 17, 2009
  • 129. // lookup a remote home given the JNDI name for the remote home public EJBHome getRemoteHome(String jndiHomeName, Class homeClassName) throws ServiceLocatorException { EJBHome remoteHome = null; try { if (cache.containsKey(jndiHomeName))‫‏‬ { remoteHome = (EJBHome) cache.get(jndiHomeName); } else { Object objref = initialContext.lookup(jndiHomeName); Object obj = PortableRemoteObject.narrow(objref, homeClassName); remoteHome = (EJBHome)obj; cache.put(jndiHomeName, remoteHome); } } catch (NamingException nex)‫‏‬ { throw new ServiceLocatorException(nex); } catch (Exception ex)‫‏‬ { throw new ServiceLocatorException(ex); } return remoteHome; } Monday, August 17, 2009
  • 130. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Service Locator • Padrões Relacionados - Business Delegate - Session Facade - Transfer Object Assembler - Data Access Object Monday, August 17, 2009
  • 131. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Business Delegate Monday, August 17, 2009
  • 132. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Contexto Monday, August 17, 2009
  • 133. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009
  • 134. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema JNDI Monday, August 17, 2009
  • 135. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema JNDI EJB Monday, August 17, 2009
  • 136. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema JNDI RMI EJB Monday, August 17, 2009
  • 137. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema EJB JNDI RMI Monday, August 17, 2009
  • 138. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema EJB EJB JNDI JNDI RMI RMI Monday, August 17, 2009
  • 139. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema EJB EJB JNDI JNDI RMI RMI Monday, August 17, 2009
  • 140. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema ! WebService! Monday, August 17, 2009
  • 141. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema WebService! Monday, August 17, 2009
  • 142. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução EJB EJB JNDI JNDI RMI RMI Monday, August 17, 2009
  • 143. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema EJB JNDI RMI Monday, August 17, 2009
  • 144. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Business Delegate • Problema - A disponibilização direta de uma API de negócio força o cliente a tratar características específicas de natureza distribuída da tecnologia EJB. - Pode haver um impacto em desempenho se a camada de apresentação realizar um grande número de invocações remotas. - Os componentes da camada de apresentação ficam vulneráveis a mudanças na implementação de componentes de negócio. Monday, August 17, 2009
  • 145. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Business Delegate EJB JNDI RMI JNDI RMI EJB Monday, August 17, 2009
  • 146. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Mais comum Business Delegate + Session Facade Busines s Session Delegat e Facade Monday, August 17, 2009
  • 147. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Business Delegate Benefícios • O padrão esconde os detalhes do componente de negócio - Serviços de nomes e lookup. - Tratamento de exceções remotas, JMS etc. - Pode tratar exceções de sistema e gerar exceções de aplicação. - Pode realizar operações novas tentativas de conexão em caso de falha. • Mecanismo de Cache • Pode ser usado para reduzir o acoplamento entre outras camadas. Monday, August 17, 2009
  • 148. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Business Delegate Estrutura Monday, August 17, 2009
  • 149. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Business Delegate Participantes e Responsabilidades Monday, August 17, 2009
  • 150. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Business Delegate • Conseqüências - Reduz o acoplamento. - Traduz exceções de sistema em exceções de aplicação. - Pode prover melhor desempenho. - Esconde a natureza remota da aplicação ao cliente. - Introduz uma nova camada para a aplicação. Monday, August 17, 2009
  • 151. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Business Delegate • Padrões Relacionados - Service Locator - Proxy [GoF] - Adapter [GoF] Monday, August 17, 2009
  • 152. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Service to Worker Monday, August 17, 2009
  • 153. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Front Controller + Dispatcher + View Helper Service to Worker Monday, August 17, 2009
  • 154. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Service to Worker Estrutura Monday, August 17, 2009
  • 155. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Service to Worker Participantes e Responsabilidades Monday, August 17, 2009
  • 156. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Service to Worker • Conseqüências - Centraliza o controle com baixo acoplamento. - Aumenta o potencial de reuso. - Melhora a separação de papéis no projeto. Monday, August 17, 2009
  • 157. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Service to Worker • Padrões Relacionados - Front Controller e View Helper - Dispatcher View Monday, August 17, 2009
  • 158. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Revisão • Remote Proxy • Session Facade - Procurador - Despachante • Front Controller • Service Locator - Porteiro Zé - 102 • Intercepting Filter • Business Delegate - Motores de Combustão Interna - Proxy do Session Facade Procurador da Secretária • View Helper • Service-to-Worker - Ajudante - Roteador Inteligente • Transfer Object • Dispatcher-to-View - Sacola da Feira - Roteador Burro Monday, August 17, 2009
  • 159. Lato Sensu em Sistemas Orientados a Objetos Q&A MSc. Alexandre Gomes alegomes@gmail.com Monday, August 17, 2009