159
Lato Sensu em Sistemas Orientados a Objetos Módulo 3 Web JEE Design Patterns Monday, August 17, 2009

JEE Design Patterns

Embed Size (px)

DESCRIPTION

Módulo 3 - JEE Design Patterns

Citation preview

Page 1: JEE Design Patterns

Lato Sensu em Sistemas Orientados a Objetos

Módulo 3Web JEE Design Patterns

Monday, August 17, 2009

Page 2: JEE Design Patterns

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

Monday, August 17, 2009

Page 3: JEE Design Patterns

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

Agenda

• Remote Proxy

• Front Controller

• Intercepting Filter

• View Helper

• Transfer Object

• Service Facade

• Service Locator

• Business Delegate

• Service-to-Worker

• Dispatcher-to-View

Monday, August 17, 2009

Page 4: JEE Design Patterns

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

Page 5: JEE Design Patterns

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

Padrões JEEIntegraçãoNegócioApresentação

Interception FilterFront ControllerView HelperComposite ViewService to WorkerDispatcher View

Session FaçadeBusiness DelegateData Transfer ObjectData Transfer Object AssemblerComposite EntityService LocatorFast Lane ReaderValue List Handler

Data Access ObjectService Activator

http://www.corej2eepatterns.com

Monday, August 17, 2009

Page 6: JEE Design Patterns

Monday, August 17, 2009

Page 7: JEE Design Patterns

http://java.sun.com/blueprints/patterns/catalog.html

Monday, August 17, 2009

Page 8: JEE Design Patterns

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

Page 9: JEE Design Patterns

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

Padrões de projeto JEEBenefí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

Page 10: JEE Design Patterns

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

Page 11: JEE Design Patterns

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

Page 12: JEE Design Patterns

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

Remote Proxy

Monday, August 17, 2009

Page 13: JEE Design Patterns

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

Contexto

A B

Monday, August 17, 2009

Page 14: JEE Design Patterns

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

Problemacomunicação

não trivial

Monday, August 17, 2009

Page 15: JEE Design Patterns

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

Problemacomunicação

remota

Monday, August 17, 2009

Page 16: JEE Design Patterns

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

Page 17: JEE Design Patterns

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

Solução

A BB’Proxy

Monday, August 17, 2009

Page 18: JEE Design Patterns

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

Solução

Proxy

Monday, August 17, 2009

Page 19: JEE Design Patterns

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

Problema

Proxy

Monday, August 17, 2009

Page 20: JEE Design Patterns

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

Problema

Proxy

?Monday, August 17, 2009

Page 21: JEE Design Patterns

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

Problema

?

Stub

Monday, August 17, 2009

Page 22: JEE Design Patterns

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

Problema

Monday, August 17, 2009

Page 23: JEE Design Patterns

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

Solução

Proxy

Monday, August 17, 2009

Page 24: JEE Design Patterns

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

Proxy Sinônimos

Surrogate

Monday, August 17, 2009

Page 25: JEE Design Patterns

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

ProxyMotivaçã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

Page 26: JEE Design Patterns

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

ProxyAplicabilidade

• 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

Page 27: JEE Design Patterns

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

ProxyEstrutura

Monday, August 17, 2009

Page 28: JEE Design Patterns

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

ProxyConseqüê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

Page 29: JEE Design Patterns

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

ProxyCódigo de Exemplo

public class RealSubject implements Subject {

public Object operation()‏ { return new Object(); }}

public interface Subject { public Object operation();}

Monday, August 17, 2009

Page 30: JEE Design Patterns

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

ProxyCó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

Page 31: JEE Design Patterns

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

ProxyUsos Conhecidos

• Objetos Distribuídos – RMI e EJB.

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

Monday, August 17, 2009

Page 32: JEE Design Patterns

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

ProxyPadrões de Projeto Relacionados

• Adapter

• Decorator

Monday, August 17, 2009

