Descrição da
Arquitetura
Este documento contém a descrição da arquitetura utilizada na construção
do sistema Magazine Virtual.
Funcionalidades / Use Cases
A arquitetura criada está atendendo aos seguintes use cases:
Requerimentos não funcionais
A arquitetura criada visa atender aos seguintes requisitos não
funcionais (constantes no Documento de Visão):
Descrição curta da arquitetura
A solução baseia-se na especificação J2EE e na utilização de RDBMS para
armazenamento dos dados.
A interface com usuário é através de páginas web geradas dinamicamente,
porém a arquitetura suporta a implementação de diferentes interfaces com
usuário para utilização do sistema. A camada de negócio é composta por EJBs do
tipo session bean e entity bean.
Diagrama da arquitetura
Camadas
1.
Camada de
apresentação
Na camada de apresentação foi utilizado Framework Struts. O Struts foi
criado pelo projeto Jakarta, para facilitar a implementação dos padrões da
camada de apresentação em aplicações JSP.
Este framework oferece:
2.
Camada de
controle
Na camada de controle utilizamos Statelles Session Beans. Os Session
Beans ficaram responsáveis pelo controle das transações e foram implementados
usando o padrão facade.
3.
Camada de negócio
Na camada de negócio, encontram-se as entidades do sistema que estão
implementadas através de EJB Entities do tipo CMP (persistência gerenciada pelo
container). Conseqüentemente, as transações são CMT (transação gerenciada pelo
container).
Como esta solução segue a especificação 2.0 do EJB, é possível configurar
não só a persistência de forma descritiva, mas também o relacionamento entre as
entidades e as queries de busca através de EJB-QL.
Nota: Queries não suportadas por EJB-QL podem ser escritas em Jboss QL.
Estes entidades são acessados por interfaces
locais, em vez de interfaces remotas, para que haja aumento de performance, uma
vez que as chamadas locais são mais rápidas que as remotas. Também para que os
relacionamentos entre entities possam ser administrados pelo container, o que
exige acesso local. A comunicação com clientes remotos é feita através dos
sessions que possuem a interface apropriada.
A especificação 2.0
do EJB não especifica o conceito de herança de componentes. Então, para a
implementação da hierarquia presente no modelo, foram usados mecanismos de
herança de interfaces e classes da linguagem Java, sem utilizar nenhum serviço
específico do EJB Container.
Da forma representada abaixo, ou seja, a interface da classe filha
herdando da interface da classe pai, pode-se utilizar o componente
PagamentoBoleto como se fosse um Pagamento. As implementações dos métodos de
negócio de Pagamento também podem ser aproveitadas pelo PagamentoBoleto,
havendo override se necessário. As interfaces home não foram estendidas,
deixando que cada componente tenha os seus próprios métodos de criação e
recuperação.
O override dos métodos gets e sets dos atributos de Pagamento, em
PagamentoBoleto, é necessário porque optou-se por criar uma tabela apenas com
os campos da classe pai e uma tabela para cada classe filha com seus
respectivos atributos. Desta forma, não é possível deixar que o bean
PagamentoBoleto herde a abstração dos gets e sets de Pagamento, porque, assim,
o container consideraria que a tabela PagamentoBoleto teria também os campos da
tabela Pagamento. A implementação destes métodos em PagamentoBoleto faz uso do
relacionamento entre os dois entities, pai e filho.
Padrões Utilizados
§
Centralizar o processamento de requisições em
uma única fachada. Front Controller permite criar uma interface genérica para
processamento de comandos.
§
Criar um componente de View a partir de Views
menores para dividir as responsabilidades, simplificar a construção da
interface e permitir o reuso de componentes da View.
§
Separar código e responsabilidades de
formatação da interface do usuário do processamento de dados necessários à
construção da View. Tipicamente implementados como JavaBeans e Custom Tags.
§
Combinar padrões de apresentação e encapsular
lógica de navegação, que consiste em escolher uma View e despachar a requisição para ela. Service To
Worker realiza mais processamento antes de despachar a requisição.
§
Simplificar a interface do cliente de
enterprise beans e controlar o acesso e a comunicação entre entity beans.
Session Façade representa uma função ou várias funções exercidas por um
sistema.
§
Isolar dos clientes de serviços de localização
de recursos (JNDI) a lógica e informações relacionadas ao serviço oferecendo
uma interface neutra. Service locator pode ser usado para abstrair todo uso de
JNDI e ocultar as complexidades da criação de objetos.
§
"Garantir que uma classe só tenha uma
única instância, e prover um ponto de acesso global a ela." [GoF]
§
"Definir uma interface para criar um
objeto mas deixar que subclasses decidam que classe instanciar. Factory Method
permite que uma classe delegue a responsabilidade de instanciamento às
subclasses." [GoF]
§
Reduzir a quantidade de requisições necessárias
para recuperar um objeto. Value Object permite encapsular em um objeto um
subconjunto de dados utilizável pelo cliente e utilizar apenas uma requisição
para transferi-lo.
Os testes do sistema Magazine Virtual foram feitos em ambiente windows
mas o sistema poderia ser usado em qualquer ambiente. Como infra-estrutura para
os testes utilizamos os seguintes softwares:
J2EE – http://java.sun.com/j2ee/
EJB – http://java.sun.com/products/ejb/
JBOSS – Application Server http://www.jboss.org/
MySQL – RDBMS http://www.mysql.com/
The Server Side – Padrões http://www.theserverside.com/patterns/index.jsp
Struts – http://jakarta.apache.org/struts