JEE Design Patterns

Preview:

DESCRIPTION

Módulo 3 - JEE Design Patterns

Citation preview

Lato Sensu em Sistemas Orientados a Objetos

Módulo 3Web 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

• Front Controller

• Intercepting Filter

• View Helper

• Transfer Object

• Service Facade

• Service Locator

• Business Delegate

• Service-to-Worker

• 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 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

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

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

Problemacomunicação

não trivial

Monday, August 17, 2009

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

Problemacomunicaçã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 BB’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

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

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

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

ProxyEstrutura

Monday, August 17, 2009

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

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

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

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

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

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çãoFront 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 Controllerconsequê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 Controllerestrutura

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çãoIntercepting Filter

Monday, August 17, 2009

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

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

Encadeamentofilter chaining

Monday, August 17, 2009

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

Intercepting FilterEstrutura

Monday, August 17, 2009

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

Intercepting FilterParticipantes 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

+ +index.jsp

Monday, August 17, 2009

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 JavaBean, CustomTag, Servlet

Monday, August 17, 2009

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

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

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

+index.jsp ViewHelper

View ModelController

++

Monday, August 17, 2009

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

View HelperEstrutura

Monday, August 17, 2009

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

View HelperParticipantes 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 ObjectData 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 ObjectEstrutura

Monday, August 17, 2009

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

Transfer ObjectParticipantes e Responsabilidades

Monday, August 17, 2009

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

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çãoSession Facade

Monday, August 17, 2009

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

SoluçãoSession 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

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

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

ProblemaMonday, August 17, 2009

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

auxílio à lista

Monday, August 17, 2009

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

SoluçãoService 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 LocatorEstrutura

Monday, August 17, 2009

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

Service LocatorParticipantes e Responsabilidades

Monday, August 17, 2009

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

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

// 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

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

EJBMonday, August 17, 2009

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

Problema

JNDI

EJBRMIMonday, August 17, 2009

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

ProblemaEJB

JNDI

RMI

Monday, August 17, 2009

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

Problema

EJBJNDIRMI

EJBJNDIRMI

Monday, August 17, 2009

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

Problema

EJBJNDIRMI

EJBJNDIRMI

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

EJBJNDIRMI

EJBJNDIRMI

Monday, August 17, 2009

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

ProblemaEJB

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çãoBusiness Delegate

JNDI

EJBRMI

EJBRMI

JNDI

Monday, August 17, 2009

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

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

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

Business DelegateEstrutura

Monday, August 17, 2009

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

Business DelegateParticipantes 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 WorkerEstrutura

Monday, August 17, 2009

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

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

- 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

Lato Sensu em Sistemas Orientados a Objetos

Q&AMSc. Alexandre Gomesalegomes@gmail.com

Monday, August 17, 2009