Padrões do Catálogo J2EE

Propaganda
Padrões do Catálogo J2EE
Lincoln Souza Rocha, M.Sc.
([email protected])

Livros
 Deepak Alur, John Crupi e Dan Malks. Core J2EE
Patters: Best Practices and Design Strategies,
Second Edition (2003). Ed. Prentice Hall PTR
 Bill Dudney, Stephen Asbury, Joseph K. Krozak e
Kevin Wittkopf. J2EE AntiPatterns (2003). Ed.
Wiley Publishing
2

Sites Web
 The J2EE 1.4 Tutorial (http://java.sun.com/j2ee/1
.4/download.html#tutorial)
 Argo Navis – Curso de Padrões de Design J2EE
(J931) (www.argonavis.com)
▪ OBS: Os slides do curso J931 de Helder L. S da Rocha
foram utilizados na confecção desse material
3
Parte I
4
O que é J2EE?
 Arquitetura e Componentes J2EE
 Containers J2EE

5
Acrônimo de Java 2 Enterprise Edition
 Uma plataforma da Sun Microsystems para
desenvolvimento de aplicações empresariais
distribuídas e multicamada
 É fundamentada no Java 2 Standard Edition
(J2SE)

6

Visão Geral
7

Camada Cliente
 Clientes Web (thin client)
▪ (1) Web Pages Dinâmicas: que são geradas por
componentes que executam na camada web
▪ (2) Web Browser: que exibem as páginas recebidas do
servidor
▪ Usualmente não fazem consultas à banco de dados, não
executam regras de negócios complexas ou se
conectam à aplicações legadas
8

Camada Cliente (cont.)
 Applets
▪ É uma pequena aplicação Java que executa na JVM
instalada no Web Browser
▪ Contudo, sistemas clientes provavelmente irão precisar
do Java Plugin e, possivelmente, de um arquivo de
política de segurança para poder executar o applet no
Web Browser
9

Camada Cliente (cont.)
 Aplicações Clientes (application clients)
▪ Executam na máquina cliente provendo um interface
para que os usuários executem suas tarefas
remotamente (rich client)
▪ Tipicamente possuem interfaces gráficas (GUI) feitas em
Swing ou Abstract Window Toolkit (AWT) API, mas
interfaces via linha de comando também são possíveis
10

Servidor J2EE
11

Servidor J2EE - Camada Web
12

Servidor J2EE - Camada Web (cont.)
 Os componentes web são criados usando a
tecnologia JSP (Java Server Pages)
▪ Servlets são classes criadas programaticamente e que
dinamicamente processam requisições e constrem uma
resposta
▪ Páginas JSP são documentos text-based que executam
como servlets mas com uma abordagem mais natural
para criar conteúdo estático
13

Servidor J2EE - Camada de Negócio
14

Servidor J2EE - Camada de Negócio (cont.)
 A camada de negócio é responsável por
implementar, via enterprise beans, a lógica de
negócio da aplicação referente à um domínio de
negócio particular (e.g., bancário, varejo e
Financeiro)
 Existem três tipos de Enterprise Beans
▪ Session Beans, Entity Beans e Message-driven Beans
15

Servidor J2EE - Camada de Negócio (cont.)
 Session Beans: representam a comunicação
transiente com o cliente. Quando o cliente finaliza
a execução, o session bean e seus dados também
são removidos da memória
16

Servidor J2EE - Camada de Negócio (cont.)
 Entity Beans: representam os dados persistentes
armazenados em uma tabela do banco de dados.
Se o cliente terminar a comunicação ou se o
servido for reiniciado o servidor garante que os
dados do entity bean é salvo
17

Servidor J2EE - Camada de Negócio (cont.)
 Menssage-driven Beans: combina características
de session beans e Java Message Service (JMS)
message listener, o que permite que este receba
mensagens JMS assincronamente
18

Camada de Sistema de Informação (EIS)
 O EIS representa a parte de software e hardware
da empresa e inclui sistema de infra estrutura,
servidor de processamento de transações , banco
de dados e sistemas de informação legados
19

Containers: O que são e para que servem?
 São a interface entre os componentes J2EE e as
funcionalidades de baixo nível da plataforma especifica
que suporta o componente
 Funcionam como um middleware abstraindo a arquitetura
de hardware e software subjacente
 A rigor existem quatro tipos de containers J2EE:
▪ Web container, EJB container, Application client container e Applet
container
20

Tipos de Container J2EE
21

Tipos de Container J2EE (cont.)
 Web container
▪ Gerencia a execução de páginas JSP e servlets de
aplicações J2EE. Web containers executam dentro do
servidor J2EE
 EJB container
▪ Gerencia a execução de enterprise beans de aplicações
J2EE. EJB containers executam dentro do servidor J2EE
22

Tipos de Container J2EE (cont.)
 Application client container
▪ Gerencia a execução de componentes da aplicação
cliente. Tanto a aplicação como o container executam
na máquina cliente
 Applet container
▪ Gerencia a execução de applets. É formado basicamente
por um Web Browser e o Java Plugin que executam
juntos na máquina cliente
23
Parte II
24

Procedimentos recomendados para
desenvolver aplicações J2EE. Divide as
aplicações em camadas
 Camada cliente: interface do usuário ou de
serviços. Tipicamente representa uma aplicação
independente ou browser rodando applets ou
páginas HTML
 Camada Web: consiste de servlets e páginas JSP
com o objetivo de capturar requisições e
processar respostas para a camada cliente
25
 Camada EJB: contém toda a lógica da aplicação e
representa o modelo de negócio implementado
em EJBs
 Camada de integração: contém lógica de acesso
ao EIS
 Camada de dados (EIS): consiste de sistemas de
bancos de dados, transações e outros recursos
legados
26

Soluções de design baseadas no J2EE
Blueprints
 Representam soluções consideradas melhores
práticas para implementar vários componentes
essenciais em cada uma das camadas
identificadas pelo J2EE Blueprints
 Usam e se baseiam em vários padrões GoF
27

São padrões de design e não de
implementação (idioms)
 Podem ser implementados usando tecnologias
diferentes (e.g., usando RMI ou CORBA)

Objetivos
 Reduzir o tráfego de rede, aumentando a
eficiência e facilitando a escalabilidade
 Reduzir o acoplamento entre as camadas e os
componentes
28

Não existe um só catálogo de padrões
 Este curso se baseia no catálogo do Sun Java
Center (SJC), cujos padrões estão documentados
no site da Sun e em livros como “Core J2EE
Patterns: Best Practices and Design Strategies”
 Os SJC J2EE Patterns são divididos em camadas
lógicas que refletem a organização dos J2EE
Blueprints
29

O catálogo atual (setembro/2003) define 21
padrões
 Camada de apresentação: 8 padrões
 Camada de negócios: 9 padrões
 Camada de integração: 4 padrões

Os nomes dos padrões são significativos
30
Padrões refletem soluções para problemas
genéricos descritos em abstrações de alto
nível
 Estratégias mostram formas de implementar
os padrões usando tecnologias e linguagens
de programação específicas

31
Um padrão geralmente possui diversas
diferentes estratégias de implementação
 Neste curso serão apresentados os padrões e
suas principais estratégias recomendadas
pelo SJC

32


Intercepting Filter
 Viabiliza pré- e pós-processamento de requisições
Front Controller
 Oferece um controlador centralizado para gerenciar o

processamento de uma requisição
Context Object
 Encapsula estado de forma independente de

protocolo para compartilhamento pela aplicação
Application Controller
 Centraliza e modulariza o gerenciamento de Views e
de ações
33


View Helper
 Encapsula lógica não-relacionada à formatação
Composite View
 Cria uma View composta de componentes

menores
Service To Worker e Dispatcher View
 Combinam Front Controller com um Dispatcher e
Helpers. O primeiro concentra mais tarefas antes
de despachar a requisição. O segundo realiza mais
processamento depois
34

Business Delegate
 Desacopla camadas de apresentação e de serviços

Service Locator
 Encapsula lógica de consulta e criação de objetos
de serviço

Session Facade
 Oculta complexidade de objetos de negócio e
centraliza controle
35

Application Service
 Centraliza e agrega comportamento para oferecer
uma camada de serviços uniforme

Business Object
 Separa dados de negócios e lógica usando modelo

de objetos
Composite Entity
 Implementa Business Objects persistentes
combinando Entity beans locais e POJOs (Plain
Old Java Objects)
36

Transfer Object
 Antigamente chamado de Value Object ou DTO
 Reduz tráfego e facilita transferência de dados entre

camadas
Transfer Object Assembler
 Antigamente chamado de Value Object Assembler
 Constrói um Value Object composto de múltiplas

fontes
Value List Handler
 Lida com execução de queries, caching de resultados,
etc.
37

Data Access Object
 Abstrai fontes de dados e oferece acesso transparente

aos dados
Service Activator
 Facilita o processamento assíncrono para

componentes EJB
Domain Store
 Oferece um mecanismo transparente de persistência

para objetos de negócio
Web Service Broker
 Expõe um ou mais serviços usando XML e protocolos
Web
38
39



Procure no catálogo um padrão que realize o
objetivo desejado
 Tabela de padrões
 Roadmap
Roadmap associa intenção com padrões
 "Se você procura por isto... use os padrões tais"
Consulte o padrão desejado e analise
 Analise o problema que ele resolve
 Analise a solução que ele propõe
 Escolha uma estratégia e implemente
40

Padrões se encaixam bem quando é
necessário alterar uma arquitetura para
melhorar algum aspecto de um sistema
 Performance
 Escalabilidade
 Reuso e manutenção

A maior parte dos padrões foram construídos
visando esse tipo de evolução
41
Parte III
42
Introdução
 Front Controller

43


A camada de apresentação encapsula toda a
lógica relacionada com a visualização e
comunicação com a GUI
 Requisições e respostas HTTP
 Gerenciamento de sessão HTTP
 Geração de HTML, JavaScript e recursos lado-cliente
Principais componentes: Servlets e JSP
 JSP é indicado para produzir interface do usuário
 Servlets são indicados para processar dados recebidos
e concentrar lógica de controle
44
45

Objetivo
 Centralizar o processamento de requisições em
uma única fachada. Front Controller permite criar
uma interface genérica para processamento de
comandos
46

Problema
47

Descrição do problema
 Deseja-se um ponto de acesso centralizado para
processamento de todas as requisições recebidas
pela camada de apresentação para
▪ Controlar a navegação entre os Views
▪ Remover duplicação de código
▪ Estabelecer responsabilidades mais definidas para cada
objeto, facilitando manutenção e extensão: JSP não
deve conter código algum ou pelo menos não código de
controle
48

Descrição do problema (cont.)
 Se um usuário acessa um View sem passar por um
mecanismo centralizado, código de controle é
duplicado e misturado ao código de apresentação
▪ Também não é possível controlar a navegação: cliente
pode iniciar em página que não deveria ter acesso
49

O que se deseja? (Forças)
 Evitar a duplicação de lógica de controle
 Aplicar lógica comum para múltiplas requisições
 Separar a lógica de processamento do sistema da
View
 Centralizar o controle de pontos de acesso do
sistema
50

Solução
51

Descrição da solução
 Controlador é ponto de acesso para
processamento de requisições
▪ Chama serviços de segurança (autenticação e
autorização)
▪ Delega processamento à camadas de negócio
▪ Define um View apropriado
▪ Realiza tratamento de erros
▪ Define estratégias de geração de conteúdo
52

Descrição da solução (cont.)
 O controlador pode delegar processamento a
objetos Helper (Comandos ou ações, Value Beans,
etc.)
 Solução depende do uso de um Application
Controller
▪ Usado para redirecionar para o View correspondente
53

Processamento de uma requisição
 Envolve dois tipos de atividades
▪ Manuseio da requisição
▪ Processamento do View
 Durante o manuseio da requisição, é preciso
realizar diversas atividades:
▪
▪
▪
▪
Manuseio de protocolo e transformação de contexto
Navegação e roteamento
Processamento do serviço
Repasse da requisição
54

Diagrama de classes
FrontController: ponto de entrada para manuseio de requisições
ApplicationController: gerencia de ações e views
Command: encapsula uma ação específica para requisição
View: representa a página retornada ao cliente
55
56

Estratégias de implementação
 Servlet Front Strategy
▪ Implementa o controlador como um servlet
 Command and Controller Strategy
▪ Interface baseada no padrão Command (GoF) para
implementar Helpers para os quais o controlador delega
responsabilidades via Application Controller
▪ Esta é a estratégia mais comum
 Logical Resource Mapping Strategy
▪ Requisições são feitas para nomes que são mapeados a
recursos (páginas JSP, servlets) ou comandos (web.xml)
▪ Multiplexed Resource Mapping Strategy usa wildcards para
selecionar recursos a serem processados: *.do
57

Conseqüências
 Controle centralizado
▪ Facilidade de rastrear e logar requisições
 Melhor gerenciamento de segurança
▪ Requer menos recursos. Não é preciso distribuir pontos
de verificação em todas as páginas
▪ Validação é simplificada
 Melhor possibilidade de reuso
▪ Distribui melhor as responsabilidades
58

Padrões relacionados
 J2EE Patterns
▪ Intercepting Filter
▪ Application Controller
▪ View Helper
▪ Dispatcher View and Service to Worker
59
Parte IV
60


Introdução
Transfer Object
61

A camada de negócios encapsula a lógica
central da aplicação. Considerações de
design incluem
 Uso de session beans para modelar ações.
Stateless para operações de um único método.
Stateful para operações que requerem mais de um
método (que retém estado entre chamadas)
 Uso de session beans como fachadas à camada de
negócios
62
 Uso de entity beans para modelar dados
persistentes como objetos distribuídos
 Uso de entity beans para implementar lógica de
negócio e relacionamentos
 Eventos e operações assíncronas com messagedriven beans
 Cache de referências para EJBs em Business
Delegates
63
64

Objetivo
 Reduzir a quantidade de requisições necessárias
para recuperar um objeto. Transfer Object
permite encapsular em um objeto um
subconjunto de dados utilizável pelo cliente e
utilizar apenas uma requisição para transferi-lo
65

Problema
66

Descrição do problema
 Cliente precisa obter diversos dados de um
Business Object
 Para obter os dados, é preciso realizar diversas
chamadas ao componente
▪ As chamadas são potencialmente remotas
▪ Fazer múltiplas chamadas através da rede gera tráfego e
reduz o desempenho da aplicação
67

Solução
68

Descrição da solução
 Uma única chamada remota é necessária para
transferir o Transfer Object
▪ O cliente pode extrair as informações de interesse através de
chamadas locais
 Cópia do cliente pode ficar desatualizada
▪ Transfer Object é solução indicada para dados read-only ou
informações que não são alteradas com freqüência, ou ainda,
quando as alterações não são críticas (não afetam o processo)
 Objeto alterado pode ser enviado de volta ao servidor
69

Diagrama de classes
Client: geralmente um componente de outra camada.
Component: qualquer componente de outra camada que o cliente usa para enviar e
receber dados.
TransferObject: é um POJO (Plain Old Java Object) serializável que contém atributos
suficientes para agregar e carregar todos os dados
70
71

Estratégias de implementação
 Updatable Transfer Objects Strategy
▪ Permite a transferência de um objeto para o cliente, a
alteração do objeto pelo cliente e sua devolução ao
servidor
 Multiple Transfer Objects Strategy
▪ Permite a criação de Transfer Objects diferentes a partir
de uma mesma fonte
72

Estratégias de implementação (cont.)
 Entity Inherits Transfer Object Strategy
▪ Entity Bean herda de uma classe de Transfer Object
 Transfer Object Factory Strategy
▪ Suporta a criação dinâmica de Transfer Objects
73

Conseqüências
 Simplifica Entity Bean e interface remota
 Transfere mais dados em menos chamadas
 Reduz tráfego de rede
 Reduz duplicação de código
 Pode introduzir objetos obsoletos
 Pode aumentar a complexidade do sistema
▪ Sincronização
▪ Controle de versões para objetos serializados
74

Padrões relacionados
 J2EE Patterns
▪ Session Facade
▪ Transfer Object Assembler
▪ Value List Handler
▪ Composite Entity
75
Parte V
76
Introdução
 Data Access Object

77

A camada de integração encapsula a lógica
relacionada com a integração do sistema com
a camada de informação distribuída (EIS)

É acoplada com a camada de negócios
sempre que esta camada precisar de dados
ou serviços que residem na camada de
recursos (dados)
78

Os componentes nesta camada podem usar
tecnologias de acesso aos serviços
específicos que isolam (JDBC, JMS,
middleware proprietário, etc.)
79
80

Objetivo
 Abstrair e encapsular todo o acesso a uma fonte
de dados. O DAO gerencia a conexão com a fonte
de dados para obter e armazenar os dados
81

Problema
82

Descrição do problema
 Forma de acesso aos dados varia
consideravelmente dependendo da fonte de
dados usado
▪ Banco de dados relacional
▪ Arquivos (XML, CSV, texto, formatos proprietários)
▪ LDAP
83

Descrição do problema (cont.)
 Persistência de objetos depende de integração
com fonte de dados (ex: business objects)
▪ Colocar código de persistência (ex: JDBC) diretamente
no código do objeto que o utiliza ou do cliente amarra o
código desnecessariamente à forma de implementação
▪ Ex: difícil passar a persistir objetos em XML, LDAP, etc.
84

Solução
85

Descrição da solução
 Data Access Object (DAO) oferece uma interface
comum de acesso a dados e esconde as
características de uma implementação específica
▪ Uma API: métodos genéricos para ler e gravar
informação
▪ Métodos genéricos para concentrar operações mais
comuns(simplificar a interface de acesso)
86

Descrição da solução (cont.)
 DAO define uma interface que pode ser
implementada para cada nova fonte de dados
usada, viabilizando a substituição de uma
implementação por outra
 DAOs não mantêm estado nem cache de dados
87

Diagrama de classes
Client: objeto que requer acesso a dados: Business Object, Session Façade, Application Service,
Value List Handler, ...
DataAccessObject: esconde detalhes da fonte de dados
DataSource: implementação da fonte de dados
Data: objeto de transferência usado para retornar dados ao cliente. Poderia também ser usado para
receber dados.
ResultSet: resuldados de uma pesquisa no banco
88
89

Estratégias de implementação
 Custom DAO Strategy
▪ Estratégia básica. Oferece métodos para criar, apagar,
atualizar e pesquisar dados em um banco
▪ Pode usar Transfer Object para trocar dados com
clientes
90

Estratégias de implementação (cont.)
 DAO Factory Method Strategy
▪ Utiliza Factory Methods em uma classe para recuperar
todos os DAOs da aplicação
 DAO Abstract Factory Strategy
▪ Permite criar diversas implementações de fábricas
diferentes que criam DAOs para diferentes fontes de
dados
91

Conseqüências
 Transparência quanto à fonte de dados
 Facilita migração para outras implementações
▪ Basta implementar um DAO com mesma interface
 Reduz complexidade do código nos objetos de
negócio (ex: Entity Beans BMP)
92

Conseqüências (cont.)
 Centraliza todo acesso aos dados em camada
separada
▪ Qualquer componente pode usar os dados (servlets,
EJBs)
 Camada adicional
▪ Pode ter pequeno impacto na performance
 Requer design de hierarquia de classes (Factory)
93

Padrões relacionados
 J2EE Patterns
▪ Transfer Object
▪ Transfer Object Assembler
▪ Value List Handler
 GoF
▪ Factory Method
 POSA - 1
▪ Broker
94
Padrões do Catálogo J2EE
Lincoln Souza Rocha, M.Sc.
([email protected])
Download