Arquitetura de Referência de Software e Recursos de Java

Propaganda
Arquitetura de Referência de Software
e Recursos de Java do MCTI
Versão 1.3
MCTI
Histórico de Revisão
Versão
1.0
1.1
Data
25/02/2013
20/05/2013
1.2
15/06/2013
1.3
30/09/2013
Descrição
Criação do Documento
Alterações sugeridas pela Fábrica de
Software e Equipe do MCTI
Inclusão da Arquitetura de Recursos do
MCTI
Evoluções sugeridas pelo MCTI
Autor
Yuri Marx Pereira Gomes
Yuri Marx Pereira Gomes
Yuri Marx Pereira Gomes
Yuri Marx Pereira Gomes
Sumário
1 JUSTIFICATIVA
6
2 PROPÓSITO
6
3 ESCOPO
6
4 MODELO ARQUITETURAL 4+1
6
4.1 DESCRIÇÃO
6
5 VISÃO DO NEGÓCIO
7
5.1 DESCRIÇÃO
5.2 DOCUMENTAÇÃO DA VISÃO
7
7
6 VISÃO LÓGICA
7
6.1 DESCRIÇÃO
6.2 DOCUMENTAÇÃO DA VISÃO
6.3 DIAGRAMA DA VISÃO LÓGICA DOS SISTEMAS
6.4 VIEW - INTERFACE VISUAL
6.4.1 DESCRIÇÃO
6.4.2 RESPONSABILIDADES
6.5 CONTROL - CLASSE DE CONTROLE
6.5.1 DESCRIÇÃO
6.5.2 RESPONSABILIDADES
6.6 MODEL – CLASSE DE NEGÓCIO
6.6.1 DESCRIÇÃO
6.6.2 RESPONSABILIDADES
6.7 MODEL – CLASSE DE ENTIDADE
6.7.1 DESCRIÇÃO
6.7.2 RESPONSABILIDADES
6.8 EXEMPLO DE USO DA VISÃO LÓGICA DA ARQUITETURA DE REFERÊNCIA
6.9 TECNOLOGIAS DA VISÃO LÓGICA DA ARQUITETURA DE REFERÊNCIA
6.10 PRODUTOS DA VISÃO LÓGICA DA ARQUITETURA DE REFERÊNCIA
6.11 TECNOLOGIAS E PRODUTOS PARA RELATÓRIOS
6.12 PADRÕES DE PROJETO PARA A VISÃO LÓGICA
6.12.1 PADRÕES BÁSICOS
6.12.2 PADRÕES DE PROJETO PARA CLASSES JAVA DO GOF (GANG OF FOUR)
7
7
8
8
8
8
8
8
9
9
9
9
10
10
10
10
12
13
13
13
13
13
6.12.3 PADRÕES DE PROJETO JEE DO JAVA BLUEPRINTS
15
7 VISÃO FÍSICA
15
7.1 DESCRIÇÃO
7.2 DOCUMENTAÇÃO DA VISÃO
7.3 DIAGRAMA DAS CAMADAS FÍSICAS
7.4 CAMADA CLIENTE
7.4.1 DESCRIÇÃO
7.4.2 RESPONSABILIDADES
7.4.3 DIAGRAMA DA CAMADA CLIENTE
7.5 CAMADA MIDDLEWARE
7.5.1 DESCRIÇÃO
7.5.2 RESPONSABILIDADES
7.5.3 DIAGRAMA DA CAMADA MIDDLEWARE
7.6 CAMADA DE RECURSOS
7.6.1 DESCRIÇÃO
7.6.2 RESPONSABILIDADES
7.6.3 DIAGRAMA DA CAMADA DE RECURSOS
7.7 CAMADA OPERACIONAL
7.7.1 DESCRIÇÃO
7.7.2 RESPONSABILIDADES
7.7.3 DIAGRAMA DA CAMADA OPERACIONAL
7.8 CAMADA DE HARDWARE
7.8.1 DESCRIÇÃO
7.8.2 RESPONSABILIDADES
7.8.3 DIAGRAMA DA CAMADA DE HARDWARE
7.9 EXEMPLO DE USO DAS CAMADAS DA VISÃO LÓGICA DA ARQUITETURA DE REFERÊNCIA
7.10 PRODUTOS VISÃO FÍSICA DA ARQUITETURA DE REFERÊNCIA
15
15
16
16
16
16
16
17
17
17
17
17
17
17
17
18
18
18
18
18
18
19
19
19
20
8 VISÃO DE DESENVOLVIMENTO
20
8.1
8.2
8.3
8.4
8.5
8.6
8.7
8.8
8.9
8.10
20
21
21
21
22
22
23
23
23
24
DESCRIÇÃO
DOCUMENTAÇÃO DA VISÃO
ESTRUTURA DE PROJETOS E ARQUIVOS DA APLICAÇÃO JAVA
PROJETO WEB DA APLICAÇÃO JAVA
CONTEÚDO NÃO JAVA DO PROJETO WEB
PROJETO DE CLASSES E COMPONENTES DA CAMADA DE CONTROLE
PROJETO DE CLASSES E COMPONENTES DA CAMADA DE MODELO
PROJETO DE CLASSES UTILITÁRIAS
PROCESSO DE IMPLANTAÇÃO DE VERSÕES – DEPLOY
PARAMETRIZAÇÃO E CONFIGURAÇÃO DOS SISTEMAS
9 BARRAMENTO DE SERVIÇOS: COMO A ARQUITETURA JAVA SE ENCAIXA NA INICIATIVA SOA DO
MCTI NO PROJETO AQUARIUS
25
9.1
9.2
9.3
9.4
9.5
9.6
9.7
DEFINIÇÃO DE SOA (SERVICE ORIENTED ARCHITECTURE)
UNIDADE BÁSICA DO SOA E OS TIPOS DE SERVIÇO
ABORDAGEM DE DESENVOLVIMENTO DE SERVIÇOS
TECNOLOGIAS PARA O DESENVOLVIMENTO DE SERVIÇOS
BARRAMENTO DE INTEGRAÇÃO
LOCAL DE ARMAZENAMENTO DOS SERVIÇOS
ENTREGA DE SERVIÇOS NA INTRANET E INTERNET
25
25
26
26
26
26
27
10 TESTES DE SISTEMA
27
11 REQUISITOS NÃO FUNCIONAIS
27
11.1
11.2
11.3
11.4
DESCRIÇÃO
CLASSIFICAÇÃO DOS REQUISITOS NÃO FUNCIONAIS
REQUISITOS NÃO FUNCIONAIS NATIVOS DA ARQUITETURA DE REFERÊNCIA
REQUISITOS NÃO FUNCIONAIS DOS SISTEMAS JAVA DA ARQUITETURA
27
28
29
30
12 ARQUITETURA DE RECURSOS DE HOMOLOGAÇÃO E PRODUÇÃO
30
12.1 AMBIENTE DE PRODUÇÃO
12.2 AMBIENTE DE HOMOLOGAÇÃO
30
31
13 REFERÊNCIAS
32
1 Justificativa
É objetivo do MCTI padronizar o desenvolvimento dos seus sistemas corporativos web,
especialmente sistemas de médio e grande tamanho funcional, visando alcançar produtividade,
simplicidade, interoperabilidade, reuso, portabilidade em uma arquitetura aberta. Para isto, a exemplo
de outras instituições da Administração Pública Federal, adotou a linguagem de programação Java em
substituição à linguagem de programação PHP, seguindo a tendência mundial de desenvolver sistemas
corporativos em Java.
Hoje o Java é a linguagem de programação orientada a objetos mais utilizada do mundo (fonte:
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html) . Além disso, conta com um
conjunto de APIs (Application Programming Interface) e frameworks (bibliotecas de uso específico para
abstrair atividades comuns como interação com o banco de dados ou segurança) em grande número,
tornando o desenvolvimento muito mais simples do que em outras linguagens.
2 Propósito
O propósito deste documento é fornecer uma visão geral da arquitetura dos sistemas
desenvolvidos com Java Web corporativos de médio e grande tamanho funcional no MCTI,
especialmente os sistemas corporativos. Para isto são definidas e descritas visões arquiteturais que
detalham diferentes aspectos dos sistemas Java construídos. O intuito é capturar e definir decisões
arquiteturais significantes dos sistemas Java e definir um modelo arquitetural para a arquitetura de cada
projeto Java do MCTI.
3 Escopo
Todos os sistemas construídos com Java devem ter seus documentos de arquitetura
referenciados e restritos a este documento. Sendo assim, neste documento são definidas as visões
arquiteturais, requisitos não funcionais e de qualidade, empacotamento e padrões de projeto que estes
sistemas em Java devem seguir.
Este documento não é a descrição de arquitetura de um sistema em específico, mas o guia para
isto, portanto, ele apenas direciona, restringe e assenta as definições arquiteturais que cada projeto
Java deve realizar. Assim, não encontraremos nele a visão 4+1 concretamente definida, mas requisitará
que o documento de arquitetura de um sistema Java o faça. Também não definirá quais são todos os
padrões de projeto a utilizar, mas indicará os padrões disponíveis para uso e estabelecerá padrões
obrigatórios a seguir para cada visão, pois são fundamentais para o sucesso dos projetos.
4 Modelo Arquitetural 4+1
4.1 Descrição
Esta Arquitetura de Referência utiliza o Modelo Arquitetural 4+1 de Philippe Kruchten para
definir a Arquitetura Java do MCTI. Este modelo “descreve a arquitetura de sistemas de software,
baseado no uso de visões múltiplas e concorrentes”. Estas visões são usadas para descrever o sistema
sob o ponto de vista de diferentes stakeholders, como usuários finais, arquitetos, desenvolvedores e
gerentes de projeto. As 4 visões do modelo são lógica, desenvolvimento, processo e física, que juntas
atendem à visão de negócio representada em casos de uso ou modelos de processos de negócio.
5 Visão do Negócio
5.1 Descrição
Esta visão representa a interação entre usuários e sistema e define as necessidades de uso e
funcionalidades-macro a serem atendidas.
5.2 Documentação da Visão
Todos os documentos de arquitetura de sistemas Java deverão possuir esta visão. Esta seção
deverá listar:

