Buscar

Ajuda Artigopósgraduação

Prévia do material em texto

______________________ 
¹Pós - graduando em Engenharia de software pela UNISOCIESC: ismaelhdsistemas@gmail.com 
²Professor da UNISOCIESC. e-mail: camargho@gmail.com 
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. 
 
 
 
 
 
 
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 - ArquiteturaJSF 
 
 
 
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 descritoresde 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 Tempo de execução 
Consulta realizada em uma tabela contendo 7 colunas com 316 registros 0,19 segundos 
 
 
9 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-3-
camadas.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/arquitetura-
otimizada-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 em: 
<http://www.edsongoncalves.com.br/tag/javaserver-faces/> Acesso em: nov. 2013. 
 
LUZ, Giulian Dalton. EJB 3.1. Disponível em: 
<http://www.globalcode.com.br/noticias/EntrevistaEJB31> Acesso em: 03 nov. 2013. 
 
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-java-
se-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/download-
engenharia-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-software-
7.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-otimizada- 
para-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.

Outros materiais