Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-Graduação (2009)

16
Ferramentas para desenvolvimento web com produtividade Adriano T. Souza 1 , Evando C. Pessini 1 , Ivonei de F. Silva 1 1 Departamento de Informática Universidade Estadual do Oeste do Paraná (UNIOESTE) – Cascavel – PR – Brasil [email protected], [email protected], [email protected] 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-

Transcript of Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-Graduação (2009)

Ferramentas para desenvolvimento web com produtividade

Adriano T. Souza1, Evando C. Pessini1, Ivonei de F. Silva1

1Departamento de Informática Universidade Estadual do Oeste do Paraná (UNIOESTE) – Cascavel – PR – Brasil

[email protected], [email protected], [email protected]

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-

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:

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

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

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].

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

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.

Este sistema teve apenas um caso de uso que representa o lançamento de pedidos de venda. conforme figura 4.

A figura 5 trás o diagrama de sequência que demonstra o fluxo de ações e respostas do sistema.

Figura 3. Diagrama de classes do sistema de pedidos de venda

Figura 4. 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.

Figura 5. Diagrama de classes do sistema de pedidos de venda

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.

Quadro 1: Configurações do 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>

O quadro 2 apresenta as configurações adicionadas ao 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.

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.

Quadro 2: Configurações do 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 3: Configurações do arquivo components.xml para entity converter

<ui:hibernate-entity-loader session="#{seamDataBase}"/><ui:entity-converter name="entityConverter" />

Quadro 4: Utilização do entity converter em paginas JSF

<h:selectOneMenu value="#{component.targetValueObject}" ><s:selectItems value="#{component.listPersistentObjects}"

var="myObject" label="#{myObject.labelAttribute}" />

<s:convertEntity /> </h:selectOneMenu>

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

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.

Table 1. Comparativo com a plataforma legada

CaracterísticaAmbiente Legado

Ambiente 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 volume de dados e acesso simultâneo

Atende Atende

Possibilidade de integração com outros sistemas co-existentes

Atende parcialmente

Atende

Consolidação da tecnologia no mercado Atende Atende

Possibilidade de agregar suporte empresarial a partir dos desenvolvedores das tecnologias escolhidas

Não Atende Atende

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

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_usersguide.pdf, Maio.

Mentawai. (2009) “Mentawai Web Framework”. http://www.mentaframework.org/. Abril

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.