Casos de uso ou Cenários do Modelo de Casos de Uso arquiteturalmente relevantes; ou;

Cenários e Mapa de Processos de Negócio arquiteturalmente relevantes; ou;

Especificações Funcionais de Serviços Candidatos arquiteturalmente relevantes.
Para ser considerado arquiteturalmente relevante, uma descrição do negócio deve exercitar
vários aspectos arquiteturais do sistema e ter abrangência e grande relevância funcional.
6 Visão Lógica
6.1 Descrição
A visão lógica descreve por meio de uso de diagramas de classe, sequencia, e modelo TO-BE de
processos de negócio o projeto lógico do sistema para atender às necessidades do sistema
documentados em documentos de visão, casos de uso, mapas de processo e em quaisquer dos artefatos
da visão de negócio.
6.2 Documentação da Visão
Esta visão deve ser documentada utilizando-se diagramas de classe e sequencia, bem como modelos
entidade e relacionamento e/ou modelos de processo de negócio em nível analítico ou de automação. A
seguir o diagrama de classes básico para uma funcionalidade a ser representada na visão lógica.
6.3 Diagrama da Visão Lógica dos Sistemas
Figura 1 - Padrão de Projeto MVC (Model - View - Controller)
6.4 View - Interface Visual
6.4.1
Descrição
A interface visual (tela) é o elemento da Arquitetura responsável por interagir diretamente com
o usuário final por meio de telas compostas de campos de informação e controles de ação que
executam as operações de negócio sob as informações existentes nos campos de informação conforme
as necessidades do usuário. Existem duas opções de interface visual:


6.4.2




Interfaces Visuais de Negócio: estas interfaces visuais possuem funcionalidades de inclusão,
exclusão, alteração e consulta de dados de dados e informações de negócio.
Interfaces Visuais de Relatório: estas interfaces visuais possuem funcionalidades de
renderização de dados e de informações na forma de relatórios.
Responsabilidades
Receber requisições do usuário.
Realizar validações, formatações e lógica de execução de interface visual.
Delegar para a camada de interface a requisição do usuário.
Renderizar e apresentar no formato de interfaces visuais ou relatórios as respostas da aplicação
ao usuário.
6.5 Control - Classe de Controle
6.5.1
Descrição
A classe de controle é o elemento da Arquitetura que realiza a ligação entre Interface Visual e os
elementos de modelo da aplicação. Também podem determinar a lógica de navegação entre as
interfaces visuais e regras de validação do negócio no lado servidor da aplicação. Sem a classe de
controle, as telas não conseguiriam disparar as operações de negócio e também não conseguiriam
visualizar as informações apresentadas nos campos de informação. Existem dois tipos de classes de
controle:


6.5.2




Classe de Controle de Negócio: intermedia as operações e necessidades de informação para
Interfaces visuais de negócio.
Classe de Controle de Relatório: intermedia as necessidades de informação para interfaces
visuais de relatório.
Responsabilidades
Intermediar requisições e respostas entre as camadas de view e de model.
Receber as requisições da interface visual com os valores digitados na tela para repassar para a
camada de negócio.
Realizar validações de campos e de regras de navegação e de interface visual no lado servidor.
Expor para a interface visual os valores retornados da camada de negócio.
6.6 Model – Classe de Negócio
6.6.1
Descrição
A classe de negócio é o elemento da Arquitetura que contém toda a lógica de negócio para
atender aos requisitos de negócio. Nela estarão as operações de inclusão, alteração, exclusão, consulta,
processamento, cálculos e validações das informações de negócio representadas pelas classes de
entidade. Costumo definir que para cada especificação de caso de uso é definida uma classe de negócio
para atender a este caso de uso. Existem 03 tipos de classes de negócio:



