Your SlideShare is downloading. ×
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-Graduação (2009)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

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

2,219
views

Published on

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,219
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
50
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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çãoO processo de desenvolvimento de software diz respeito a uma série de atividades quevisam a produção de programas de computador [Pedrycs e Peters 2001]. Tais atividadesvão desde o levantamento das funcionalidades que o software deverá apresentar até omomento em que o produto estará pronto para uso. Pedrycs e Peters (2001) elegem trêsfases 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, bemcomo riscos e plano de testes; Projeto – mostra como o sistema deve efetuar cálculos esua estrutura; Implementação – é a fase de codificação do software, produção dedocumentação e testes. O projeto e implementação do software deve ter em vista questões que poderãosurgir durante o desenvolvimento e o tempo de vida do mesmo, tais como: mudança derequisitos, prazos curtos e, posterior manutenção do produto. Um software de qualidadedeve trazer em sua arquitetura características como: usabilidade – facilidade paraaprender e operar o software; manutenibilidade – diminuir o esforço empenhado nareparação de erros; flexibilidade – permitir que novas funcionalidades possam serimplementadas com o mínimo de impacto na estrutura do sistema; e interoperabilidade– o sistema deve possibilitar sua integração com demais sistemas existentes [Pressman1995]. A produtividade no desenvolvimento de software é essencial para qualquerorganização. Alcançá-la, infelizmente, não é para todas as empresas. A busca pelaprodutividade 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 contribuirpara o aumento da produtividade no desenvolvimento de software. Dentre elas, destaca-
  • 2. se o reuso de software, colaborando efetivamente para o aumento da produtividade ereduçã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 quepromovem o reuso. Ferramentas, denominadas de “frameworks”, tais como, Hibernate[Bauer e King 2007] e RichFaces [JBoss 2009] contribuem para o aumento naprodutividade.2 . FerramentasCom base nos requisitos não funcionais citados, foi proposto um conjunto deferramentas e frameworks visando o desenvolvimento de software web de forma maisprodutiva que a plataforma legada da Cooperativa Agroindustrial C.Vale, a qualbaseava-se apenas em um container web Tomcat executando páginas Java ServerPages (JSP) com todas as regras de negócio. Foi observado que neste ambiente todos ossistemas da intranet estavam acoplados em um único projeto Java Web Application.Tendo em vista estas questões, foi elaborado uma estrutura para desenvolvimento desoftware com características que dão maior flexibilidade que o ambiente atual e quepermita maior facilidade para manutenção nas aplicações da C. Vale. Os recursosselecionados 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 contextoda aplicação; e Red Hat Developer Studio como ambiente de desenvolvimento.2.1 . HibernateSegundo Gradeck e Pugh (2004), o Hibernate é um middleware Java projetado paraprover um completo mapeamento objeto-relacional, simplificando significativamente otrabalho de persistência de objetos em banco de dados relacional. Para utilização do Hibernate é necessário descrever o mapeamento do objetoJava tendo em vista o banco de dados relacional. O mapeamento deve dizer qual aentidade do banco de dados que a classe Java irá representar, e as referentes colunasatravés dos atributos. Também é necessário parametrizar um identificador da classe queserá utilizado para representar a singularidade do objeto quando do seu armazenamentono 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 identifye 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 comerciaise de código aberto, bastando apenas que haja um driver JDBC (Java DatabaseConnectivity). Este framework trabalha por padrão com o SQL (Structured QueryLanguage) básico, e permite que seja feita alteração na configuração para se trabalharcom 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 . RichFacesO RichFaces é um framework que permite adicionar recursos de AsynchronousJavaScript And XML (AJAX) em aplicações Java Server Faces (JSF). Este framework éintegrado ao ciclo de vida JSF e permite invocar, via JavaScript, validadores econversores JSF bem como os demais JavaBeans inseridos no contexto JSF. ORichFaces também disponibiliza um conjunto de diversos componentes (com AJAXnativo) que podem ser utilizados para o desenvolvimento de interfaces ricas, inclusivecom suporte a temas (skins) [JBoss 2009].2.3 . JBoss SeamO JBoss Seam define um modelo de componentes uniformes para as regras de negócioda aplicação. Este framework tem componentes statefull, ou seja, que guardam seuestado durante a execução da aplicação de acordo com o contexto associado aosmesmos. Existem vários contextos definidos nesta ferramenta, tais como: event(requisição), session, business process, application e conversation. Dentre estes, ocontexto conversation, se mostra como diferencial deste framework, pois nele o estadodo componente é mantido durante uma série de requisições web em uma interação comdo usuário [Seamframework 2009]. Com o Seam é possível fazer uma integração consistente de JSF, um modelo decomponentes para camada de apresentação, com Enterprise Java Bean 3 (EJB3) queestá presente no JEE a partir da versão 5 e pode ser utilizado para implementar regras denegó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 JSFdisponíveis no mercado, o RichFaces e o ICEfaces. Estas soluções possibilitam a adiçãode recursos de AJAX em páginas web sem a necessidade de se escrever códigosJavaScript [Seamframework 2009] O Seam ainda possui uma série de recursos relevantes, dentre os quais pode-secitar: 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 deannotations. 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 StudioO Red Hat Developer Studio 1.0 CR1, é a versão release candidate do produto JBossDeveloper Studio, a qual foi distribuída gratuitamente. Esta versão se mostra estável ecom uma gama de recursos relevantes para o desenvolvimento de aplicações web. Esta ferramenta é uma Integrated Development Environment (IDE) baseada noEclipse 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 (WhatYou See Is What You Get) com a renderização do conteúdo de páginas web em tempo dedesenvolvimento, incluindo os componentes JSF e RichFaces [Red Hat 2008]. EstaIDE disponibiliza várias paletas de componentes que vão desde os elementos básicos daAPI (Application Programming Interface) JSF aos componentes com AJAX que estãodisponíveis no framework RichFaces.3 . A seleção das FerramentasA 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 outrastecnologias e frameworks, maturidade da ferramenta no mercado, custo e possibilidadede agregar suporte empresarial. Foram analisadas ferramentas para framework de persistência, framework ModelView Control (MVC), framework Java Server Faces (JSF) com AJAX integrado, eambiente de desenvolvimento.3.1 . Framework de persistênciaNo quesito persistência e mapeamento objeto-relacional (ORM) foi analisado osrecursos da especificação Java Persistence API (JPA) e do framework Hibernate sendoutilizado a partir da sua implementação core com annotations. Neste contexto foi analisado os detalhes dos recursos para decidir qual destesutilizar. 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 dasclasses persistentes que trazem grande impacto na manipulação de dados em largaescala, os quais são apresentados a seguir. A anotação @Fetch pode ser utilizada com parâmetro FetchMode.JOIN emconjunto com FetchType.EAGER para que a entidade relacionada no atributo sejaassociada à busca com join na consulta SQL (Structured Query Language) do objetomapeado. Esta anotação também pode ser utilizada com parâmetroFetchMode.SUBSELECT em conjunto com FetchType.LAZZY. Desta forma os dados deatributos com coleções em uma entidade “A” são carregados de uma só vez para todasas instâncias de “A” em uma lista consultada previamente no banco de dados, aocontrário do modo padrão, onde é feita uma consulta a separada para os atributos comcoleções em cada instância de “A” [Bauer e King 2007]. Outro pronto interessante é a anotação @GenericGenerator que pode serutilizada para geração de valor para chave-primária de uma entidade que é baseada emrelacionamento (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 daanotação @Cascade(value=CascadeType.DELETE_ORPHAN), em que a lista deobjetos filhos persistidos irá refletir o último estado desta após uma gravação do objetopai, considerando que os elementos filhos não contidos na lista no momento dagravaçã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. Outroframework também analisado foi o brasileiro Mentawai, embora este tenha como umade suas primícias a simplicidade, e contemple uma variedade de funcionalidades, omesmo ainda tem uma pequena base de usuários e literatura, consequentemente aresolução de problemas no âmbito de desenvolvimento poderia se tornar maisimprodutiva [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 decontrole, injeção de dependência, gerenciamento de transações e gerenciamento deestado de um componente. Todavia, o framework Spring não pretende ser uma soluçãocompleta para o desenvolvimento de aplicações web, esperando-se do desenvolvedor aescolha de seu mecanismo de segurança, framework da camada de visualização daaplicação e AJAX. Por outro lado, o Seam trás um conjunto completo de recursosfortemente integrados para o desenvolvimento de aplicações, dentre os quais podem sercitados: iText - para geração de documentos PDF; RichFaces e Ajax4JSF - paraimplementação da camada de apresentação; Seam-gen - para geração inicial deaplicações web; Identificação; Arquivo de configuração pages.xml - para adicionarcomportamento na aplicação em tempo de navegação; e utilização de Facelets paraelaboração de templates [Gibson 2009].
  • 6. 3.3 . Framework Java Server Faces com AJAXPara composição dos recursos de interfaces ricas (RIA - Rich Internet Applications)baseados na especificação Java Server Faces (JSF) foram analisados os frameworksMyFaces, desenvolvido pela Fundação Apache; e RichFaces, que foi desenvolvidoinicialmente 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 eengloba vários subprojetos, dentre os quais estão: Tomahawk – que possui uma grandevariedade de componentes visuais; Trinidad – é baseado no ADF Faces, frameworkinicialmente desenvolvido pela Oracle e doado ao projeto Myfaces o qual trás o suportea AJAX; e o Tobago – que apresenta como principal destaque o gerenciador de layout[Apache 2009]. O RichFaces disponibiliza ao desenvolvedor uma gama de componentes visuaisque podem ser utilizados no desenvolvimento de interfaces e tem integrado nativamenteo Ajax4JSF que adiciona recursos de AJAX à aplicação JSF. Este framework se integrafacilmente 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 RichFacessã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 desenvolvimentoPara 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 desenvolvimentopor editor visual; assistente de criação de classes entidades de persistência a partir dobanco de dados e suporte a edição das mesmas; e estabilidade da ferramenta. O Netbeans proporciona um ambiente com variedade de recursos para oambiente de desenvolvimento na plataforma Java Enterprise Edition. Dentre estes,podem ser citados: suporte pleno ao desenvolvimento com Hibernate e Java PersistenceAPI, com assistente para geração e customização das classes entidades a partir do bancode dados; suporte a edição de código de páginas web com tags JSF, e um ambiente dedesenvolvimento visual restrito a seu framework Visual Web JavaServer Faces; comrelação a questão da estabilidade, foi verificado problemas de performance nainicialização da IDE, onde a ferramenta ficava inoperante em um tempo acima de 30segundos; e na questão de estabilidade, foi verificado o travamento da ferramenta emvárias situações onde se fazia a utilização das teclas [ctrl]+[space] para invocar orecurso de assistente de código [Netbeans 2009]. Tal como o Netbeans, a ferramenta Red Hat Developer Studio possui grandequantidade 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 umprojeto JPA fora do projeto web onde está se desenvolvendo uma aplicação. Comrelaçã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 quaispodem ser citados o editor visual de páginas, com suporte nativo ao frameworksRichFaces, paleta de componentes desta biblioteca bem como do JSF padrão e JBossSeam. Esta ferramenta também possui o suporte pleno a edição de tags JSF [Red Hat2008].3.5 . Considerações sobre a seleção das ferramentasA decisão pelo conjunto de ferramentas a serem utilizadas se baseou em seis fatores, osquais são: a riqueza de recursos; facilidade de aprendizagem e desenvolvimento;estabilidade de cada ferramenta no contexto do conjunto de recursos; possibilidade deagregar suporte do fornecedor; e principalmente, a estabilidade e performance. A partir das observações anteriormente citadas, verificou-se que o conjunto deferramentas desenvolvido pela Red Hat/JBoss se adequaria melhor ao ambiente daagroindústria C.Vale, tendo em vista que seu conjunto de frameworks é bem aceito pelomercado, bem documentado, possui integração nativa entre todos elementos doconjunto, e ainda pode-se agregar suporte empresarial às ferramentas por meio dodesenvolvedor. A partir da seleção da ferramenta, iniciou-se a construção do protótipo, comobjetivo demonstrar a utilização dos frameworks selecionados.4 . Aplicação das ferramentasO protótipo para aplicação das ferramentas foi desenvolvido a partir de uma arquiteturaModel View Control (MVC), com a camada de visão baseada no framework RichFaces,recursos de AJAX implementados com framework Ajax4JSF, e recursos de templatescom framework Facelets em eXtensible Hypertext Markup Language (XHTML) . Foi utilizado o JBoss Seam na implementação da camada de controle, comabordagem 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 omapeamento objeto-relacional com o Hibernate fazendo uso de conexão ao banco dedados por meio de um datasource configurado no container JEE. É abordada questõesde 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 deuma tela de pedidos de venda e seus cadastros correlatos, conforme especificação aseguir. A figura 3 apresenta o diagrama das classes Plain Old Java Objects (POJOs) aser 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 pedidosde 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 erespostas do sistema.
  • 9. Figura 5. Diagrama de classes do sistema de pedidos de venda4.1 . Configuração dos arquivos XML para funcionamento da aplicaçãoAplicações desenvolvidas sobre o conjunto de framework apresentados neste trabalhodevem ser configuradas a partir de alguns arquivos em XML (eXtensible MarkupLanguage), 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 propriedadeslog4j.properties – definição do comportamento do sistema de log do Hibernate e Seam;seam.properties – aquivo vazio, apenas exigido pelo framework; emessages_pt_BR.properties – tradução das mensagens JSF e do framework JBoss Seam.
  • 10. 4.2 . Otimização do HibernateA má utilização do Hibernate em um ambiente de produção pode resultar no fracasso daaplicaçã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 ocache de objetos. Deve-se avaliar as entidades onde se têm atributos encapsulados de outraentidade, o qual é constantemente acessado para se possa utilizar a combinação deFetchType.EAGER com @Fetch(FetchMode.JOIN) de forma a reduzir a quantidade deconsultas ao banco de dados para busca de informações originados de chavesestrangeiras [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 destalistagem tendo acesso às coleções filhas. Neste caso pode ser utilizado a combinação deFetchType.LAZZY com @Fetch(FetchMode.SUBSELECT) para que todas as coleçõesfilhas sejam obtidas em uma única consulta ao banco de dados, no momento doprimeiro acesso à coleção filha [Bauer e King 2007]. Outra questão de suma importância para a performance da aplicação é autilização do cache de dados, conhecido como Second Level Cache. O Hibernate podetrabalhar 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 asentidades 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 HibernateA 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 detransação e controle de sessão. O Seam se encarrega de efetuar este controle edisponibilizar a sessão do Hibernate por meio de injeção de dependência na classedefinida como componente de negócio da aplicação. Poucas configurações sãonecessárias para usufruir deste recurso [Seamframework 2009]. O quadro 1 apresenta as configurações adicionadas no arquivohibernate.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 deum atributo injetado na classe de negócio com “@In private Session seamDataBase”; É possível utilizar-se do gerenciamento do Hibernate pelo JBoss Sean para aconversão de listas de entidades em SelectItem utilizados pelo JSF. Para utilização desserecurso, deve ser adicionado no arquivo components.xml os parâmetros contidos noquadro 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 seradicionado à interface web partir da tag apresentada no quadro 4. Neste momento, aentidade selecionada estará disponível de forma integra, podendo ser acessado a partirdo 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 MVCO framework JBoss Seam apresenta alguns recursos sofisticados que dão maiorprodutividade 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 comuso de templates em Facelets. A seguir, serão apresentadas algumas questões que devemser consideradas para que se tenha estabilidade da aplicação e a produtividade nodesenvolvimento. O conjunto JBoss Seam e RichFaces tem por característica o fato de trabalharnativamente 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ãoda interface pode ser descrito em um arquivo XHTML contendo especificação de todosestilos CSS (Cascading Style Sheet), rotinas em JavaScript e seções de conteúdo aserem utilizadas em toda a aplicação [JBoss 2009]. A partir dessa especificação, o desenvolvimento da interface da aplicação podeser feito adicionado a referência ao arquivo de layout em cada página e descrição doconteúdo das seções definidas neste. Pode-se utilizar uma fila de requisições AJAX (queue) para o Ajax4JSF paraeliminar a possibilidade de colisões de requisições durante o tempo de vida de umasolicitacão ao JSF. Pode-se também reduzir a carga do servidor, tendo em vista que afila pode controlar o envio de requisições ao servidor descartando pedidos duplicados[JBoss 2009].5 . Comparativo com a arquitetura de desenvolvimento legadoA partir do desenvolvimento de uma aplicação piloto, foram avaliados alguns aspectosdo 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 aspectosrelacionados a divisão de competências em camadas da aplicação, facilitando assim aadição de novas funcionalidades, definição e localização de pontos de manutenção, eminimização do entrelaçamento de códigos com diferentes responsabilidades naaplicaçã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 deautonomia das API e frameworks utilizados com relação à apresentação dos recursosprogramados a partir de um conjunto mínimo de comandos e parâmetros. A aplicação da componentização diz respeito a possibilidade dedesenvolvimento de bibliotecas de funcionalidades que poderão ser reutilizadas emsistemas posteriormente desenvolvidos ou demais sistemas existentes. Na questão do reuso de rotinas desenvolvidas é avaliado a possibilidade dereutilização de trechos de códigos desenvolvidos na aplicação a partir de diferentespontos de execução na mesma aplicação. No quesito de integração com a plataforma existente foi verificado apossibilidade de convivência de sistemas desenvolvidos a partir da estrutura propostaneste trabalho com as aplicações anteriormente existentes. Foram observados aspectoscomo: autenticação em um sistema comum a todas aplicações web, utilização do mesmoservidor de aplicação, transferência de parâmetros e dados de sessão do servidor entre asaplicações. Com relação à robustez dos frameworks, foram avaliados a capacidade daaplicação trabalhar tabelas de banco de dados acima de 25 mil registros e consumo derecursos do servidor (memória e processamento). A possibilidade de integração com sistemas co-existentes trata da questão decomunicação com demais sistemas existentes na empresa, tais como: mainframe eaplicações em diferentes linguagens. Na avaliação da consolidação da tecnologia no mercado foi verificado aaceitação dos recursos de desenvolvimento pela comunidade de desenvolvedores,documentação disponível e servidores de aplicação disponíveis para execução dasmesmas. No quesito da possibilidade de agregar suporte empresarial a partir dosdesenvolvedores da tecnologia, foi avaliado a prestação de serviços e homologação daplataforma pelo desenvolvedor da ferramenta, bem como a disponibilidade de suportetécnico pelo mesmo. A partir da avaliação destes tópicos foram obtidos os resultados apresentados naTabela 1. Os tópicos foram classificados em: Atende – a ferramenta apresenta todos osrecursos para que o item seja atendido; Atende parcialmente – a ferramenta não possuialgum requisito necessário para que o item seja atendido, conforme definição anterior; eNão atende – a ferramenta não fornece suporte ao recurso desejado.
  • 14. Table 1. Comparativo com a plataforma legada Ambiente AmbienteCaracterística Legado propostoBaixa complexidade de desenvolvimento Não atende AtendeBaixa quantidade de código escrito Não atende AtendeAplicação da componentização Não atende AtendeReuso de rotinas desenvolvidas Atende AtendeIntegração com a plataforma já existente - Atende ParcialmenteRobustez dos frameworks quando do aumento do Atende Atendevolume de dados e acesso simultâneoPossibilidade de integração com outros sistemas co- Atende Atendeexistentes parcialmenteConsolidação da tecnologia no mercado Atende AtendePossibilidade de agregar suporte empresarial a partir Não Atende Atendedos desenvolvedores das tecnologias escolhidas6 . Considerações finais A aplicação das ferramentas citadas neste trabalho podem trazer um aumentosignificativo da produtividade no processo de desenvolvimento de software, visto queabstrai aspectos complexos do processo de desenvolvimento na plataforma Java. Odesenvolvimento de rotinas de persistência de dados desde o tratamento de instruçõesSQL ao gerenciamento das transações, a comunicação da camada de interface comregras de negócio com recursos de AJAX e a implementação de componentes dainterface podem ser aplicados com um nível de programação que mantém o profissionalmais próximo da lógica de sua regra de negócio. Os recursos disponibilizados pelo conjunto de ferramentas apresentadasviabilizam a construção de aplicações com interfaces ricas, e trazem umaimplementação consistente de Java Server Faces. A estabilidade, performance econfiabilidade destas ferramentas trazem um conforto ao desenvolvedor, visto que asnã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 defácil aprendizado e utilização. Em contrapartida, o JBoss Seam exige um maior esforçopara entendimento de seu funcionamento e aproveitamento pleno dos recursosoferecidos. Contudo, após o entendimento da forma como o framework trabalha, sua
  • 15. utilização se torna produtiva. Recursos como gerenciamento de transação, conversoresde entidades, injeção de dependência e contexto de conversação proporcionamflexibilidade 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 umbanco 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 ferramentanão foi utilizada neste estudo devido ao fato de o sistema pré-configurado por ela seapresentar com arquitetura relativamente complexa em vista da estrutura de sistemadesejada pela empresa no momento. Outra questão que pode ser explorada em trabalhos posteriores é odesenvolvimento de bibliotecas (.jar) de tags e componentes Seam, bem como arquivosem JavaScript e CSS (Cascading Style Sheet). Tal ponto não foi abordado neste estudopelo fato de que este trabalho pelo fato de não ser suportado pelo editor visual depáginas do Red Had Developer Studio CR1.7 . ReferênciasAllen, 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 ProfessionalGibson, A. (2009) “Seam and Spring Comparasion”, http://www.andygibson.net/articles/seam_spring_comparison/html_single/, AbrilGradecki, 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.