Page 33: JEE Design Patterns

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

Front Controller

Monday, August 17, 2009

Page 34: JEE Design Patterns

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

Contexto

Monday, August 17, 2009

Page 35: JEE Design Patterns

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

Contexto

Monday, August 17, 2009

Page 36: JEE Design Patterns

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

Problema

Monday, August 17, 2009

Page 37: JEE Design Patterns

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

Problema

?Monday, August 17, 2009

Page 38: JEE Design Patterns

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

Problema

Monday, August 17, 2009

Page 39: JEE Design Patterns

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

Solução

Monday, August 17, 2009

Page 40: JEE Design Patterns

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

SoluçãoFront Controller

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

Monday, August 17, 2009

Page 41: JEE Design Patterns

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

Front Controllerconsequências

• Controle centralizado

• Melhora gerência sobre a segurança

• Aumenta o potencial de reutilização

Monday, August 17, 2009

Page 42: JEE Design Patterns

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

Front Controllerestrutura

Monday, August 17, 2009

Page 43: JEE Design Patterns

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

Page 44: JEE Design Patterns

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

Page 45: JEE Design Patterns

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

Intercepting Filter

Monday, August 17, 2009

Page 46: JEE Design Patterns

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

Contexto

Monday, August 17, 2009

Page 47: JEE Design Patterns

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

Problema

Monday, August 17, 2009

Page 48: JEE Design Patterns

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

SoluçãoIntercepting Filter

Monday, August 17, 2009

Page 49: JEE Design Patterns

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

SoluçãoIntercepting Filter

log, segurança, compatibilidade

Monday, August 17, 2009

Page 50: JEE Design Patterns

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

== ==

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

???????????????????????Monday, August 17, 2009

Page 51: JEE Design Patterns

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

Page 52: JEE Design Patterns

Monday, August 17, 2009

Page 53: JEE Design Patterns

Monday, August 17, 2009

Page 54: JEE Design Patterns

?

Monday, August 17, 2009

Page 55: JEE Design Patterns

Monday, August 17, 2009

Page 56: JEE Design Patterns

intercepting filter

intercepting filter

Monday, August 17, 2009

Page 57: JEE Design Patterns

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

Encadeamentofilter chaining

Monday, August 17, 2009

Page 58: JEE Design Patterns

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

Intercepting FilterEstrutura

Monday, August 17, 2009

Page 59: JEE Design Patterns

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

Intercepting FilterParticipantes e Responsabilidades

Monday, August 17, 2009

Page 60: JEE Design Patterns

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

Page 61: JEE Design Patterns

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

Page 62: JEE Design Patterns

<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

Page 63: JEE Design Patterns

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

Page 64: JEE Design Patterns

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

Page 65: JEE Design Patterns

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

View Helper

Monday, August 17, 2009

Page 66: JEE Design Patterns

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

Contexto

Monday, August 17, 2009

Page 67: JEE Design Patterns

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

Problema

Monday, August 17, 2009

Page 68: JEE Design Patterns

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

Contexto

Monday, August 17, 2009

Page 69: JEE Design Patterns

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

Page 70: JEE Design Patterns

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

Page 71: JEE Design Patterns

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

Page 72: JEE Design Patterns

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

Problema

+ +index.jsp

Monday, August 17, 2009

Page 73: JEE Design Patterns

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

Page 74: JEE Design Patterns

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

Page 75: JEE Design Patterns

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

Solução

+ +index.jsp JavaBean, CustomTag, Servlet

Monday, August 17, 2009

Page 76: JEE Design Patterns

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

Solução

+ +index.jsp JavaBean, CustomTag, Servlet

View Helper

Monday, August 17, 2009

Page 77: JEE Design Patterns

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

JavaBean, CustomTag, Servlet

Solução

+ +index.jsp

View Helper

Monday, August 17, 2009

Page 78: JEE Design Patterns

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

Page 79: JEE Design Patterns

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

