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