ARQUITETURA DE SISTEMAS WEB EM CAMADAS UTILIZANDO

Propaganda
ARQUITETURA DE SISTEMAS WEB EM CAMADAS UTILIZANDO AS
TECNOLOGIAS JSF E EJB3.1
Ismael Härter Dewes¹, Luiz Camargo²
Resumo: O presente artigo visa contribuir com o desenvolvimento de sistemas de software em Java
voltados para Web, tendo como objetivo apresentar uma arquitetura de sistemas Web em camadas,
utilizando as tecnologias JSF (Java Server Faces) e EJB 3.1 (Enterprise Java Beans), ressaltando
vantagens quanto à utilização do mesmo, bem como uma análise de aplicabilidade.
Palavras chave: Arquitetura. JSF. EJB.
Abstract: This article aims to contribute to the development of software systems in Java Web
oriented, aiming to present an architecture of web systems in layers, using JSF (Java Server Faces)
and EJB 3.1 (Enterprise Java Beans) technologies, highlighting advantages as to its use, as well a
analyze a form of applicability.
Keywords: Architecture. JSF. EJB.
1
INTRODUÇÃO
Uma arquitetura bem elaborada auxilia no gerenciamento de complexibilidade do software
trazendo diversos benefícios como: redução de tempo e custo de desenvolvimento e na
manutenibilidade do mesmo, além de facilitar a combinação de abordagens e reutilização de código
(Padrões de Projeto e Orientação a Objetos), estando diretamente relacionado a atributos de
qualidade, enfatizando-se os requisitos não funcionais, relacionados à segurança, desempenho entre
outros. A arquitetura está diretamente ligada ao sucesso de um sistema e conduz à evolução do
software.
“A arquitetura de um software consiste na definição de seus componentes, as propriedades
externamente visíveis destes elementos e os relacionamentos entre eles, enfatizando a separação dos
interesses.” (BASS, 2003).
O presente artigo tem como objetivo apresentar uma arquitetura de sistemas web em camadas,
utilizando as tecnologias JSF (Java Server Faces) e EJB3.1 (Enterprise JavaBeans), mostrando
vantagens, bem como exemplificar uma forma de aplicabilidade. Um dos motivos que levaram ao
desenvolvimento deste trabalho foi entender e definir uma arquitetura a ser utilizada em aplicações
para web com Java e quais tecnologias e frameworks que poderiam ser usados para este fim.
Este artigo está organizado da seguinte maneira: na seção 2 é apresentada uma breve descrição
sobre Engenharia de Software; na seção 3 é feita uma descrição sobre arquitetura em camadas; na
seção 4 é apresentado o padrão MVC; na seção 5 é apresentado o framework JSF, sua arquitetura e
ciclo de vida; na seção 6 é descrito sobre o Enterprise Java Beans 3.1 e algumas vantagens quanto
ao uso do mesmo; na seção 7 é apresentado um modelo de arquitetura utilizando o framework JSF e
EJB 3.1, bem como um exemplo de aplicação e trechos de código; a seção 8 possui resultados
obtidos na utilização da arquitetura proposta e a seção 9 apresenta a conclusão do artigo.
______________________
¹Pós - graduando em Engenharia de software pela UNISOCIESC: [email protected]
²Professor da UNISOCIESC. e-mail: [email protected]
2
ENGENHARIA DE SOFTWARE
A Engenharia de Software é a área da computação que estabelece uma abordagem sistemática
de desenvolvimento de software com qualidade envolvendo processos, técnicas e ferramentas
apropriadas para uma ampla gama de aplicações, considerando prazos, restrições e recursos
disponíveis (PRESSMAN, 2011).
A criação da Engenharia de Software surgiu no intuito de contornar a crise do software, dando
um tratamento de engenharia ao desenvolvimento de sistemas complexos caracterizados por um
conjunto de componentes abstratos (estrutura de dados e algoritmos) encapsulados na forma de
procedimentos, funções, módulos, objetos ou agentes e interconectados entre si, compondo a
arquitetura do software, devendo ser executados em sistemas computacionais (WIKILIVROS,
2011).
3
ARQUITETURA EM CAMADAS
O padrão de arquitetura em três camadas separa as funcionalidades de uma aplicação visando
tornar o sistema mais flexível, possibilitando alteração de forma independente em cada uma das
camadas, sendo elas, segundo Akemi (2013):
• Camada de apresentação: responsável por receber dados de entrada e apresentar os
resultados, sendo a interface com o usuário.
• Camada de regras de negócio: controla todo o fluxo de informação, sendo intermediária
entre a camada de apresentação e a de acesso a dados.
• Camada de acesso a dados: responsável por persistência dos dados da aplicação.
3.1 Objetivos da arquitetura em camadas
Segundo Peres (2011) a arquitetura em camadas tem os seguintes objetivos:
Dividir a aplicação em módulos o mais independente possível (Modularidade);
Reduzir o custo de manutenção da aplicação (Manutenibilidade);
Permitir que funcionalidades sejam acrescentadas sem impactar nas já existentes
(Extensibilidade);
Permitir o reuso de classes e componentes em outros módulos da aplicação ou em outras
aplicações (Reusabilidade).
De acordo com Pressman (2011, 7. ed. pág. 118-119)
Arquitetura de software é a espinha dorsal do sistema a ser construído. Afetando interfaces,
estruturas de dados, desempenho e fluxo de controle de programas, maneira pela qual os
testes podem ser conduzidos, a manutenção do sistema realizada e muito mais. Por todas
essas razões, o projeto deve começar com as considerações arquitetônicas. Só depois de a
arquitetura ter sido estabelecida devem ser considerados os elementos relativos a
componentes.
4
O PADRÃO MVC
Conforme Almeida (2006), o MVC (Model-View-Controller) é um padrão de arquitetura que
tem objetivo separar dados, ou lógica de negócio (Model), da interface do usuário (View) e do fluxo
da aplicação (Controller), permitindo que várias interfaces possam acessar e visualizar uma mesma
lógica de negócios, como apresentado na Figura 1. Na arquitetura MVC , a lógica de negócios
(Model) não tem ligação direta com a camada de apresentação (View).
•
•
•
Modelo (Model): responsável pela lógica do negócio.
Visão (View): é responsável pela interação com o usuário e por apresentar visões dos dados
do negócio, não se preocupando como estes foram obtidos, apenas em apresentá-los.
Controle (Controller): responsável pelo fluxo das informações entre as camadas de visão e
de modelo.
Figura 1- Fluxo de eventos e informações em uma arquitetura MVC
Fonte: Adaptada de Mota(2011)
É importante salientar que na arquitetura em camadas, conforme conclusão de Duarte (2011),
camadas dizem como os componentes são agrupados e o MVC define como eles interagem.
5
O FRAMEWORK JSF E SUA ARQUITETURA
JSF 2.0 é um framework Java para Web no padrão MVC, que permite a elaboração de
elementos de interfaces gráficas, orientado a eventos. Possui um conjunto de bibliotecas para
representação de componentes visuais e gerenciamento de estado, possibilitando a manipulação de
eventos e validações dos dados de entrada, bem como um conjunto de bibliotecas para definição e
controle de navegação de páginas.
JSF tem como objetivo simplificar a construção de interfaces com usuários. Possui
componentes reutilizáveis, suporte a internacionalização e acessibilidade possibilitando a
implementação de forma ágil e a utilização de Ajax em alguns de seus componentes, contendo
validadores e conversores. (SANTOS, 2012).
5.1 Arquitetura
A arquitetura do JSF, demonstrada na Fig.2, permite o desacoplamento entre os componentes e
possibilitando adicionar novos elementos, criar páginas usando eventos e componentes.
Os componentes de interface do usuário (UI) são organizados em uma estrutura de árvore, na
qual cada componente pode ser associado com métodos e atributos de um bean. Cada componente
pode ser associado com uma função de validação ou classe (DEVITTE, [sd]).
Figura 2 - Arquitetura JSF
Fonte: Devitte (s.d.)
5.2 Ciclo de vida
De acordo com Gonçalves (2010), o ciclo de vida do JSF é composto por seis fases Figura 3:
Restaurar Apresentação: O processamento da requisição do ciclo de vida do JSF é iniciado
nesta fase, com a construção da árvore de componentes.
• Aplicar Valores Requisitados: Nesta fase o JSF resgata os valores informados pelo usuário e
os armazena em seus componentes, sendo que os valores são convertidos para o tipo
apropriado (se o valor é uma String, é convertido para String).
• Processar Validações: Nesta fase são processados os “validadores” (validators) registrados
para cada componente, sendo verificado se os valores armazenados na fase anterior se
aplicam a todas as regras.
• Atualizar Valores do Modelo: Após todos os componentes serem validados, os dados do
modelo do aplicativo são atualizados sendo o Managed Bean associado à página. Se houver
erro na conversão, o JSF dispara um erro de tempo de execução, isto ocorrendo o JSF
adiciona esses erros no FacesContext e renderiza a página de visão ao usuário.
• Invocar Aplicação: Esta fase é responsável por manipular eventos do aplicativo, tal como
enviar um formulário ou acessar outra página por meio de um link.
• Renderizar Resposta: Nesta fase a página é renderizada. A fase codifica a resposta e a envia
de volta ao navegador sendo que a cada nova requisição o ciclo recomeça.
•
Figura 3 - O ciclo de vida do JSF
Fonte: Devitte (s.d.)
6
ENTERPRISE JAVA BEANS 3.1 E VANTAGENS QUANTO À SUA UTILIZAÇÃO
Enterprise Java Beans 3.1 são componentes Java que executam em servidores de aplicação,
fornecendo diversos serviços pré-programados, como: escalabilidade (representada por vários EJBs
executando ao mesmo tempo), segurança e controle de acesso, transações distribuídas, transparência
de localização e componentes remotos (SAMPAIO, 2011).
Tem como características simplificar a implementação de aplicações corporativas, bem como
disponibilizar serviços tanto local quanto remoto. Facilita o desenvolvimento de aplicações
utilizando anotações, reduzindo a quantidade de código, sem a necessidade de utilização de
arquivos XML.
Existem três tipos diferentes de EJB são eles:
• Entity Beans: representação de um objeto que vai persistir numa base de dados.
• Session Beans: executa uma tarefa para o cliente. Pode manter o estado durante uma sessão
com o cliente (Statefull) ou não (Stateless).
• Message Driven Beans: processa mensagens de modo assíncrono entre os EJBs e cuja API
de mensagens é o Java Message Service (JMS) (FONSECA, 2010).
O EJB na especificação 3.1 apresenta algumas novidades, citadas por Luz (2009), entre elas:
• Singleton Beans - Componente que implementa o Design Pattern Singleton, permitindo
capturar eventos de inicialização e encerramento da aplicação;
• Interface opcional para componentes - Na criação de componentes EJBs não é mais
obrigatória a criação de uma interface remota ou local;
• Timer Service - Melhorias no serviço de agendamento de forma declarativa (por annotation
ou XML);
• Deploy de EJBs na camada Web (.war) - Permite o uso de EJBs diretamente na camada
Web;
• Chamadas assíncronas a métodos - Uma alternativa simplificada à MDBs (MessageDriven
Beans) para chamada assíncrona;
• Nomes JNDI globais padronizados - Esse recurso proporciona melhor portabilidade;
• EJB Lite - Estabelece uma versão mais leve para um contêiner de EJBs.
Na seção a seguir será exemplificada a utilização do EJB3.1 utilizando anotações em um
modelo de arquitetura em camadas.
7
MODELO DE ARQUITETURA E EXEMPLO DE APLICAÇÃO
Na Figura 4, encontra-se um modelo de arquitetura utilizando o framework JSF e o EJB 3.1
bem como a definição das camadas de apresentação, negócio e persistência, a interação entre elas e
algumas tecnologias usadas nas respectivas camadas. A camada de apresentação está disposta no
ModuloWEB utilizando JSF, Facelets xhtml, Managed Bean e Primefaces. No ModuloEJB estão as
camadas de negócio usando Java Beans e a de persistência com JPA (Java Persistence API). A
camada de apresentação interage com a de negócio que por sua vez interage com a de persistência,
sendo que a camada de apresentação não interage diretamente com a de persistência.
Figura 4 – Modelo de arquitetura em camadas
A Figura 5 contém a tela utilizada para exemplificar a camada de apresentação de um módulo
de consulta de contas a pagar utilizando JSF e Primefaces (extensão do JSF), possibilitando filtrar
informações sobre a conta, vencimento, bem como selecionar forma de pagamento e situação. O
resultado da consulta é exibido em uma tabela clicando no botão “Consultar”.
Figura 5 -Tela Contasapagar.xhtml
7.1 Trechos de código utilizados para exemplificar o desenvolvimento da tela
Contasapagar.xhtml.
Na utilização de páginas JSF usa-se pelo menos três declarações de namespaces definidas
como padrão pelas tags f (linha 4), h (linha 5) e ui (linha 6). O Primefaces é definido pela tag p
(linha7) exemplificado na Fig. 6.
Figura 6 – Configuração necessária para utilização dos componentes JSF e Primefaces
Na tela Contasapagar.xhtml (Fig. 5) foram demonstrados alguns componentes como o campo
de texto “Conta” definido pelo componente “p:inputText” do Primefaces Fig.7 (linhas 1 e 2), o
botão “Consultar”: responsável por realizar a consulta das contas a pagar de acordo com os filtros
informados sendo definido pelo componente “p:comandButton” Fig.8 (linha 1 a 3), para exibir os
resultados da consulta foi criada uma tabela definida pelo componente “p:dataTable” (linha 3) e as
colunas da tabela criadas pelo componente “p:column” (linha 10 e 15) Fig. 9.
Figura 7 – Trecho de código do campo Conta
Figura 8 – Trecho de código do campo Consultar
Figura 9 - Trecho de código responsável por exibir os resultados da consulta realizada
O ManagedBean ContasapagarMB.java realiza uma instância do EJB ContasServiceFacade na
aplicação através da anotação @EJB demonstrado na Fig.10 (linha 9), retornando também a lista
de contas a pagar. Um ManagedBean definido pela anotação @ManageBean (linha 2) com o
escopo de View (@ViewScoped), linha 1, permanece na memória enquanto for submetido para a
mesma tela.
Figura 10 – Trecho de código do ContasapagarMB
A interface ContasapagarServiceFacade.java demonstrada no trecho de código da Fig.11 foi
definida para acesso local, poderia ser utilizada para acesso remoto utilizando a anotação @Remote
ao invés de @Local (linha 2).
Figura 11 – Interface ContasapagarServiceFacade
A classe ContasapagarServiceFacadeImp.java Fig. 12 é responsável pela lógica de negócio, que
implementa a interface ContasapagarServiceFacade.java Fig.11. Foi utilizado o EJB do tipo
Stateless definido pela anotação @Stateless (linha3) pelo fato de não precisar manter o estado, caso
fosse necessário, poderia ser substituído pela anotação @Stateful.
Figura 12 – ContasapagarServiceFacadeImp
Para separar a lógica de persistência (linha 8 a 30) dos dados da lógica de negócio foi criada a
classe ContasapagarService.java demonstrada na Fig.13.
Figura 13 – ContasapagarService
8
RESULTADOS OBTIDOS COM A APLICAÇÃO DA ARQUITETURA
Com a criação de um protótipo (contendo uma tela de consulta de contas a pagar) a partir de
um modelo de arquitetura em camadas utilizando anotações, para adquirir conhecimento, tendo
como ambiente de desenvolvimento o Eclipse Juno e o servidor JBoss 7.1.1, foi possível programar
de forma rápida e simplificada com o EJB3.1 eliminando a necessidade de se criar interfaces home
e a de usar descritores de implementação XML em módulos EJB (necessários na especificação
EJB2.x) reduzindo consequentemente a quantidade de código (para cada interface home diminui
em média 4 linhas de código e cada bean de sessão elimina a necessidade de criar os métodos:
ejbActivate, ejbPassivate, ejbRemove e setSessionContext), bem como testar e exemplificar sua
utilização e mostrar a separação entre os módulos: WEB onde está disposta a camada de
apresentação usando tecnologias como JSF 2.0 e Primefaces (extensão do JSF) e o EJB ficando as
camadas: de negócios onde foi utilizado EJB3.1 e a de persistência com JPA com trechos de
códigos descritos na seção 7.
Com a utilização destas tecnologias também foi possível observar que uma consulta realizada em
uma tabela contendo 7 colunas e 316 registros leva em torno de 0,19 segundos para ser executada.
A consulta foi realizada acionando-se o botão “Consultar” da tela de contas a pagar exemplificado
na Fig. 5 da seção 7. O tempo de execução foi calculado desde o acionamento do botão até o
retorno da consulta em forma de uma lista de contas, utilizando-se para isto a função
(System.currentTimeMillis()) que retorna o tempo em milissegundos, onde o tempo final é
subtraído do inicial e dividido por 1000 para se ter o resultado em segundos.
Tabela1. Resultados obtidos
Consulta
Consulta realizada em uma tabela contendo 7 colunas com 316 registros
9
Tempo de execução
0,19 segundos
CONCLUSÃO
A arquitetura em camadas proporciona a divisão das funcionalidades de um sistema,
separando-as em camada de: visão, negócio e persistência possibilitando realizar alterações de
forma independente em cada camada, tornando os códigos mais limpos. Também facilita a
manutenção e adição de recursos e o reaproveitamento de códigos. Conforme consta na seção 8,
uma arquitetura utilizando componentes JSF, que simplificam a construção de interfaces através de
componentes reutilizáveis, e com o EJB 3.1 que utiliza anotações, reduzindo significativamente a
quantidade de códigos, agilizam o processo de desenvolvimento de aplicações Web. Este modelo de
arquitetura pode ser utilizado em trabalhos futuros, acrescentando-se outras tecnologias e
frameworks, de acordo com a necessidade, que possam facilitar ainda mais o desenvolvimento de
sistemas web.
REFERÊNCIAS
AKEMI, Válquíria; PEREIRA, Cristiane; GUIMARÃES, Thamires S. Arquitetura em três
camadas.
Disponível
em:
<http://outratecno.blogspot.com.br/2013/03/arquitetura-em-3camadas.html > Acesso em: out.2013.
ALMEIDA, 2006 Rodrigo Rebouças de. Model-View-Controller (MVC). Disponível em:
<http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/arqu/mvc/mvc.html> Acesso em: 30 out.
2013.
BASS, 2003 in SANTOS, Paulo Victor dos. Arquitetura Otimizada Para Desenvolvimento Web
Utilizando Novas Tecnologias. Disponível em: <http://www.webartigos.com/artigos/arquiteturaotimizada-para-desenvolvimento-web-utilizando- novas-tecnologias/93779/> Acesso em: 27 out.
2013.
DEVITTE, Gustavo Agostini. A Tecnologia JavaServer Faces (JSF). Disponível em:
< http://www-usr.inf.ufsm.br/~agostini/> Acesso em: 03 nov. 2013.
DUARTE,
Anderson.
MVC
x
Camadas.
Disponível
em:
<http://bugnocodigo.blogspot.com.br/2011/08/mvc-x-camadas.html> Acesso em: 30 out. 2013.
FONSECA,
Natanael.
Enterprise
Java
Beans.
Disponível
em:
<http://www.natanaelfonseca.com.br/2010/09/enterprise-java-beans.html> Acesso em: out. 2013.
GONÇALVES,
Edson.Ajax
com
JSF
2.0.
Disponível
<http://www.edsongoncalves.com.br/tag/javaserver-faces/> Acesso em: nov. 2013.
em:
LUZ,
Giulian
Dalton.
EJB
3.1.
Disponível
<http://www.globalcode.com.br/noticias/EntrevistaEJB31> Acesso em: 03 nov. 2013.
em:
MOTA, Kleber. Java, Software – Desenvolvimento de uma aplicação Java SE com o MVC.
Disponível em:<http://www.klebermota.eti.br/2011/12/23/desenvolvimento-de-uma-aplicacao-javase-com-o-mvc/ > Acesso em: 20 nov. 2013.
PERES, Marcela Mariotti. Arquitetura em três camadas – parte 1. Disponível em:
< http://marcelamperes.wordpress.com/2011/07/14/arquitetura-em-tres-camadas-parte-1/> Acesso
em: 03 nov. 2013.
PRESSMAN, Roger S. Engenharia de Software-Uma Abordagem Profissional. 7. ed. ARMED,
2011.p.118-119.Disponível em:<http://conhecimentodissipado.blogspot.com.br/2013/10/downloadengenharia-de-software-7.html> Acesso em: 16 nov. 2013.
------. Engenharia de Software-Uma Abordagem Profissional. 7. ed. ARMED, 2011. Disponível
em:<http://conhecimentodissipado.blogspot.com.br/2013/10/download-engenharia-de-software7.html> Acesso em: 20 nov. 2013.
SAMPAIO,Cleuton. Java Enterprise Edition 6: desenvolvendo aplicações corporativas. Rio de
Janeiro: Brasport, 2011.
SANTOS, Paulo Victor dos. Arquitetura Otimizada Para Desenvolvimento Web Utilizando
Novas Tecnologias. Disponível em:< http://www.webartigos.com/artigos/arquitetura-otimizadapara-desenvolvimento-web-utilizando-novas-tecnologias/93779/> Acesso em: 27 out. 2013.
WIKILIVROS, Engenharia de Software/O que é Engenharia de Software? Disponível
em:<http://pt.wikibooks.org/wiki/Engenharia_de_Software/O_que_%C3%A9_Engenharia_de_Soft
ware%3F>. Acesso em: 25 jan. 2014.
Download