+index.jsp ViewHelper

View ModelController

++

Monday, August 17, 2009

Page 80: JEE Design Patterns

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

View HelperEstrutura

Monday, August 17, 2009

Page 81: JEE Design Patterns

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

View HelperParticipantes e Responsabilidades

Monday, August 17, 2009

Page 82: JEE Design Patterns

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

Page 83: JEE Design Patterns

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

Page 84: JEE Design Patterns

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

Transfer ObjectData Transfer Object

Value Object

Monday, August 17, 2009

Page 85: JEE Design Patterns

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

Contexto

Monday, August 17, 2009

Page 86: JEE Design Patterns

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

Problema

Monday, August 17, 2009

Page 87: JEE Design Patterns

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

Problema

Monday, August 17, 2009

Page 88: JEE Design Patterns

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

Problema

?Monday, August 17, 2009

Page 89: JEE Design Patterns

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

Solução

Monday, August 17, 2009

Page 90: JEE Design Patterns

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

Solução

Monday, August 17, 2009

Page 91: JEE Design Patterns

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

Solução

!

Monday, August 17, 2009

Page 92: JEE Design Patterns

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

Solução

!

Monday, August 17, 2009

Page 93: JEE Design Patterns

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

Solução

!

Monday, August 17, 2009

Page 94: JEE Design Patterns

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

Solução

!

Monday, August 17, 2009

Page 95: JEE Design Patterns

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

Solução

!

Monday, August 17, 2009

Page 96: JEE Design Patterns

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

Solução

Monday, August 17, 2009

Page 97: JEE Design Patterns

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

Solução

Monday, August 17, 2009

Page 98: JEE Design Patterns

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

Solução

Monday, August 17, 2009

Page 99: JEE Design Patterns

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

Solução

Monday, August 17, 2009

Page 100: JEE Design Patterns

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

Solução

Monday, August 17, 2009

Page 101: JEE Design Patterns

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

Solução

Monday, August 17, 2009

Page 102: JEE Design Patterns

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

Transfer ObjectEstrutura

Monday, August 17, 2009

Page 103: JEE Design Patterns

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

Transfer ObjectParticipantes e Responsabilidades

Monday, August 17, 2009

Page 104: JEE Design Patterns

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

Transfer ObjectConseqüê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

Page 105: JEE Design Patterns

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

Page 106: JEE Design Patterns

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

Service Facade

Monday, August 17, 2009

Page 107: JEE Design Patterns

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

Contexto

Monday, August 17, 2009

Page 108: JEE Design Patterns

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

Problema

Monday, August 17, 2009

Page 109: JEE Design Patterns

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

Page 110: JEE Design Patterns

Monday, August 17, 2009

Page 111: JEE Design Patterns

SoluçãoSession Facade

Monday, August 17, 2009

Page 112: JEE Design Patterns

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

SoluçãoSession Facade

Monday, August 17, 2009

Page 113: JEE Design Patterns

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

Page 114: JEE Design Patterns

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

Session Facade

• Estrutura

Monday, August 17, 2009

Page 115: JEE Design Patterns

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

Page 116: JEE Design Patterns

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

Page 117: JEE Design Patterns

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

Service Locator

Monday, August 17, 2009

Page 118: JEE Design Patterns

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

Contexto

Monday, August 17, 2009

Page 119: JEE Design Patterns

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

Problema

JNDI

Monday, August 17, 2009

Page 120: JEE Design Patterns

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

ProblemaJNDI

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

Page 121: JEE Design Patterns

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

ProblemaMonday, August 17, 2009

Page 122: JEE Design Patterns

Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009Solução

auxílio à lista

Monday, August 17, 2009

Page 123: JEE Design Patterns

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

SoluçãoService Locator

102

Monday, August 17, 2009

Page 124: JEE Design Patterns

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

Page 125: JEE Design Patterns

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

Service LocatorEstrutura

Monday, August 17, 2009