6.6.2



Classe de Negócio síncrona sem estado: encapsula todo o comportamento de negócio de um
caso de uso ou de um conjunto de requisitos funcionais ou necessidades sem guardar as
informações processadas entre uma ou mais chamadas às operações da classe. O consumidor
da classe de negócio sempre que realiza uma chamada à classe de negócio, espera pela resposta
no retorno.
Classe de Negócio síncrona com estado: encapsula todo o comportamento de negócio de um
caso de uso ou de um conjunto de requisitos funcionais ou necessidades armazenando em
memória as informações processadas entre uma ou mais chamadas às operações da classe.
Muito útil para encapsular funcionalidades como carrinho de compras de websites de compras
virtuais, por exemplo. O consumidor da classe de negócio sempre que realiza uma chamada à
classe de negócio, espera pela resposta no retorno.
Classe de Negócio assíncrona: encapsula todo o comportamento de negócio de um caso de uso
ou de um conjunto de requisitos funcionais ou necessidades sem guardar as informações
processadas entre uma ou mais chamadas às operações da classe. O consumidor da classe de
negócio sempre que realiza uma chamada à classe de negócio, não espera pela resposta no
retorno, portanto, é a opção mais performática para o consumidor da classe. Cenários onde se
pode entrar em uma fila de processamento são ideais para este tipo de classe.
Responsabilidades
Executar todo o comportamento de negócio de acordo com as necessidades do usuário.
Executar as regras de negócio definidas.
Executar os comandos de criar, atualizar, consultar, excluir e processar informações de negócio
encapsuladas nas classes de entidade.
6.7 Model – Classe de Entidade
6.7.1
Descrição
Este elemento da Arquitetura é responsável por representar a estrutura de dados do negócio na
forma de classes, por isto é conhecida como classe de entidade. Exemplo, para representar os campos
de informação de um cadastro de pessoas, pode ser criada a classe de entidade Pessoa.
As classes de entidade são visíveis a todas as demais classes da Arquitetura, visto que passa pela
missão de das mesmas ou renderizar as informações de negócio, ou processar as mesmas na camada
web ou na camada de negócio.
A classe de entidade é uma classe Java convencional, uma classe POJO (Plain Old Java Object)
com a lista de campos de informação e operações de get e set para obter ou atribuir valores.
6.7.2



Responsabilidades
Abstrair do desenvolvedor o modelo relacional, de forma que as classes de negócio sejam
totalmente orientadas a objeto.
Mapear o modelo relacional de banco de dados em classes de entidade.
Executar os comandos SQL correspondentes aos comandos orientados a objeto.
6.8 Exemplo de uso da Visão Lógica da Arquitetura de Referência
Vamos tomar como exemplo um caso de uso chamado “Cadastrar Fornecedores”, este caso de
uso possui os seguintes cenários:




Cadastrar Fornecedor
Excluir Fornecedor
Consultar Fornecedor
Imprimir Lista de Fornecedores
O caso de uso também prevê os seguintes campos de informação de fornecedor:







CNPJ
Razão Social
Nome Fantasia
Segmento
Telefone
Endereço
Produtos Comercializados
Dados os cenários e os campos de informação, teríamos o seguinte diagrama de classes da
Arquitetura para atender o caso de uso:
Figura 2 - Exemplo de Projeto de Classes MVC
As classes foram desenhadas desta forma com o seguinte propósito:






CadastroFornecedorUI: é uma classe de visão que irá renderizar a tela HTML para o usuário final
cadastrar, excluir, consultar e imprimir a lista de fornecedores.
CadastroFornecedorControl: é a classe utilizada para receber as requisições disparadas pelo
usuário nos botões de gravar, excluir, consultar ou imprimir e convertê-las em chamadas para as
classes de modelo.
FornecedorService: encapsula todo o negócio referente a Fornecedor nas aplicações, de forma
que quaisquer operações de negócio, como gravar, excluir ou consultar estejam concentradas
em apenas um ponto.
Fornecedor: classe Java que representa os campos de negócio da entidade Fornecedor.
Endereco: é a classe que encapsula dados de endereço nas aplicações, não somente de
endereço de fornecedor, mas também de clientes ou de quaisquer outras entidades que
precisem ter informações de endereço. Como o Fornecedor pode ter apenas 1 endereço, o
relacionamento entre Fornecedor e Endereço é 1 para 1.
Produto: é a classe que encapsula dados de produto nas aplicações, não somente de produto de
fornecedor, mas também de produtos de um pedido ou de uma nota fiscal ou de quaisquer
outras entidades que precisem ter informações de produto. Um Fornecedor pode ter 1 ou mais
produtos, sendo então o relacionamento entre Fornecedor e Produto é 1 para muitos (0..*).
Percebam como é fácil representar toda complexidade de um caso de uso ou especificação
funcional em poucas classes e de forma bem clara. Perceba também que cada tipo de classe tem um
conjunto de responsabilidades bem definido e especializado, facilitando a manutenção, o reuso das
classes e a facilidade no entendimento da solução.
6.9 Tecnologias da Visão Lógica da Arquitetura de Referência
Para cada uma das camadas e elementos da Arquitetura temos tecnologias definidas por JSRs
(Java Specification Request) para atender de forma padronizada, oficial e adequada as necessidades de
desenvolvimento produtivo e fácil. São as tecnologias:
JSR
JSR-314 – JSF
2.0
JSR-220 – EJB
3.0
JSR-317 – JPA
2.0
Elemento da
Arquitetura
Interface Visual e Classe
de Controle
Classe de Negócio
Classe de Modelo
Descrição
Desenvolvimento MVC orientado a componentes de
interfaces visuais em Java, utilizando tags
Desenvolvimento de Classes com serviços de negócio
expostos localmente e/ou remotamente para consumo
por classes cliente
Mapeamento Objeto-Relacional para persistência e
consulta de informações de negócio originárias de bancos
de dados SQL
Estas tecnologias especificaram funcionalidades que os frameworks dos fabricantes devem
possuir para atender aos elementos da Arquitetura, conforme o diagrama a seguir:
JSF 2 - Managed Bean
<<control>>
Classe de Controle
EJB 3
Stateless Session Bean
Stateful Session Bean
Message Driven Bean
<<view>>
Interface Visual
JPA 2 - Classe de Entidade POJO
JSF 2 - Anotações para configuração
<<model>>
Classe de Entidade
<<model>>
Classe de Negócio
Figura 3 - Tecnologias para cada Camada MVC
Este diagrama de classes apresenta como cada tecnologia atende a cada elemento da
Arquitetura, segue a explicação para este diagrama:

