Paradigmas de Linguagens de Programação - Tratamento de Exceções
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-Graduação (2009)
1. Ferramentas para desenvolvimento web com produtividade
Adriano T. Souza1, Evando C. Pessini1, Ivonei de F. Silva1
Departamento de Informática
1
Universidade Estadual do Oeste do Paraná (UNIOESTE) – Cascavel – PR – Brasil
adrianots@gmail.com, pessini@utfpr.edu.br, ivonei@hotmail.com
Resumo. Este artigo apresenta um conjunto de frameworks e ferramentas
voltadas ao desenvolvimento de software web com foco na produtividade. Os
recursos escolhidos foram aplicados no ambiente da Cooperativa
Agroindustrial C. Vale, uma empresa de grande porte que atua no ramo de
cereais e frigorífico de aves. A proposta é baseada nos seguintes recursos:
persistência de dados com Hibernate, gerenciamento de contexto da
aplicação a partir do framework JBoss Seam, utilização de RichFaces para
aplicação de JSF e recursos de AJAX, e ambiente de desenvolvimento Red
Hat Developer Studio.
1 . Introdução
O processo de desenvolvimento de software diz respeito a uma série de atividades que
visam a produção de programas de computador [Pedrycs e Peters 2001]. Tais atividades
vão desde o levantamento das funcionalidades que o software deverá apresentar até o
momento em que o produto estará pronto para uso. Pedrycs e Peters (2001) elegem três
fases que consideram como principais neste processo, com base no padrão IEEE 1074-
1995, as quais são: Requisitos – determinam como o sistema deverá funcionar, bem
como riscos e plano de testes; Projeto – mostra como o sistema deve efetuar cálculos e
sua estrutura; Implementação – é a fase de codificação do software, produção de
documentação e testes.
O projeto e implementação do software deve ter em vista questões que poderão
surgir durante o desenvolvimento e o tempo de vida do mesmo, tais como: mudança de
requisitos, prazos curtos e, posterior manutenção do produto. Um software de qualidade
deve trazer em sua arquitetura características como: usabilidade – facilidade para
aprender e operar o software; manutenibilidade – diminuir o esforço empenhado na
reparação de erros; flexibilidade – permitir que novas funcionalidades possam ser
implementadas com o mínimo de impacto na estrutura do sistema; e interoperabilidade
– o sistema deve possibilitar sua integração com demais sistemas existentes [Pressman
1995].
A produtividade no desenvolvimento de software é essencial para qualquer
organização. Alcançá-la, infelizmente, não é para todas as empresas. A busca pela
produtividade aliada a redução de custos, sem perder a qualidade mínima e aceitável,
acontece há 40 anos.
Diversos estudos demonstram que o uso de algumas técnicas pode contribuir
para o aumento da produtividade no desenvolvimento de software. Dentre elas, destaca-
2. se o reuso de software, colaborando efetivamente para o aumento da produtividade e
redução de custos sem que haja perdas à qualidade no processo e no produto final
[Almeida et al 2008].
Para que o reuso de software seja efetivo, é necessário utilizar técnicas de:
design patterns [Gamma et al 1994], frameworks [Fayad e Schmidt 2008], componentes
[Neighbors 1980], dentre outras. Também é importante o uso de tecnologias que
promovem o reuso. Ferramentas, denominadas de “frameworks”, tais como, Hibernate
[Bauer e King 2007] e RichFaces [JBoss 2009] contribuem para o aumento na
produtividade.
2 . Ferramentas
Com base nos requisitos não funcionais citados, foi proposto um conjunto de
ferramentas e frameworks visando o desenvolvimento de software web de forma mais
produtiva que a plataforma legada da Cooperativa Agroindustrial C.Vale, a qual
baseava-se apenas em um container web Tomcat executando páginas Java Server
Pages (JSP) com todas as regras de negócio. Foi observado que neste ambiente todos os
sistemas da intranet estavam acoplados em um único projeto Java Web Application.
Tendo em vista estas questões, foi elaborado uma estrutura para desenvolvimento de
software com características que dão maior flexibilidade que o ambiente atual e que
permita maior facilidade para manutenção nas aplicações da C. Vale. Os recursos
selecionados para a elaboração da estrutura proposta são baseados nos frameworks:
Hibernate - para persistência e mapeamento objeto-relacional; RichFaces e Ajax4JSF -
para desenvolvimento de interfaces ricas; JBoss Seam – para gerenciamento de contexto
da aplicação; e Red Hat Developer Studio como ambiente de desenvolvimento.
2.1 . Hibernate
Segundo Gradeck e Pugh (2004), o Hibernate é um middleware Java projetado para
prover um completo mapeamento objeto-relacional, simplificando significativamente o
trabalho de persistência de objetos em banco de dados relacional.
Para utilização do Hibernate é necessário descrever o mapeamento do objeto
Java tendo em vista o banco de dados relacional. O mapeamento deve dizer qual a
entidade do banco de dados que a classe Java irá representar, e as referentes colunas
através dos atributos. Também é necessário parametrizar um identificador da classe que
será utilizado para representar a singularidade do objeto quando do seu armazenamento
no banco de dados. Neste caso, o Hibernate permite que sejam utilizados “geradores”
para compor um identificador único, os quais são vinculados a elementos como identify
e sequence, recursos providos pela maior parte dos bancos de dados disponíveis
[Gradeck e Pugh 2004].
O Hibernate suporta uma variedade de servidores de banco de dados comerciais
e de código aberto, bastando apenas que haja um driver JDBC (Java Database
Connectivity). Este framework trabalha por padrão com o SQL (Structured Query
Language) básico, e permite que seja feita alteração na configuração para se trabalhar
com o dialeto específico de algum banco de dados [Gradeck & Pugh 2004].
A figura 1 mostra como o Hibernate está posicionado na arquitetura de software:
3. Figura 1. Hibernate na arquitetura de software [adaptado de Hibernate 2009]
2.2 . RichFaces
O RichFaces é um framework que permite adicionar recursos de Asynchronous
JavaScript And XML (AJAX) em aplicações Java Server Faces (JSF). Este framework é
integrado ao ciclo de vida JSF e permite invocar, via JavaScript, validadores e
conversores JSF bem como os demais JavaBeans inseridos no contexto JSF. O
RichFaces também disponibiliza um conjunto de diversos componentes (com AJAX
nativo) que podem ser utilizados para o desenvolvimento de interfaces ricas, inclusive
com suporte a temas (skins) [JBoss 2009].
2.3 . JBoss Seam
O JBoss Seam define um modelo de componentes uniformes para as regras de negócio
da aplicação. Este framework tem componentes statefull, ou seja, que guardam seu
estado durante a execução da aplicação de acordo com o contexto associado aos
mesmos. Existem vários contextos definidos nesta ferramenta, tais como: event
(requisição), session, business process, application e conversation. Dentre estes, o
contexto conversation, se mostra como diferencial deste framework, pois nele o estado
do componente é mantido durante uma série de requisições web em uma interação com
do usuário [Seamframework 2009].
Com o Seam é possível fazer uma integração consistente de JSF, um modelo de
componentes para camada de apresentação, com Enterprise Java Bean 3 (EJB3) que
está presente no JEE a partir da versão 5 e pode ser utilizado para implementar regras de
negócio no lado do servidor, bem como para desenvolver recursos de persistência
[Seamframework 2009].
Este framework integra-se com duas ótimas ferramentas para AJAX e JSF
disponíveis no mercado, o RichFaces e o ICEfaces. Estas soluções possibilitam a adição
de recursos de AJAX em páginas web sem a necessidade de se escrever códigos
JavaScript [Seamframework 2009]
O Seam ainda possui uma série de recursos relevantes, dentre os quais pode-se
citar: implementação de workflows em jBPM (solução JBoss para Business Process
4. Management), injeção de dependência, inversão de controle e configurações a partir de
annotations.
A figura 2 mostra a organização do conjunto de recurso da arquitetura proposta.
Figura 2. Arquitetura proposta [adaptado de Seamframework 2009]
2.4 . Red Hat Developer Studio
O Red Hat Developer Studio 1.0 CR1, é a versão release candidate do produto JBoss
Developer Studio, a qual foi distribuída gratuitamente. Esta versão se mostra estável e
com uma gama de recursos relevantes para o desenvolvimento de aplicações web.
Esta ferramenta é uma Integrated Development Environment (IDE) baseada no
Eclipse Europa 3.3 com Web Tools Project (WTP), que possui o Visual Page Editor,
um recurso que permite o desenvolvimento a partir de uma interface WYSIWYG (What
You See Is What You Get) com a renderização do conteúdo de páginas web em tempo de
desenvolvimento, incluindo os componentes JSF e RichFaces [Red Hat 2008]. Esta
IDE disponibiliza várias paletas de componentes que vão desde os elementos básicos da
API (Application Programming Interface) JSF aos componentes com AJAX que estão
disponíveis no framework RichFaces.
3 . A seleção das Ferramentas
A seleção das ferramentas citadas se deu a partir da análise de alguns fatores, tais como:
desempenho, estabilidade, performance de desenvolvimento, integração com outras
tecnologias e frameworks, maturidade da ferramenta no mercado, custo e possibilidade
de agregar suporte empresarial.
Foram analisadas ferramentas para framework de persistência, framework Model
View Control (MVC), framework Java Server Faces (JSF) com AJAX integrado, e
ambiente de desenvolvimento.
3.1 . Framework de persistência
No quesito persistência e mapeamento objeto-relacional (ORM) foi analisado os
recursos da especificação Java Persistence API (JPA) e do framework Hibernate sendo
utilizado a partir da sua implementação core com annotations.
Neste contexto foi analisado os detalhes dos recursos para decidir qual destes
utilizar. O JPA é uma especificação, e como tal proporciona a independência de
5. implementação, e o Hibernate pode ser utilizado como uma implementação de JPA.
Este último apresentou alguns recursos adicionais importantes no mapeamento das
classes persistentes que trazem grande impacto na manipulação de dados em larga
escala, os quais são apresentados a seguir.
A anotação @Fetch pode ser utilizada com parâmetro FetchMode.JOIN em
conjunto com FetchType.EAGER para que a entidade relacionada no atributo seja
associada à busca com join na consulta SQL (Structured Query Language) do objeto
mapeado. Esta anotação também pode ser utilizada com parâmetro
FetchMode.SUBSELECT em conjunto com FetchType.LAZZY. Desta forma os dados de
atributos com coleções em uma entidade “A” são carregados de uma só vez para todas
as instâncias de “A” em uma lista consultada previamente no banco de dados, ao
contrário do modo padrão, onde é feita uma consulta a separada para os atributos com
coleções em cada instância de “A” [Bauer e King 2007].
Outro pronto interessante é a anotação @GenericGenerator que pode ser
utilizada para geração de valor para chave-primária de uma entidade que é baseada em
relacionamento (chave estrangeira um-para-um com mesmo valor de chave primária)
[Bauer e King 2007].
O Hibernate apresenta também o recurso de deleção em cascata a partir da
anotação @Cascade(value=CascadeType.DELETE_ORPHAN), em que a lista de
objetos filhos persistidos irá refletir o último estado desta após uma gravação do objeto
pai, considerando que os elementos filhos não contidos na lista no momento da
gravação serão eliminados do banco de dados [Bauer e King 2007].
3.2 . Framework MVC (Model View Control)
No quesito framework MVC, a avaliação foi feita em torno do Spring e JBoss Seam,
ambos já amadurecidos no mercado com plena capacidade de serem utilizados. Outro
framework também analisado foi o brasileiro Mentawai, embora este tenha como uma
de suas primícias a simplicidade, e contemple uma variedade de funcionalidades, o
mesmo ainda tem uma pequena base de usuários e literatura, consequentemente a
resolução de problemas no âmbito de desenvolvimento poderia se tornar mais
improdutiva [Mentawai 2009].
Tanto Spring quanto Seam surgiram com objetivo de serem alternativas leves á
especificação EJB antes de sua versão 3.0. Ambos possuem recursos de inversão de
controle, injeção de dependência, gerenciamento de transações e gerenciamento de
estado de um componente. Todavia, o framework Spring não pretende ser uma solução
completa para o desenvolvimento de aplicações web, esperando-se do desenvolvedor a
escolha de seu mecanismo de segurança, framework da camada de visualização da
aplicação e AJAX. Por outro lado, o Seam trás um conjunto completo de recursos
fortemente integrados para o desenvolvimento de aplicações, dentre os quais podem ser
citados: iText - para geração de documentos PDF; RichFaces e Ajax4JSF - para
implementação da camada de apresentação; Seam-gen - para geração inicial de
aplicações web; Identificação; Arquivo de configuração pages.xml - para adicionar
comportamento na aplicação em tempo de navegação; e utilização de Facelets para
elaboração de templates [Gibson 2009].
6. 3.3 . Framework Java Server Faces com AJAX
Para composição dos recursos de interfaces ricas (RIA - Rich Internet Applications)
baseados na especificação Java Server Faces (JSF) foram analisados os frameworks
MyFaces, desenvolvido pela Fundação Apache; e RichFaces, que foi desenvolvido
inicialmente pela Exadel e posteriormente se tornou parte do portfólio Red Hat/JBoss.
O MyFaces faz referência a implementação base para especificação JSF e
engloba vários subprojetos, dentre os quais estão: Tomahawk – que possui uma grande
variedade de componentes visuais; Trinidad – é baseado no ADF Faces, framework
inicialmente desenvolvido pela Oracle e doado ao projeto Myfaces o qual trás o suporte
a AJAX; e o Tobago – que apresenta como principal destaque o gerenciador de layout
[Apache 2009].
O RichFaces disponibiliza ao desenvolvedor uma gama de componentes visuais
que podem ser utilizados no desenvolvimento de interfaces e tem integrado nativamente
o Ajax4JSF que adiciona recursos de AJAX à aplicação JSF. Este framework se integra
facilmente com Google Map, JQuery e Microsoft Virtual Earth [JBoss 2009]
Avaliando-se o volume de tópicos em fóruns como GUJ(http://www.guj.com.br)
e JavaFree (http://www.javafree.org), observa-se que tanto MyFaces como RichFaces
são bem aceitos pela comunidade de desenvolvedores Java. Conforme JBoss[2009]
estes dois frameworks também podem ser utilizados em conjunto.
3.4 . Ambiente de desenvolvimento
Para o ambiente de desenvolvimento foram analisadas duas ferramentas, sendo elas:
Netbeans 6.5 e Red Hat Developer Studio 1.0 CR1. Foram verificadas questões como:
suporte a tags Java Server Faces - JSF (auto-completation); suporte a desenvolvimento
por editor visual; assistente de criação de classes entidades de persistência a partir do
banco de dados e suporte a edição das mesmas; e estabilidade da ferramenta.
O Netbeans proporciona um ambiente com variedade de recursos para o
ambiente de desenvolvimento na plataforma Java Enterprise Edition. Dentre estes,
podem ser citados: suporte pleno ao desenvolvimento com Hibernate e Java Persistence
API, com assistente para geração e customização das classes entidades a partir do banco
de dados; suporte a edição de código de páginas web com tags JSF, e um ambiente de
desenvolvimento visual restrito a seu framework Visual Web JavaServer Faces; com
relação a questão da estabilidade, foi verificado problemas de performance na
inicialização da IDE, onde a ferramenta ficava inoperante em um tempo acima de 30
segundos; e na questão de estabilidade, foi verificado o travamento da ferramenta em
várias situações onde se fazia a utilização das teclas [ctrl]+[space] para invocar o
recurso de assistente de código [Netbeans 2009].
Tal como o Netbeans, a ferramenta Red Hat Developer Studio possui grande
quantidade de recursos para o desenvolvimento na plataforma Java Enterprise Edition.
Esta ferramenta possui suporte ao desenvolvimento com JPA e framework Hibernate.
Contudo, a geração de classes entidades a partir do banco de dados deve ser feita em um
projeto JPA fora do projeto web onde está se desenvolvendo uma aplicação. Com
relação ao desenvolvimento a partir do JSF, o Red Hat Developer Studio trás
7. características que representam um ganho de produtividade significativa, dentre as quais
podem ser citados o editor visual de páginas, com suporte nativo ao frameworks
RichFaces, paleta de componentes desta biblioteca bem como do JSF padrão e JBoss
Seam. Esta ferramenta também possui o suporte pleno a edição de tags JSF [Red Hat
2008].
3.5 . Considerações sobre a seleção das ferramentas
A decisão pelo conjunto de ferramentas a serem utilizadas se baseou em seis fatores, os
quais são: a riqueza de recursos; facilidade de aprendizagem e desenvolvimento;
estabilidade de cada ferramenta no contexto do conjunto de recursos; possibilidade de
agregar suporte do fornecedor; e principalmente, a estabilidade e performance.
A partir das observações anteriormente citadas, verificou-se que o conjunto de
ferramentas desenvolvido pela Red Hat/JBoss se adequaria melhor ao ambiente da
agroindústria C.Vale, tendo em vista que seu conjunto de frameworks é bem aceito pelo
mercado, bem documentado, possui integração nativa entre todos elementos do
conjunto, e ainda pode-se agregar suporte empresarial às ferramentas por meio do
desenvolvedor.
A partir da seleção da ferramenta, iniciou-se a construção do protótipo, com
objetivo demonstrar a utilização dos frameworks selecionados.
4 . Aplicação das ferramentas
O protótipo para aplicação das ferramentas foi desenvolvido a partir de uma arquitetura
Model View Control (MVC), com a camada de visão baseada no framework RichFaces,
recursos de AJAX implementados com framework Ajax4JSF, e recursos de templates
com framework Facelets em eXtensible Hypertext Markup Language (XHTML) .
Foi utilizado o JBoss Seam na implementação da camada de controle, com
abordagem da injeção de dependência, conversores, gerenciamento de transação,
tratamento de exceções e navegação. Na camada de modelo e persistência foi utilizado o
mapeamento objeto-relacional com o Hibernate fazendo uso de conexão ao banco de
dados por meio de um datasource configurado no container JEE. É abordada questões
de tunning no mapeamento de relacionamentos entre objetos, e cache em segundo nível.
O sistema utilizado como protótipo demonstra as tecnologias citadas a partir de
uma tela de pedidos de venda e seus cadastros correlatos, conforme especificação a
seguir.
A figura 3 apresenta o diagrama das classes Plain Old Java Objects (POJOs) a
ser utilizadas no desenvolvimento do protótipo.
8. Figura 3. Diagrama de classes do sistema de pedidos de venda
Este sistema teve apenas um caso de uso que representa o lançamento de pedidos
de venda. conforme figura 4.
Figura 4. Diagrama de classes do sistema de pedidos de venda
A figura 5 trás o diagrama de sequência que demonstra o fluxo de ações e
respostas do sistema.
9. Figura 5. Diagrama de classes do sistema de pedidos de venda
4.1 . Configuração dos arquivos XML para funcionamento da aplicação
Aplicações desenvolvidas sobre o conjunto de framework apresentados neste trabalho
devem ser configuradas a partir de alguns arquivos em XML (eXtensible Markup
Language), de acordo com Allen [2009] e Gradecki, Pugh [2004]:
• web.xml - onde é feita a configuração inicial para delegar ao JBoss Seam,
RichFaces e Facelets o processamento das requisições a aplicação;
• components.xml – neste arquivo são configurados os recursos que a aplicação
irá conter (gerenciamento de conversação, transação, persistência, conversores, etc);
• faces-config.xml – onde é delegado ao Facelets o processamento das
requisições JSF e idioma padrão da aplicação;
• pages.xml - é utilizado para configurar o comportamento da aplicação com
relação a navegação e tratamento de exceção no processamento feito pelo Seam;
• hibernate.cfg.xml – neste arquivo é configurado como o Hibernate deverá
fazer o gerenciamento da persistência de dados;
• ehcache.xml – configuração para o funcionamento do mecanismo de cache
para o Hibernate;
Ainda devem estar presentes na aplicação os arquivos de propriedades
log4j.properties – definição do comportamento do sistema de log do Hibernate e Seam;
seam.properties – aquivo vazio, apenas exigido pelo framework; e
messages_pt_BR.properties – tradução das mensagens JSF e do framework JBoss Seam.
10. 4.2 . Otimização do Hibernate
A má utilização do Hibernate em um ambiente de produção pode resultar no fracasso da
aplicação devido a seu excessivo consumo de recursos do banco de dados,
processamento e trafego de rede. Para que esse tipo de situação não venha a ocorrer é
necessário a utilização de recursos que otimizem o acesso ao banco de dados e faça o
cache de objetos.
Deve-se avaliar as entidades onde se têm atributos encapsulados de outra
entidade, o qual é constantemente acessado para se possa utilizar a combinação de
FetchType.EAGER com @Fetch(FetchMode.JOIN) de forma a reduzir a quantidade de
consultas ao banco de dados para busca de informações originados de chaves
estrangeiras [Bauer e King 2007].
Também deve ser analisados objetos que possuem coleções de entidades filhas,
sendo que há uma frequência de consultas da listagem de objetos pai com iteração desta
listagem tendo acesso às coleções filhas. Neste caso pode ser utilizado a combinação de
FetchType.LAZZY com @Fetch(FetchMode.SUBSELECT) para que todas as coleções
filhas sejam obtidas em uma única consulta ao banco de dados, no momento do
primeiro acesso à coleção filha [Bauer e King 2007].
Outra questão de suma importância para a performance da aplicação é a
utilização do cache de dados, conhecido como Second Level Cache. O Hibernate pode
trabalhar com diversos mecanismos de cache, dentre eles podem ser citados: EHCache,
OSCache e Jboss Cache [Bauer e King 2007]. Para este trabalho foi utilizado EHCache.
A utilização de mecanismo de cache deve ocorrer principalmente para as
entidades com maior quantidade de acessos e menor taxa de atualização concorrente
(acesso de outras aplicações ao banco de dados).
4.3 . Integração do Seam com Hibernate
A integração do JBoss Seam com o Hibernate facilita o trabalho de desenvolvimento,
tendo em vista que não á necessidade de se fazer classes java para o gerenciamento de
transação e controle de sessão. O Seam se encarrega de efetuar este controle e
disponibilizar a sessão do Hibernate por meio de injeção de dependência na classe
definida como componente de negócio da aplicação. Poucas configurações são
necessárias para usufruir deste recurso [Seamframework 2009].
O quadro 1 apresenta as configurações adicionadas no arquivo
hibernate.cfg.xml.
<property name="transaction.manager_lookup_class">
org.hibernate.transaction.JBossTransactionManagerLookup </property>
<property name="transaction.factory_class">
org.hibernate.transaction.JTATransactionFactory </property>
<property name="transaction.flush_before_completion">true</property>
Quadro 1: Configurações do arquivo hibernate.cfg.xml
11. O quadro 2 apresenta as configurações adicionadas ao arquivo components.xml.
<persistence:hibernate-session-factory
name="hibernateSessionFactory"
cfg-resource-name="hibernate.cfg.xml"/>
<persistence:managed-hibernate-session
name="seamDataBase"
session-factory="#{hibernateSessionFactory}"
scope="session"
auto-create="true"/>
<transaction:hibernate-transaction session="#{seamDataBase}" />
Quadro 2: Configurações do arquivo components.xml
Após estas configurações é possível acessar uma sessão do Hibernate a partir de
um atributo injetado na classe de negócio com “@In private Session seamDataBase”;
É possível utilizar-se do gerenciamento do Hibernate pelo JBoss Sean para a
conversão de listas de entidades em SelectItem utilizados pelo JSF. Para utilização desse
recurso, deve ser adicionado no arquivo components.xml os parâmetros contidos no
quadro 3.
<ui:hibernate-entity-loader session="#{seamDataBase}"/>
<ui:entity-converter name="entityConverter" />
Quadro 3: Configurações do arquivo components.xml para entity converter
Após esta parametrização a apresentação da lista de objetos persistentes pode ser
adicionado à interface web partir da tag apresentada no quadro 4. Neste momento, a
entidade selecionada estará disponível de forma integra, podendo ser acessado a partir
do componente de negócio.
<h:selectOneMenu value="#{component.targetValueObject}" >
<s:selectItems value="#{component.listPersistentObjects}"
var="myObject"
label="#{myObject.labelAttribute}" />
<s:convertEntity />
</h:selectOneMenu>
Quadro 4: Utilização do entity converter em paginas JSF
12. 4.4 . Características do Seam na arquitetura MVC
O framework JBoss Seam apresenta alguns recursos sofisticados que dão maior
produtividade ao desenvolvedor. Dentre elas estão [Seamframework 2009]:
– Contexto de conversação para o componente JSF – o Seam oferece, além dos
contextos padrões do JSF (page, request, session e application) o contexto
de conversação (“conversation”), que possui a característica de manter o
estado dos objetos na regra de negócio durante a navegação por uma serie de
páginas ou mesmo por diferentes janelas do browser. Este recurso tem seu
escopo maior que uma requisição e menor que uma sessão;
– Declaração do componente JSF a partir de anotações (não sendo necessário o
arquivo faces-config.xml);
– Injeção de dependência – caracteriza-se pela possibilidade de se permitir ao
desenvolvedor a inserção de uma instância de um objeto ou componente por
meio de uma anotação @In na declaração do um atributo em classes de
negócio;
– Arquivo pages.xml – onde podem ser descritas regras ou comportamento de
navegação da aplicação, bem como tratamento de exceções no
processamento pelo Seam.
4.5 . Aspectos relevantes no desenvolvimento da interface da aplicação.
O desenvolvimento da interface da aplicação foi baseado no framework RichFaces com
uso de templates em Facelets. A seguir, serão apresentadas algumas questões que devem
ser consideradas para que se tenha estabilidade da aplicação e a produtividade no
desenvolvimento.
O conjunto JBoss Seam e RichFaces tem por característica o fato de trabalhar
nativamente com o framework Facelet e documentos escritos em XHTML. Desda forma
é possível se fazer o uso de templates(layout mestre) de páginas, onde o formato padrão
da interface pode ser descrito em um arquivo XHTML contendo especificação de todos
estilos CSS (Cascading Style Sheet), rotinas em JavaScript e seções de conteúdo a
serem utilizadas em toda a aplicação [JBoss 2009].
A partir dessa especificação, o desenvolvimento da interface da aplicação pode
ser feito adicionado a referência ao arquivo de layout em cada página e descrição do
conteúdo das seções definidas neste.
Pode-se utilizar uma fila de requisições AJAX (queue) para o Ajax4JSF para
eliminar a possibilidade de colisões de requisições durante o tempo de vida de uma
solicitacão ao JSF. Pode-se também reduzir a carga do servidor, tendo em vista que a
fila pode controlar o envio de requisições ao servidor descartando pedidos duplicados
[JBoss 2009].
5 . Comparativo com a arquitetura de desenvolvimento legado
A partir do desenvolvimento de uma aplicação piloto, foram avaliados alguns aspectos
do formato de desenvolvimento de software que havia na empresa antes deste trabalho e
13. da estrutura de desenvolvimento proposta neste documento.
No quesito de complexidade no desenvolvimento, foram avaliados aspectos
relacionados a divisão de competências em camadas da aplicação, facilitando assim a
adição de novas funcionalidades, definição e localização de pontos de manutenção, e
minimização do entrelaçamento de códigos com diferentes responsabilidades na
aplicação a exemplo de: composição de interface juntamente com persistência de dados.
Com relação à quantidade de código escrito foram avaliados no nível de
autonomia das API e frameworks utilizados com relação à apresentação dos recursos
programados a partir de um conjunto mínimo de comandos e parâmetros.
A aplicação da componentização diz respeito a possibilidade de
desenvolvimento de bibliotecas de funcionalidades que poderão ser reutilizadas em
sistemas posteriormente desenvolvidos ou demais sistemas existentes.
Na questão do reuso de rotinas desenvolvidas é avaliado a possibilidade de
reutilização de trechos de códigos desenvolvidos na aplicação a partir de diferentes
pontos de execução na mesma aplicação.
No quesito de integração com a plataforma existente foi verificado a
possibilidade de convivência de sistemas desenvolvidos a partir da estrutura proposta
neste trabalho com as aplicações anteriormente existentes. Foram observados aspectos
como: autenticação em um sistema comum a todas aplicações web, utilização do mesmo
servidor de aplicação, transferência de parâmetros e dados de sessão do servidor entre as
aplicações.
Com relação à robustez dos frameworks, foram avaliados a capacidade da
aplicação trabalhar tabelas de banco de dados acima de 25 mil registros e consumo de
recursos do servidor (memória e processamento).
A possibilidade de integração com sistemas co-existentes trata da questão de
comunicação com demais sistemas existentes na empresa, tais como: mainframe e
aplicações em diferentes linguagens.
Na avaliação da consolidação da tecnologia no mercado foi verificado a
aceitação dos recursos de desenvolvimento pela comunidade de desenvolvedores,
documentação disponível e servidores de aplicação disponíveis para execução das
mesmas.
No quesito da possibilidade de agregar suporte empresarial a partir dos
desenvolvedores da tecnologia, foi avaliado a prestação de serviços e homologação da
plataforma pelo desenvolvedor da ferramenta, bem como a disponibilidade de suporte
técnico pelo mesmo.
A partir da avaliação destes tópicos foram obtidos os resultados apresentados na
Tabela 1. Os tópicos foram classificados em: Atende – a ferramenta apresenta todos os
recursos para que o item seja atendido; Atende parcialmente – a ferramenta não possui
algum requisito necessário para que o item seja atendido, conforme definição anterior; e
Não atende – a ferramenta não fornece suporte ao recurso desejado.
14. Table 1. Comparativo com a plataforma legada
Ambiente Ambiente
Característica
Legado proposto
Baixa complexidade de desenvolvimento Não atende Atende
Baixa quantidade de código escrito Não atende Atende
Aplicação da componentização Não atende Atende
Reuso de rotinas desenvolvidas Atende Atende
Integração com a plataforma já existente - Atende
Parcialmente
Robustez dos frameworks quando do aumento do Atende Atende
volume de dados e acesso simultâneo
Possibilidade de integração com outros sistemas co- Atende Atende
existentes parcialmente
Consolidação da tecnologia no mercado Atende Atende
Possibilidade de agregar suporte empresarial a partir Não Atende Atende
dos desenvolvedores das tecnologias escolhidas
6 . Considerações finais
A aplicação das ferramentas citadas neste trabalho podem trazer um aumento
significativo da produtividade no processo de desenvolvimento de software, visto que
abstrai aspectos complexos do processo de desenvolvimento na plataforma Java. O
desenvolvimento de rotinas de persistência de dados desde o tratamento de instruções
SQL ao gerenciamento das transações, a comunicação da camada de interface com
regras de negócio com recursos de AJAX e a implementação de componentes da
interface podem ser aplicados com um nível de programação que mantém o profissional
mais próximo da lógica de sua regra de negócio.
Os recursos disponibilizados pelo conjunto de ferramentas apresentadas
viabilizam a construção de aplicações com interfaces ricas, e trazem uma
implementação consistente de Java Server Faces. A estabilidade, performance e
confiabilidade destas ferramentas trazem um conforto ao desenvolvedor, visto que as
não precisa abrir mão de recurso algum a fim de ter estes aspectos em sua aplicação.
Dentre os frameworks apresentados, o Hibernate e o RichFaces se mostraram de
fácil aprendizado e utilização. Em contrapartida, o JBoss Seam exige um maior esforço
para entendimento de seu funcionamento e aproveitamento pleno dos recursos
oferecidos. Contudo, após o entendimento da forma como o framework trabalha, sua
15. utilização se torna produtiva. Recursos como gerenciamento de transação, conversores
de entidades, injeção de dependência e contexto de conversação proporcionam
flexibilidade e agilidade ao processo de desenvolvimento de aplicações.
Trabalhos futuros podem ser feitos no intuito de explorar a ferramenta seam-gen,
a qual é disponibilizada no mesmo pacote em que é obtido framework JBoss Seam.
Esta ferramenta possibilita a geração de um sistema web funcional baseado em um
banco de dados existente, tendo inserção, leitura, atualização e deleção de dados
(CRUD - Create, Retrieve, Update e Delete) e recursos de identificação. Tal ferramenta
não foi utilizada neste estudo devido ao fato de o sistema pré-configurado por ela se
apresentar com arquitetura relativamente complexa em vista da estrutura de sistema
desejada pela empresa no momento.
Outra questão que pode ser explorada em trabalhos posteriores é o
desenvolvimento de bibliotecas (.jar) de tags e componentes Seam, bem como arquivos
em JavaScript e CSS (Cascading Style Sheet). Tal ponto não foi abordado neste estudo
pelo fato de que este trabalho pelo fato de não ser suportado pelo editor visual de
páginas do Red Had Developer Studio CR1.
7 . Referências
Allen, D. (2009) “Seam in Action”, Greenwich, Manning Publications Co.
Almeida, E. S. et al. (2008) “CRUISE – Component Reuse In Software Engineering”,
http://cruise.cesar.org.br/ , Outubro.
Apache. (2009) “Apache MyFaces”. http://wiki.apache.org/myfaces/ . Abril.
Bauer, C.; King, A. G. (2007). “Java Persistence with Hibernate”, Greenwich, Manning
Publications Co.
Fayad, M.; Schmidt, D. C. (2008) “Object-Oriented Application Frameworks”,
http://www.cs.wustl.edu/~schmidt/CACM-frameworks.html/, Outubro.
Gamma, E. et al. (1994) “Design Patterns: Elements of Reusable Object-Oriented
Software”, Hardcover, Addison-Wesley Professional
Gibson, A. (2009) “Seam and Spring Comparasion”,
http://www.andygibson.net/articles/seam_spring_comparison/html_single/, Abril
Gradecki, J.D.; Pugh, E. (2004) “Professional Hibernate”, Indianapolis, Wiley Pulishing
Inc.
Hibernate. (2009) “Hibernate - relational persistence for idiomatic Java”,
http://www.hibernate.org/hib_docs/v3/reference/en-US/pdf/hibernate_reference.pdf,
Maio.
Jboss. (2009) “RichFaces Developer Guide”, http://www.jboss.org/file-
access/default/members/jbossrichfaces/freezone/docs/devguide/en/pdf/richfaces_user
sguide.pdf, Maio.
Mentawai. (2009) “Mentawai Web Framework”. http://www.mentaframework.org/.
Abril
16. Neighbors, J. M. (1980) “Software Construction Using Components”, PhD Thesis,
California, University of California.
NetBeans. (2009) “NetBeans IDE 6.5 Features”.
http://www.netbeans.org/features/web/index_pt_BR.html. Abril.
Pressman, R. S. (1995) “Engenharia de software”, São Paulo, Makron Books.
Red Hat. (2008) “JBoss Developer Studio 1.0”.
http://www.br.redhat.com/pdf/developers/JBoss_Developer_Studio.pdf, Setembro.
Seamframework. (2009) “Seam – contextual components”.
http://docs.jboss.com/seam/2.1.1.GA/reference/en-US/pdf/seam_reference.pdf,
Setembro.