Page 126: JEE Design Patterns

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

Service LocatorParticipantes e Responsabilidades

Monday, August 17, 2009

Page 127: JEE Design Patterns

Service Locatorcódigo de exemplo

// importspublic class ServiceLocator {

private InitialContext initialContext; private Map cache; 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

Page 128: JEE Design Patterns

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;}

Service Locatorcódigo de exemplo

Monday, August 17, 2009

Page 129: JEE Design Patterns

// lookup a remote home given the JNDI name for the remote homepublic 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

Page 130: JEE Design Patterns

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

Page 131: JEE Design Patterns

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

Business Delegate

Monday, August 17, 2009

Page 132: JEE Design Patterns

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

Contexto

Monday, August 17, 2009

Page 133: JEE Design Patterns

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

Problema

Monday, August 17, 2009

Page 134: JEE Design Patterns

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

Problema

JNDI

Monday, August 17, 2009

Page 135: JEE Design Patterns

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

Problema

JNDI

EJBMonday, August 17, 2009

Page 136: JEE Design Patterns

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

Problema

JNDI

EJBRMIMonday, August 17, 2009

Page 137: JEE Design Patterns

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

ProblemaEJB

JNDI

RMI

Monday, August 17, 2009

Page 138: JEE Design Patterns

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

Problema

EJBJNDIRMI

EJBJNDIRMI

Monday, August 17, 2009

Page 139: JEE Design Patterns

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

Problema

EJBJNDIRMI

EJBJNDIRMI

Monday, August 17, 2009

Page 140: JEE Design Patterns

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

Problema

! WebService!

Monday, August 17, 2009

Page 141: JEE Design Patterns

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

Problema

WebService!

Monday, August 17, 2009

Page 142: JEE Design Patterns

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

Solução

EJBJNDIRMI

EJBJNDIRMI

Monday, August 17, 2009

Page 143: JEE Design Patterns

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

ProblemaEJB

JNDI

RMI

Monday, August 17, 2009

Page 144: JEE Design Patterns

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

Page 145: JEE Design Patterns

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

SoluçãoBusiness Delegate

JNDI

EJBRMI

EJBRMI

JNDI

Monday, August 17, 2009

Page 146: JEE Design Patterns

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

BusinessDelegate

SessionFacade

Mais comumBusiness Delegate + Session Facade

Monday, August 17, 2009

Page 147: JEE Design Patterns

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

Business DelegateBenefí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

Page 148: JEE Design Patterns

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

Business DelegateEstrutura

Monday, August 17, 2009

Page 149: JEE Design Patterns

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

Business DelegateParticipantes e Responsabilidades

Monday, August 17, 2009

Page 150: JEE Design Patterns

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

Page 151: JEE Design Patterns

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

Page 152: JEE Design Patterns

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

Service to Worker

Monday, August 17, 2009

Page 153: JEE Design Patterns

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

Page 154: JEE Design Patterns

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

Service to WorkerEstrutura

Monday, August 17, 2009

Page 155: JEE Design Patterns

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

Service to WorkerParticipantes e Responsabilidades

Monday, August 17, 2009

Page 156: JEE Design Patterns

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

Page 157: JEE Design Patterns

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

Page 158: JEE Design Patterns

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

Revisão• Remote Proxy

- Procurador

• Front Controller

- Porteiro Zé

• Intercepting Filter

- Motores de Combustão Interna

• View Helper

- Ajudante

• Transfer Object

- Sacola da Feira

• Session Facade

- Despachante

• Service Locator

- 102

• Business Delegate

- Proxy do Session Facade

Procurador da Secretária

• Service-to-Worker

- Roteador Inteligente

• Dispatcher-to-View

- Roteador BurroMonday, August 17, 2009

Page 159: JEE Design Patterns

Lato Sensu em Sistemas Orientados a Objetos

Q&AMSc. Alexandre [email protected]

Monday, August 17, 2009