Interface Visual – JSF 2.0: a tecnologia de JSF define que os frameworks de desenvolvimento
web devem armazenar em arquivo XML a descrição da aparência, dos campos, dos controles, de
validações e chamadas de ações nas telas. Toda a aparência e estrutura da tela está especificada
em XML padronizado que pode ser estendido com tags específicas de cada implementação de
JSF.



Classe de Controle – JSF 2.0: a tecnologia de JSF define uma classe Java chamada ManagedBean
como uma classe configurada a anotação @ManagedBean existente para lidar com requisições
oriundas das interfaces visuais.
Classe de Negócio – EJB 3.0: a tecnologia EJB define o SessionBean como classe de negócio sem
estado e síncrona, StatefulSessionBean como classe de negócio com estado e
MessageDrivenBean como classe de negócio assíncrona.
Classe de Entidade – JPA 2.0: define classes Java POJO para mapear como será a persistência de
tabelas de banco de dados em classes de entidade que possuem propriedades correspondentes
em suas classes.
6.10 Produtos da Visão Lógica da Arquitetura de Referência
Os JSRs não definem produtos concretos, apenas definem o conjunto de funcionalidades e
regras que os mesmos devem seguir. Assim é necessário ao Arquiteto escolher o produto que
implementa cada uma das especificações. A arquitetura define os seguintes produtos:
JSR
JSR-314 – JSF 2.0
JSR-220 – EJB 3.0
JSR-317 – JPA 2.0
Produto de Implementação
Oracle ADF 11g Release 2.0 ou superior
Container EJB 3.0 ou superior do servidor de aplicação escolhido pela arquitetura
Oracle Toplink Essentials 11g ou superior
6.11 Tecnologias e Produtos para relatórios
Para os relatórios das aplicações são utilizados dois produtos:

IDE de desenvolvimento de relatórios IReport 5.0 ou superior.

Jasperreports 5.0 para renderização em tempo de execução dos relatórios criados no IReport.

Jasperreports Server Community Edition 5.0 ou superior para servidor/repositório central de
relatórios.
6.12 Padrões de Projeto para a Visão Lógica
6.12.1 Padrões Básicos
O padrão de projeto básico para descrever e definir a visão lógica, como se viu acima, é o MVC,
não sendo necessário à primeira vista utilizar GoF ou outros padrões JEE já documentados, no entanto, a
Arquitetura está aberta ao se uso, caso se faça necessário, mas limitados aos padrões a seguir.
6.12.2 Padrões de Projeto para Classes Java do GoF (Gang of Four)
Sempre que necessário o Arquiteto poderá utilizar os seguintes padrões de projeto do GoF,
observadas as implementações já existentes no Java e Java EE:
Padrão de Projeto
Abstract Factory
Tipo
Criacional
Descrição
Criação de famílias de objetos relacionados ou dependentes
por meio de uma única interface e sem que a classe concreta
Builder
Prototype
Singleton
Factory Method
Adapter
Composite
Flyweight
Bridge
Estrutural
Decorator
Proxy
Facade
Chain of
Responsibility
Iterator
State
Command
Mediator
Strategy
Interpreter
Memento
Template Method
Comportamento
seja especificada
Permite a separação da construção de um objeto complexo
da sua representação, de forma que o mesmo processo de
construção possa criar diferentes representações
Permite a criação de objetos a partir de um modelo original,
ou protótipo
Este padrão garante a existência de apenas uma instância de
uma classe
Permite as classes delegar para subclasses decidirem. O
factory method permite delegar a instanciação para as
subclasses
Este padrão é utilizado para 'adaptar' a interface de uma
classe. O Adapter permite que classes com interfaces
incompatíveis possam interagir
Utilizado para representar um objeto que é constituído pela
composição de objetos similares a ele
Apropriado quando vários objetos devem ser manipulados, e
esses não suportam dados adicionais
Utilizado quando é desejável que uma interface (abstração)
possa variar independentemente das suas implementações
Permite adicionar um comportamento a um objeto já
existente em tempo de execução
Um proxy, em sua forma mais geral, é uma classe que
funciona como uma interface para outra classe
Um façade (fachada em francês) ou facade em inglês é um
objeto que disponibiliza uma interface simplificada para uma
das funcionalidades de uma API
Representa um encadeamento de objetos receptores para o
processamento de uma série de solicitações diferentes
é um objeto que permite a um programador examinar um
container percorrendo seus itens
Usado quando o comportamento de um objeto muda,
dependendo do seu estado
Encapsular uma solicitação como um objeto, desta forma
permitindo que clientes parametrizem diferentes
solicitações, enfileirem ou façam o registro (log) de
solicitações e suportem operações que podem ser desfeitas
Desacopla e gerencia as colaborações entre um grupo de
objetos
Permite definir novas operações sem alterar as classes dos
elementos sobre os quais opera
Utilizado para representar e resolver problemas recorrentes
que possam ser expressos sob a forma de uma linguagem
formal simples
Permite armazenar o estado interno de um objeto em um
determinado momento, para que seja possível retorná-lo a
este estado, caso necessário
Auxilia na definição de um algoritmo com partes do mesmo
definidos por Método abstratos. As subclasses devem se
responsabilizar por estas partes abstratas, deste algoritmo,
que serão implementadas, possivelmente de várias formas,
Observer
Visitor
ou seja, cada subclasse irá implementar à sua necessidade e
oferecer um comportamento concreto construindo todo o
algoritmo
Um objeto que possua agregações deve permitir que seus
elementos sejam acessados sem que a sua estrutura interna
seja exposta. De uma maneira geral pode-se desejar que
estes elementos sejam percorridos em várias ordens
É uma solução para separar o algoritmo da estrutura. Uma
das vantagens desse padrão é a habilidade de adicionar
novas operações a uma estrutura já existente
6.12.3 Padrões de Projeto JEE do Java Blueprints
Os padrões de projeto JEE do Java Blueprints documentam padrões de projeto para JSF, Web
Services, EJB e JPA. Os mesmos estão documentados em:

