• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
JEE Design Patterns
 

JEE Design Patterns

on

  • 5,296 views

Módulo 3 - JEE Design Patterns

Módulo 3 - JEE Design Patterns

Statistics

Views

Total Views
5,296
Views on SlideShare
5,269
Embed Views
27

Actions

Likes
3
Downloads
307
Comments
0

2 Embeds 27

http://www.slideshare.net 26
http://www.slashdocs.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    JEE Design Patterns JEE Design Patterns Presentation Transcript

    • 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