View
4.154
Download
0
Embed Size (px)
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 [email protected]
Monday, August 17, 2009