http://www.oracle.com/technetwork/java/index-jsp-136701.html
Os padrões para J2EE não devem mais ser utilizados em hipótese alguma, sendo válido apenas
os padrões para JEE e mesmo assim excepcionalmente, visto que o padrão MVC com os recursos já
existentes nas tecnologias acima apontadas já atendem a 99% dos cenários.
7 Visão Física
7.1 Descrição
A visão física define descreve os componentes de sistemas operacionais, recursos de LDAP,
Banco de Dados e outros recursos corporativos utilizados pelos sistemas, e camadas de processamento
de negócio e dispositivos utilizados pelos usuários do sistema.
7.2 Documentação da Visão
Esta visão deve ser documentada com Diagrama de Implantação nos Documentos de Arquitetura dos
Sistemas, mas respeitando as definições a seguir.
7.3 Diagrama das Camadas Físicas
Camada Cliente
Camada Middleware
Camada de Recursos
Camada Operacional
Camada de Hardware
Figura 4 - Diagrama com o conjunto de camadas físicas da arquitetura
7.4 Camada Cliente
7.4.1
Descrição
É responsável por disponibilizar meios de acesso do usuário a aplicação. Está incluída nesta
categoria navegador web presentes em computadores e dispositivos móveis.
7.4.2


Responsabilidades
Disponibilizar hardware para permitir a interação entre usuário e sistema.
Disponibilizar software para permitir a interação entre o hardware do cliente e os comandos
enviados ao mesmo com a aplicação. Nesta categoria, temos os navegadores web, por exemplo.
7.4.3
Diagrama da Camada Cliente
PC
Dispositivo Móvel
Outros
Navegador Web
Servidores de Aplicação
Hardware Cliente
Software Cliente
Servidores Web
Middleware
Figura 5 - Diagrama dos Componentes da Camada Cliente
7.5 Camada Middleware
7.5.1
Descrição
A camada de middleware englobam produtos de servidores de aplicação, servidores web e
produtos e frameworks instalados nestes servidores para processar a lógica de negócio dos
componentes e aplicações.
7.5.2




Responsabilidades
Receber e responder as requisições da camada cliente.
Hospedar os componentes de negócio.
Fornecer frameworks e infraestrutura para os componentes de negócio.
Interagir com a camada de recursos visando integrações, persistência em banco de dados e
comunicação com recursos corporativos.
7.5.3
Diagrama da Camada Middleware
Serviços
Aplicações
Espaços de Trabalho
Componentes Corporativos
Servidor de Aplicação
Portal
Negócio
Base
Figura 6 – Diagrama dos Componentes da Camada de Middleware
7.6 Camada de Recursos
7.6.1
Descrição
A camada de recursos possui todos os recursos de apoio à operação da camada de negócio. Isto
inclui servidor de banco de dados, de LDAP, dentre outros.
7.6.2



Responsabilidades
Recebe requisições da camada de negócio e as executa.
Disponibiliza os recursos necessários ao negócio.
Persiste o processamento do negócio.
7.6.3
Diagrama da Camada de Recursos
Servidor de Aplicação
Banco de Dados
LDAP
Mensageria
Virtualização
FTP
Middleware
Email
Legados
Sistema Operacional
Recursos
Operacional
Figura 7 - Diagrama dos Componentes da Camada de Recursos
7.7 Camada Operacional
7.7.1
Descrição
A camada operacional provê os serviços de sistema operacional para todos os recursos e
produtos de middleware, veja diretamente ou via virtualização, que a estratégia preferida.
7.7.2


Responsabilidades
Virtualizar os produtos e recursos, visando melhor aproveitamento dos recursos de hardware.
Oferecer um sistema operacional para a camada de recursos e middleware.
7.7.3
Diagrama da Camada Operacional
Software de Virtualização
Sistema Operacional
Hardware
Virtualização
Sistema
Operacional
Hardware
Figura 8 - Diagrama dos Componentes da Camada Operacional
7.8 Camada de Hardware
7.8.1
Descrição
A camada de hardware oferece todos os dispositivos físicos digitais para processamento das
requisições solicitadas pelo sistema operacional.
7.8.2



Responsabilidades
Realizar o processamento das requisições dos sistemas operacionais.
Realizar o armazenamento físico das informações processadas pelo sistema operacional.
Fornecer meios físicos para troca de informações entre as camadas.
7.8.3
Diagrama da Camada de Hardware
Virtualização
Servidores
Sistema Operacional
Dispositivos de Rede
Dispositivos de Armazenamento
Figura 9 - Diagrama de Componentes da Camada de Hardware
7.9 Exemplo de uso das Camadas da Visão Lógica da Arquitetura de
Referência
Vamos tomar, por exemplo, a necessidade não funcional de alta disponibilidade, escalabilidade
e desempenho críticos. Neste caso é necessário montar as camadas físicas em cluster ativo-ativo. Veja o
diagrama de implantação:
Figura 10 - Diagrama UML de Implantação de Exemplo

A camada cliente hospeda o navegador.

Um hardware de balanceamento realiza o balanceamento de carga.

02 servidores físicos diferentes executam diferentes instâncias da aplicação.

Em cada servidor físico temos 02 servidores virtualizados.

A aplicação é instalada em 04 instâncias de servidor, possibilitando atender a maior número de
requisições e com melhor performance, pois a carga é repartida igualmente entre as instâncias.

A alta disponibilidade também é atendida, pois se um das instâncias deixa de responder, o
hardware de balanceamento não envia mais requisições para a instância off-line.

O banco de dados na camada de recursos é acessível de qualquer node.

A camada operacional é Linux e é utilizado virtualização.
7.10 Produtos Visão Física da Arquitetura de Referência
Para cada uma das camadas e elementos da Arquitetura temos produtos definidos para atender
de forma padronizada, oficial e adequada os requisitos não funcionais. São os produtos:
Produto
Navegador
Web com
suporte a
HTML 4 e
HTML 5
Servidor
Glassfish 3.1
ou superior
PostgreSQL 9.2
ou superior
CentOS 4 ou
superior
XEN
Servidores
Redundantes
Intel
Storage
Elemento da
Arquitetura
Camada Cliente
Camada de
Middleware
Camada de
Recursos
Camada
Operacional
Camada
Operacional
Camada de
Hardware
Camada de
Hardware
Modalidade
Descrição
Navegadores de
mercado e
freewares
As aplicações previstas na arquitetura são
web e acessíveis por navegadores que
renderizam HTML 4 e 5
Freeware com
versão de
suporte pago
Freeware com
versão de
suporte pago
Freeware
Servidor de aplicação que suporta JSF 1.2 e
2.0, EJB 3.0 e JPA 2.0
Produto de banco de dados da arquitetura,
suporta SQL ANSI e 99
Freeware
Sistema operacional da arquitetura para
middleware e banco de dados
Software de virtualização da Arquitetura
-
Sugestão de arquitetura de máquina
-
Sugestão de máquina para banco de dados
8 Visão de Desenvolvimento
8.1 Descrição
Esta visão ilustra o sistema do ponto de vista do programador e é voltado para a gestão de
configuração e mudanças, sendo uma visão de implementação.
8.2 Documentação da Visão
Esta visão deve ser documentada na arquitetura de sistemas Java com o diagrama de
componentes e/ou com a árvore de projetos e arquivos da aplicação, mas limitado às definições a seguir
da arquitetura de referência.
8.3 Estrutura de Projetos e Arquivos da Aplicação Java
Estrutura



Figura 11 - Projetos de uma Aplicação
da Arquitetura


Regras da Estrutura
A aplicação deve possuir o nome da sigla do sistema.
O pacote raiz deve ser br.gov.mcti.nomeaplicacao
Dentro da aplicação devemos criar os dois projetos sugeridos
pela IDE, Model e ViewController. O projeto Model irá conter
as classes de negócio e de entidade. O projeto ViewController
as classes de controle e visão.
A aplicação deve utilizar o projeto template do MCTI:
MCTITemplateApp
A aplicação deve utilizar o tema do MCTI na criação das
interfaces visuais.
8.4 Projeto Web da Aplicação Java
Estrutura de Pastas






Figura 12 - Estrutura de Pastas do Projeto Web
de uma Aplicação da Arquitetura

Regras de Formação da Estrutura de Pastas e Arquivos
A pasta raiz para páginas deve estar dentro de Web
Content e se chamar pages.
Abaixo de pages devem ficar as pastas com os nomes de
caso de uso com palavras em minúsculo e separadas por _.
Exemplo: manter_sistema
As páginas do caso de uso devem refletir os cenários do
caso de uso. Caso todos os cenários se concentrem em
uma página apenas, o nome da página será principal.
Para nomear uma página com o nome do cenário escolha o
nome do cenário ou o código do cenário com as palavras
todas em minúsculo e separadas por _.
A pasta raiz para relatórios deve estar dentro de Web
Content e se chamar reports.
Abaixo de reports devem ficar as pastas com os nomes de
caso de uso com palavras em minúsculo e separadas por _.
Exemplo: manter_sistema
Nomeie o relatório com o nome do cenário com as palavras
em minúsculo e separado por _.
8.5 Conteúdo não Java do Projeto Web
Estrutura de Pastas




Regras
Arquivos CSS customizados ficam na pasta CSS na pasta
raiz Web Content.
Os arquivos de imagem são armazenados na pasta images
na pasta raiz Web Content.
Os arquivos de JavaScript são armazenados na pasta js em
Web Content.
Demais arquivos não Java, como arquivos html são
organizados na pasta raiz Web Content, sendo permitido
criar subpastas para organizar este conteúdo.
Figura 13 - Estrutura de Pastas e Arquivos
de Arquivos não Java
8.6 Projeto de Classes e Componentes da Camada de Controle
Estrutura de Pastas
Figura 14 - Estrutura de Pastas das Classes Java
da Camada de Controle
Regras de Formação da Estrutura de Pastas e Arquivos
 O pacote raiz de todos os sistemas que seguem a
arquitetura deve ser br.gov.mcti.
 Embaixo deste pacote deve ser criado o pacote com
a sigla do sistema.view.
 Embaixo do pacote sistema.view devemos colocar o
pacote mbean. Neste pacote devemos ter uma
classe de Managed Bean para cada caso de uso. O
nome da classe deve corresponder ao nome do caso
de uso e seguir as regras padrão de nomenclatura de
classe Java com o pós-fixo Bean.
 No pacote scope deve colocar Managed Beans de
Aplicação e Sessão com o nome do escopo e
terminação Bean.
8.7 Projeto de Classes e Componentes da Camada de Modelo
Estrutura de Pastas
Regras de Formação da Estrutura de Pastas e
Arquivos
 O pacote raiz de todos os sistemas que
seguem a arquitetura deve ser br.gov.mcti.
 Embaixo deste pacote deve ser criado o
pacote com a sigla do sistema.model.
 Embaixo de model existe o pacote entity para
as classes de domínio/entidade e um pacote
service para as classes de negócio.
 As classes de entidade/domínio devem
possuir o nome do tópico de negócio ao qual
se referem e devem seguir a nomenclatura
padrão do Java sem pré ou pós-fixo.
 As classes de negócio devem possuir o nome
do tópico de negócio seguido do pós-fixo
Service. Suas interfaces local e remota devem
possuir as terminações ServiceLocal e
ServiceRemote respectivamente.
 Sempre que houver grande quantidade de
entidades e classes de negócio, é obrigatório
criar pacotes com nomes que correspondam
ao módulo do sistema dentro dos pacotes
entity e model.
Figura 15 - Estrutura de Classes da Camada de Modelo
8.8 Projeto de Classes Utilitárias
Classes utilitárias do sistema devem ser alocadas em projeto do tipo Java chamado Util,
conforme a figura a seguir:
Figura 16 - Projeto Utilitário para Aplicações da Arquitetura
8.9 Processo de Implantação de Versões – Deploy
O processo de implantação pode ocorrer de duas formas:
1) A partir da IDE de Desenvolvimento: após configurar a conexão da IDE Jdeveloper com o
servidor de aplicação, basta comandar a implantação conforme a figura a seguir:
Figura 17 - Procedimento de Implantação de Aplicações da Arquitetura
2) A partir da IDE gerar o arquivo EAR para entrega ao Administrador de Servidor de Aplicação para
implantação a partir da ferramenta de administração do servidor de Aplicação, para isto basta
comandar a geração do arquivo conforme a seguir:
Passo 01
Figura 18 - Menu de Implantação
Passo 02
Figura 19 - Tela de confirmação da implantação
Os gerentes de configuração e mudança estão autorizados a utilizar Maven, ANT e outras
ferramentas de integração contínua para automatizar a geração de versões. Uma vez que o JDeveloper e
a Arquitetura suportam a utilização de disto tudo.
8.10 Parametrização e Configuração dos Sistemas
A parametrização e configuração é preferencialmente realizada em arquivo de properties no
diretório-raiz do código-fonte, conforme a figura a seguir:
Figura 20 - Local do Arquivo de Parametrização da Aplicação
Para carregar os valores do arquivo utilize o seguinte trecho de código-fonte:
Properties prop = new Properties();
try {
//load a properties file from class path, inside static method
prop.load(App.class.getClassLoader().getResourceAsStream("config.properties");));
//get the property value and print it out
System.out.println(prop.getProperty("database"));
System.out.println(prop.getProperty("dbuser"));
System.out.println(prop.getProperty("dbpassword"));
} catch (IOException ex) {
ex.printStackTrace();
}
9 Barramento de Serviços: Como a Arquitetura Java se encaixa na
iniciativa SOA do MCTI no Projeto Aquarius
9.1 Definição de SOA (Service Oriented Architecture)
SOA é uma abordagem arquitetural corporativa que permite a criação de serviços de negócio
interoperáveis que podem facilmente ser reutilizados e compartilhados entre aplicações e empresas.
(Gartner Group).
9.2 Unidade básica do SOA e os tipos de serviço
O Serviço é a unidade básica de SOA, assim como uma classe é a unidade básica do Java. Os
serviços, fisicamente representados, são classes Java utilitárias e de negócio expostas ao mundo externo
geralmente como serviços web visando o reuso corporativo de funcionalidades de negócio
automatizadas nestes serviços.
Estes serviços podem ser classificados como:

Serviços Utilitários: são serviços agnósticos ao negócio e de grande reuso pelos serviços de
negócio para consumir funcionalidades genéricas como serviços de auditoria, segurança
corporativa, gestão documental, LDAP dentre outros serviços conhecidos como utilitários.

Serviços de Entidade: são serviços que expõem as funcionalidades de negócio da Instituição
para consumo corporativo. Frequentemente utilizam serviços utilitários para realizar atividades
complementares como gravar o log das operações ou gravar arquivos no storage.

Serviços de Tarefa: são serviços que compõem vários serviços de negócio para realizar um
cenário de negócio completo. Geralmente o BPEL e o BPM são utilizados para isto.
9.3 Abordagem de Desenvolvimento de Serviços
Existem duas abordagens básicas no desenvolvimento de serviços:

Contract First: as operações e a estrutura de dados dos serviços são desenvolvidos primeiro e
então o esqueleto da classe Java é gerada a partir do WSDL e XSDs escritos. Uma vez gerada a
classe, o desenvolvedor deve marcar a mesma com a anotação @WebService e @Stateless ou
@Stateful para que o serviço também seja um EJB.

Implementation First: as operações e a estrutura de dados do serviço são escritas em Java
utilizando as anotações de JAX-WS. Em tempo de compilação o WSDL e XSDs são gerados. Esta
segunda opção costuma ser desaconselhada pela Arquitetura SOA, mas é uma opção válida para
a arquitetura Java, principalmente para classes Java já existentes e legadas.
9.4 Tecnologias para o Desenvolvimento de Serviços
Existem basicamente duas tecnologias de desenvolvimento de serviços:

Baseado em contratos: no Java são implementados utilizando as anotações de JAX-WS e partem
da geração das classes Java a partir dos contratos (WSDL e XSDs).

REST: serviços baseados nas operações e na tecnologia da especificação HTTP como forma de
oferecer as funcionalidades. Na arquitetura Java as classes para implementar este tipo de
serviço devem ser marcadas com anotações de JAX-RS.
9.5 Barramento de Integração
Projetos de SOA geralmente também utilizam barramentos de serviço por diversos motivos. A
Arquitetura SOA do MCT que deve definir o produto os padrões de barramento de integração. No
entanto, estes produtos de barramento de integração devem suportar o consumo direto de EJBs, não se
limitando somente a WSDL e REST.
9.6 Local de Armazenamento dos Serviços
Estrutura de Pastas
Regras





Os contratos dos serviços são armazenados na pasta raiz
WSDL.
A estrutura de dados dos serviços são armazenados na
pasta schemas.
Podem ser criadas subpastas para organizar
funcionalmente os serviços.
A implementação dos serviços está no próprio código Java
que já possui seu empacotamento definido neste
documento.
É interessante que uma vez implantada a aplicação, os
serviços expostos sejam virtualizados em barramentos de
serviço.
Figura 21 - Local para os Serviços Web
9.7 Entrega de Serviços na Intranet e Internet
A Arquitetura SOA deve definir se serviços devem ou não ser entregues na Internet ou Intranet.
A tecnologia utilizada para cada tipo de serviço também é definida na Arquitetura SOA, mas geralmente
serviços de Intranet são serviços JAX-WS e serviços de Internet JAX-RS (REST).
10 Testes de Sistema
Os testes automatizados na arquitetura utilizam JUnit e o plug-in do JUnit para o JDeveloper. Os
procedimentos para teste se encontram nos artigos a seguir:

https://blogs.oracle.com/bwb/resource/JUnit_Testing/Unit_Testing_with_JUnit_and_JDevelope
r_11g.html

http://www.oracle.com/technetwork/articles/adf/part5-083468.html
Para maior cobertura funcional os testes devem focar nas classes de negócio do sistema, não
sendo necessário criar testes unitários para classes utilitárias, de modelo ou de controle. Outros
procedimentos de qualidade e teste automatizado devem ser definidos nos Planos de Teste e na
Metodologia de Qualidade do MCTI.
11 Requisitos Não Funcionais
11.1 Descrição
São os requisitos relacionados ao uso da aplicação em termos de desempenho, usabilidade,
confiabilidade, segurança, disponibilidade, manutenibilidade e tecnologias envolvidas. Em geral,
requisitos não-funcionais podem constituir restrições aos requisitos funcionais e não é preciso o cliente
dizer sobre eles, pois eles são características mínimas de um software de qualidade.
Os requisitos não funcionais se caracterizam por:

Demonstram qualidade e ou restrições acerca dos serviços ou funções disponibilizadas pelo
sistema. Ex.: restrições de tempo, restrições sobre o processo de desenvolvimento, padrões, etc.

Surgem conforme a necessidade dos usuários, em razão de restrições de orçamento e outros
fatores.

Podem estar relacionados à confiabilidade, tempo de resposta e espaço nas mídias de
armazenamento disponíveis.

Caso ocorra falha do não atendimento a um requisito não funcional, poderá tornar todo o
sistema ineficaz. Ex.: requisito confiabilidade em um sistema de controle de voos.
11.2 Classificação dos Requisitos Não Funcionais
Os requisitos não funcionais mais conhecidos são listados na tabela a seguir, no entanto,
quaisquer requisitos dos stakeholders que não se refiram a usos e necessidades do sistema pelo usuário,
mas sim a SLAs, exigências de comportamento, operação, sustentação e demais situações não
funcionais devem ser descritos na Arquitetura do Sistema e tratadas.

Requisitos de produtos: Requisitos que especificam o comportamento do produto.Ex.
portabilidade; tempo na execução; confiabilidade,mobilidade, etc.

Requisitos da organização: Requisitos decorrentes de políticas e procedimentos corporativos.
Ex. padrões, infra-estrutura,etc.

Requisitos externos: Requisitos decorrentes de fatores externos ao sistema e ao processo de
desenvolvimento. Ex. requisitos de interoperabilidade, legislação,localização geográfica etc.

Requisitos de facilidade de uso. Ex.: usuários deverão operar o sistema após um determinado
tempo de treinamento.

Requisitos de eficiência. Ex.: o sistema deverá processar n requisições por um determinado
tempo.

Requisitos de confiabilidade. Ex.: o sistema deverá ter alta disponibilidade, p.exemplo, 99% do
tempo.

Requisitos de portabilidade. Ex.: o sistema deverá rodar em qualquer plataforma.

Requisitos de entrega. Ex.: um relatório de acompanhamento deverá ser fornecido toda
segunda-feira.

Requisitos de implementação: Ex.: o sistema deverá ser desenvolvido na linguagem Java.

Requisitos de padrões: Ex. uso de programação orientada a objeto sob a plataforma A.

Requisitos de interoperabilidade: Ex. o sistema deverá se comunicar com o SQL Server.

Requisitos éticos. Ex.: o sistema não apresentará aos usuários quaisquer dados de cunho
privativo.

Requisitos legais. Ex.: o sistema deverá atender às normas legais, tais como padrões, leis, etc.

Requisitos de Integração. Ex.: o sistema integra com outra aplicação.
11.3 Requisitos Não Funcionais nativos da Arquitetura de Referência
Os seguintes requisitos não funcionais são atendidos nativamente para os sistemas Java
construídos com esta Arquitetura de Referência:
Requisito Não Funcional
Requisitos de produtos
Requisitos da organização
Requisitos externos
Requisitos de facilidade de
uso
Requisitos de eficiência
Requisitos de
confiabilidade
Requisitos de
portabilidade
Requisitos de entrega
Requisitos de
implementação e Padrão
Requisitos de
interoperabilidade e
integração
Como a Arquitetura Atende
Sistemas portáveis para quaisquer sistemas operacionais e servidores de
banco de dados SQL e de aplicação Java. O tempo de execução das
chamadas varia entre 1 e 15 segundos. Os sistemas podem ser utilizados
em dispositivos móveis e apresentando grande confiabilidade e
disponibilidade, por estar em cluster e ter todo o controle de transações
gerenciado pelo servidor de aplicação.
A Arquitetura segue os requisitos da organização de utilizar elementos
gratuitos, ser portável, produtiva, fácil de utilizar e manter e ser
compatível com BPM, SOA e ECM e segue o processo de desenvolvimento
do MCTI e os padrões de interface visual do Ministério.
A Arquitetura é interoperável, pode atuar em ambientes de internet ou
intranet, totalmente web, não sendo necessário instalar componentes nas
máquinas cliente, passível de integração com outros órgãos
governamentais e privados e suportar e-Ping.
A interface visual dos sistemas que seguem a arquitetura são interfaces
ricas, intuitivas e com suporte a validação e ajuda online.
O tempo de processamento médio de requisições será em torno de 4
segundos, mas pode variar entre 1 e 20 segundos.
A arquitetura está preparada para operar em alta disponibilidade e
suporta crescimento vertical e horizontal de recursos para crescer. Além
disto possui gestão de transações implementado pelo próprio servidor de
aplicações.
Suporta Windows, Linux, Unix, Mac e quaisquer outros sistemas
operacionais suportados pelo Glassfish. Também suporta quaisquer banco
de dados SQL ANSI, tais como PostgreeSQL, MySQL, Oracle, dentre outros.
Por fim, está preparado para operar com qualquer servidor de aplicação
JEE 5 ou superior, além de suportar Internet Explorer 7 ou superior,
Firefox 5 ou superior, Chrome, Safari e navegadores do Android e iOS, no
entanto é melhor visualizado com navegadores que suportem HTML 5.
São definidos nos Plano de Projeto, mas os sistemas projetados na
arquitetura possuem produtividade (com o uso completo da metodologia)
de 8 horas por ponto de função.
Os sistemas Java devem se restringir às definições arquiteturais deste
documento.
Os sistemas Java desta Arquitetura suportam comunicação via EJB remoto,
JMS e Web Services REST ou SOAP
11.4 Requisitos Não Funcionais dos Sistemas Java da Arquitetura
Os sistemas Java possuem seus próprios requisitos não funcionais que devem ser documentados
no Documento de Arquitetura do Sistema ou em Documento de Especificação Suplementar. Os
requisitos acima descritos apenas reportam quais requisitos não funcionais já são atendidos
automaticamente ao se adotar a Arquitetura de Referência corretamente e integralmente.
12 Arquitetura de Recursos de Homologação e Produção
12.1 Ambiente de Produção
Figura 22 - Topologia do Ambiente de Produção
O ambiente de produção possui balanceador de carga para distribuir as requisições de usuário
oriundas de estações de trabalho, notebooks e aparelhos portáteis na Internet e Intranet do MCTI. Este
balanceador de carga utiliza o mod_proxy do Apache Server que distribui a carga igualmente entre os
servidores virtuais (VM 01 e VM 02).
Ao receber as requisições do balanceador as VMs com 04 cores, 16 GB de RAM e 300 GB de HD
com CentOS como sistema operacional e Glassfish como servidor de aplicações, acessam o banco de
dados PostGreeSQL (ainda não clusterizados com PG_Pool) e montam o retorno. Balanceador envia o
retorno para o navegador do usuário para apresentar a resposta à requisição.
A Arquitetura suporta o crescimento vertical e horizontal desta topologia, podendo crescer a
quantidade de núcleos de processamento, memória e HD ou aumentar a quantidade de VMs, conforme
o crescimento das requisições.
No futuro, se prevê a clusterização também do banco de dados com PG_Pool.
12.2 Ambiente de Homologação
Figura 23 - Topologia do Ambiente de Homologação
O ambiente de homologação é mais simples do que o de produção, pois não possui balanceador
de carga, tem apenas uma VM que requisições de usuário oriundas de estações de trabalho, notebooks
e aparelhos portáteis na Internet e Intranet do MCTI.
Ao receber as requisições a VM de homologação com 04 cores, 16 GB de RAM e 300 GB de HD
com CentOS como sistema operacional e Glassfish como servidor de aplicações, acessam o banco de
dados PostGreeSQL e monta o retorno, enviando o mesmo para o navegador do usuário para apresentar
a resposta à requisição.
13 Referências
KRUCHTEN, Philippe. Architectural Blueprints — The “4+1” View Model of Software Architecture. IEEE
Software. 1995.
GAMMA Erich; HELM, Richard; JOHNSON, Ralph; VLISSIDES, John. Design Patterns: Elements of
Reusable Object-Oriented Software. 1 ed. Estados Unidos: Addison-Wesley, 1995.
LARMAN, Craig. Utilizando UML e Padrões. 3ª Edição. Estados Unidos: Bookman, 2007.
CRUPI, John; MALKS, Dan; ALUR, Deepak. Core J2EE Patterns. Estados Unidos: Campus, 2004.
MASSOL, Vincent; HUSTED Ted. JUnit em ação. Brasil: Ciência Moderna, 2005.
MILLS Duncan; KOLETZKE, Peter, ROY-FADERMAN, Avrom. Oracle JDeveloper 11g Handbook : A Guide
to Fusion Web Development. Estados Unidos: McGraw Hill Professional, 2009.
ERL, Thomas. Principles of the Service Design. Canadá: Editora Prentice Hall, 2010.
TIOBE. Ranking das Linguagens de Programação. 2013. Disponível em:
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html. Acesso em 31/10/2013.
Download