SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Downloaden Sie, um offline zu lesen
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-
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.
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.
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.
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
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
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

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

Weitere ähnliche Inhalte

Was ist angesagt?

T@rget trust design de aplicativos css e skinning
T@rget trust   design de aplicativos css e skinningT@rget trust   design de aplicativos css e skinning
T@rget trust design de aplicativos css e skinningTargettrust
 
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User InterfaceDesenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User InterfaceDomingos Teruel
 
Dalton Sergio Leonardo Pt Currículo 20160803
Dalton Sergio Leonardo Pt  Currículo 20160803Dalton Sergio Leonardo Pt  Currículo 20160803
Dalton Sergio Leonardo Pt Currículo 20160803Dalton Sergio Leonardo
 
TDC2011: Arquitetura de Software Enterprise
TDC2011: Arquitetura de Software EnterpriseTDC2011: Arquitetura de Software Enterprise
TDC2011: Arquitetura de Software EnterpriseDr. Spock
 
Engenharia De Software Baseada Em Componentes
Engenharia De Software Baseada Em ComponentesEngenharia De Software Baseada Em Componentes
Engenharia De Software Baseada Em Componentesigordsm
 
4º FastShow - WPF Windows Presentation Foundation Overview
4º FastShow - WPF Windows Presentation Foundation Overview4º FastShow - WPF Windows Presentation Foundation Overview
4º FastShow - WPF Windows Presentation Foundation Overviewqualidatavix
 
Desenvolvimento web com Software Livre
Desenvolvimento web com Software LivreDesenvolvimento web com Software Livre
Desenvolvimento web com Software LivreRuan Carvalho
 
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...tdc-globalcode
 
Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...
Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...
Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...Glauco Vinicius Argentino de Oliveira
 
Novidades no Windows Mobile Line of Business Solution Accelerator 2008
Novidades no Windows Mobile Line of Business Solution Accelerator 2008Novidades no Windows Mobile Line of Business Solution Accelerator 2008
Novidades no Windows Mobile Line of Business Solution Accelerator 2008Pedro Lamas
 
Desenvolvimento de Aplicações com Visual Studio
Desenvolvimento de Aplicações com Visual StudioDesenvolvimento de Aplicações com Visual Studio
Desenvolvimento de Aplicações com Visual StudioGeovani Ferreira Gonçalves
 
Frameworks da web - Uma ferramenta de reutilização de software
Frameworks da web - Uma ferramenta de reutilização de softwareFrameworks da web - Uma ferramenta de reutilização de software
Frameworks da web - Uma ferramenta de reutilização de softwareThomas Kanzig
 
O comparativo de arquiteturas de software monolíticas em relação a arquitetur...
O comparativo de arquiteturas de software monolíticas em relação a arquitetur...O comparativo de arquiteturas de software monolíticas em relação a arquitetur...
O comparativo de arquiteturas de software monolíticas em relação a arquitetur...Emmanuel Neri
 

Was ist angesagt? (17)

T@rget trust design de aplicativos css e skinning
T@rget trust   design de aplicativos css e skinningT@rget trust   design de aplicativos css e skinning
T@rget trust design de aplicativos css e skinning
 
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User InterfaceDesenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
 
Dalton Sergio Leonardo Pt Currículo 20160803
Dalton Sergio Leonardo Pt  Currículo 20160803Dalton Sergio Leonardo Pt  Currículo 20160803
Dalton Sergio Leonardo Pt Currículo 20160803
 
TDC2011: Arquitetura de Software Enterprise
TDC2011: Arquitetura de Software EnterpriseTDC2011: Arquitetura de Software Enterprise
TDC2011: Arquitetura de Software Enterprise
 
Engenharia De Software Baseada Em Componentes
Engenharia De Software Baseada Em ComponentesEngenharia De Software Baseada Em Componentes
Engenharia De Software Baseada Em Componentes
 
4º FastShow - WPF Windows Presentation Foundation Overview
4º FastShow - WPF Windows Presentation Foundation Overview4º FastShow - WPF Windows Presentation Foundation Overview
4º FastShow - WPF Windows Presentation Foundation Overview
 
Visual Studio ALM
Visual Studio ALMVisual Studio ALM
Visual Studio ALM
 
FabricioDoi
FabricioDoiFabricioDoi
FabricioDoi
 
O programador php
O programador phpO programador php
O programador php
 
Arquitetura MVC
Arquitetura MVCArquitetura MVC
Arquitetura MVC
 
Desenvolvimento web com Software Livre
Desenvolvimento web com Software LivreDesenvolvimento web com Software Livre
Desenvolvimento web com Software Livre
 
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
 
Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...
Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...
Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...
 
Novidades no Windows Mobile Line of Business Solution Accelerator 2008
Novidades no Windows Mobile Line of Business Solution Accelerator 2008Novidades no Windows Mobile Line of Business Solution Accelerator 2008
Novidades no Windows Mobile Line of Business Solution Accelerator 2008
 
Desenvolvimento de Aplicações com Visual Studio
Desenvolvimento de Aplicações com Visual StudioDesenvolvimento de Aplicações com Visual Studio
Desenvolvimento de Aplicações com Visual Studio
 
Frameworks da web - Uma ferramenta de reutilização de software
Frameworks da web - Uma ferramenta de reutilização de softwareFrameworks da web - Uma ferramenta de reutilização de software
Frameworks da web - Uma ferramenta de reutilização de software
 
O comparativo de arquiteturas de software monolíticas em relação a arquitetur...
O comparativo de arquiteturas de software monolíticas em relação a arquitetur...O comparativo de arquiteturas de software monolíticas em relação a arquitetur...
O comparativo de arquiteturas de software monolíticas em relação a arquitetur...
 

Andere mochten auch

Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Adriano Teixeira de Souza
 
Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7PeslPinguim
 
Curso Básico de Java - Aula 3
Curso Básico de Java - Aula 3Curso Básico de Java - Aula 3
Curso Básico de Java - Aula 3PeslPinguim
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaCharles Jungbeck
 
Usabilidade e Arquitetura de Informação de Websites de Governos Municipais
Usabilidade e Arquitetura de Informação de Websites de Governos MunicipaisUsabilidade e Arquitetura de Informação de Websites de Governos Municipais
Usabilidade e Arquitetura de Informação de Websites de Governos MunicipaisMarcelo Ramos
 
Java vetores e matrizes
Java   vetores e matrizesJava   vetores e matrizes
Java vetores e matrizesArmando Daniel
 
SC - EAD - SLAP - Apresentação
SC - EAD - SLAP - ApresentaçãoSC - EAD - SLAP - Apresentação
SC - EAD - SLAP - ApresentaçãoUFPB
 
ACII - SLAP - Apresentacao
ACII - SLAP - ApresentacaoACII - SLAP - Apresentacao
ACII - SLAP - ApresentacaoUFPB
 
ACII - SL03 - Armazenamento Secundario
ACII - SL03 - Armazenamento SecundarioACII - SL03 - Armazenamento Secundario
ACII - SL03 - Armazenamento SecundarioUFPB
 
ACII - SL06 - Virtualizacao
ACII - SL06 - VirtualizacaoACII - SL06 - Virtualizacao
ACII - SL06 - VirtualizacaoUFPB
 
SC - EAD - SL06 - O Ensino e o Instrutor
SC - EAD - SL06 - O Ensino e o InstrutorSC - EAD - SL06 - O Ensino e o Instrutor
SC - EAD - SL06 - O Ensino e o InstrutorUFPB
 
SC - EAD - SL05 - Criação e Desenvolvimeto de Cursos
SC - EAD - SL05 - Criação e Desenvolvimeto de CursosSC - EAD - SL05 - Criação e Desenvolvimeto de Cursos
SC - EAD - SL05 - Criação e Desenvolvimeto de CursosUFPB
 
RC - SLAP - Apresentação da disciplina de Redes (2011-1)
RC - SLAP - Apresentação da disciplina de Redes (2011-1)RC - SLAP - Apresentação da disciplina de Redes (2011-1)
RC - SLAP - Apresentação da disciplina de Redes (2011-1)UFPB
 
RC - SL01 - Introdução às Redes de Computadores
RC - SL01 - Introdução às Redes de ComputadoresRC - SL01 - Introdução às Redes de Computadores
RC - SL01 - Introdução às Redes de ComputadoresUFPB
 
SC - EAD - SL02 - Contextualização Histórica
SC - EAD - SL02 - Contextualização HistóricaSC - EAD - SL02 - Contextualização Histórica
SC - EAD - SL02 - Contextualização HistóricaUFPB
 

Andere mochten auch (20)

Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
 
Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7
 
Vetores e matrizes
Vetores e matrizesVetores e matrizes
Vetores e matrizes
 
Curso Básico de Java - Aula 3
Curso Básico de Java - Aula 3Curso Básico de Java - Aula 3
Curso Básico de Java - Aula 3
 
JAVA - Vetores
JAVA - VetoresJAVA - Vetores
JAVA - Vetores
 
Trabalho vetores
Trabalho vetoresTrabalho vetores
Trabalho vetores
 
POO - 14 - Vetores
POO - 14 - VetoresPOO - 14 - Vetores
POO - 14 - Vetores
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e Java
 
JAVA - Matrizes
JAVA - MatrizesJAVA - Matrizes
JAVA - Matrizes
 
Usabilidade e Arquitetura de Informação de Websites de Governos Municipais
Usabilidade e Arquitetura de Informação de Websites de Governos MunicipaisUsabilidade e Arquitetura de Informação de Websites de Governos Municipais
Usabilidade e Arquitetura de Informação de Websites de Governos Municipais
 
Java vetores e matrizes
Java   vetores e matrizesJava   vetores e matrizes
Java vetores e matrizes
 
SC - EAD - SLAP - Apresentação
SC - EAD - SLAP - ApresentaçãoSC - EAD - SLAP - Apresentação
SC - EAD - SLAP - Apresentação
 
ACII - SLAP - Apresentacao
ACII - SLAP - ApresentacaoACII - SLAP - Apresentacao
ACII - SLAP - Apresentacao
 
ACII - SL03 - Armazenamento Secundario
ACII - SL03 - Armazenamento SecundarioACII - SL03 - Armazenamento Secundario
ACII - SL03 - Armazenamento Secundario
 
ACII - SL06 - Virtualizacao
ACII - SL06 - VirtualizacaoACII - SL06 - Virtualizacao
ACII - SL06 - Virtualizacao
 
SC - EAD - SL06 - O Ensino e o Instrutor
SC - EAD - SL06 - O Ensino e o InstrutorSC - EAD - SL06 - O Ensino e o Instrutor
SC - EAD - SL06 - O Ensino e o Instrutor
 
SC - EAD - SL05 - Criação e Desenvolvimeto de Cursos
SC - EAD - SL05 - Criação e Desenvolvimeto de CursosSC - EAD - SL05 - Criação e Desenvolvimeto de Cursos
SC - EAD - SL05 - Criação e Desenvolvimeto de Cursos
 
RC - SLAP - Apresentação da disciplina de Redes (2011-1)
RC - SLAP - Apresentação da disciplina de Redes (2011-1)RC - SLAP - Apresentação da disciplina de Redes (2011-1)
RC - SLAP - Apresentação da disciplina de Redes (2011-1)
 
RC - SL01 - Introdução às Redes de Computadores
RC - SL01 - Introdução às Redes de ComputadoresRC - SL01 - Introdução às Redes de Computadores
RC - SL01 - Introdução às Redes de Computadores
 
SC - EAD - SL02 - Contextualização Histórica
SC - EAD - SL02 - Contextualização HistóricaSC - EAD - SL02 - Contextualização Histórica
SC - EAD - SL02 - Contextualização Histórica
 

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

Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Eric Gallardo
 
Java No Setor Público: Produtividade, Flexibilidade e Baixo Custo
Java No Setor Público: Produtividade, Flexibilidade e Baixo CustoJava No Setor Público: Produtividade, Flexibilidade e Baixo Custo
Java No Setor Público: Produtividade, Flexibilidade e Baixo CustoÉberli Cabistani Riella
 
UTILIZANDO O FRAMEWORK JBOSS SEAM PARA ACELERAR O DESENVOLVIMENTO DE APLICAÇÕ...
UTILIZANDO O FRAMEWORK JBOSS SEAM PARA ACELERAR O DESENVOLVIMENTO DE APLICAÇÕ...UTILIZANDO O FRAMEWORK JBOSS SEAM PARA ACELERAR O DESENVOLVIMENTO DE APLICAÇÕ...
UTILIZANDO O FRAMEWORK JBOSS SEAM PARA ACELERAR O DESENVOLVIMENTO DE APLICAÇÕ...Eder Nogueira
 
BIODATA: SOFTWARE WEB PARA GERENCIAMENTO DE COLETA DE DADOS BIOMÉDICOS
BIODATA: SOFTWARE WEB PARA GERENCIAMENTO DE COLETA DE DADOS BIOMÉDICOSBIODATA: SOFTWARE WEB PARA GERENCIAMENTO DE COLETA DE DADOS BIOMÉDICOS
BIODATA: SOFTWARE WEB PARA GERENCIAMENTO DE COLETA DE DADOS BIOMÉDICOSAdilmar Dantas
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev IntroduçãoMarcio Marinho
 
WebSphere 8 Intro (pt-BR)
WebSphere 8 Intro (pt-BR)WebSphere 8 Intro (pt-BR)
WebSphere 8 Intro (pt-BR)Juarez Junior
 
Padrões de Projeto J2EE para Aplicações Web
Padrões de Projeto J2EE para Aplicações WebPadrões de Projeto J2EE para Aplicações Web
Padrões de Projeto J2EE para Aplicações WebDenis L Presciliano
 
Projeto Indiana
Projeto IndianaProjeto Indiana
Projeto Indianahellequin
 
Jsf – Java Sever Faces
Jsf – Java Sever FacesJsf – Java Sever Faces
Jsf – Java Sever Facesbielgott
 
Plataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDKPlataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDKRyan Padilha
 
Reutilização
ReutilizaçãoReutilização
Reutilizaçãoemjorge
 
Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareNorberto Santos
 
Parte 1 Introducao
Parte 1 IntroducaoParte 1 Introducao
Parte 1 Introducaoguest7ff4e2
 

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

Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
 
Oficina cake php
Oficina cake phpOficina cake php
Oficina cake php
 
Curso jsf
Curso jsfCurso jsf
Curso jsf
 
Asp net mvc
Asp net mvcAsp net mvc
Asp net mvc
 
Java No Setor Público: Produtividade, Flexibilidade e Baixo Custo
Java No Setor Público: Produtividade, Flexibilidade e Baixo CustoJava No Setor Público: Produtividade, Flexibilidade e Baixo Custo
Java No Setor Público: Produtividade, Flexibilidade e Baixo Custo
 
UTILIZANDO O FRAMEWORK JBOSS SEAM PARA ACELERAR O DESENVOLVIMENTO DE APLICAÇÕ...
UTILIZANDO O FRAMEWORK JBOSS SEAM PARA ACELERAR O DESENVOLVIMENTO DE APLICAÇÕ...UTILIZANDO O FRAMEWORK JBOSS SEAM PARA ACELERAR O DESENVOLVIMENTO DE APLICAÇÕ...
UTILIZANDO O FRAMEWORK JBOSS SEAM PARA ACELERAR O DESENVOLVIMENTO DE APLICAÇÕ...
 
BIODATA: SOFTWARE WEB PARA GERENCIAMENTO DE COLETA DE DADOS BIOMÉDICOS
BIODATA: SOFTWARE WEB PARA GERENCIAMENTO DE COLETA DE DADOS BIOMÉDICOSBIODATA: SOFTWARE WEB PARA GERENCIAMENTO DE COLETA DE DADOS BIOMÉDICOS
BIODATA: SOFTWARE WEB PARA GERENCIAMENTO DE COLETA DE DADOS BIOMÉDICOS
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev Introdução
 
1409243945064
14092439450641409243945064
1409243945064
 
WebSphere 8 Intro (pt-BR)
WebSphere 8 Intro (pt-BR)WebSphere 8 Intro (pt-BR)
WebSphere 8 Intro (pt-BR)
 
RAD
RADRAD
RAD
 
Padrões de Projeto J2EE para Aplicações Web
Padrões de Projeto J2EE para Aplicações WebPadrões de Projeto J2EE para Aplicações Web
Padrões de Projeto J2EE para Aplicações Web
 
Projeto Indiana
Projeto IndianaProjeto Indiana
Projeto Indiana
 
Conisli
ConisliConisli
Conisli
 
Jsf – Java Sever Faces
Jsf – Java Sever FacesJsf – Java Sever Faces
Jsf – Java Sever Faces
 
Mini curso JBC
Mini curso JBCMini curso JBC
Mini curso JBC
 
Plataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDKPlataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDK
 
Reutilização
ReutilizaçãoReutilização
Reutilização
 
Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de Software
 
Parte 1 Introducao
Parte 1 IntroducaoParte 1 Introducao
Parte 1 Introducao
 

Mehr von Adriano Teixeira de Souza

Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasAdriano Teixeira de Souza
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Adriano Teixeira de Souza
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Adriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSAdriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesAdriano Teixeira de Souza
 

Mehr von Adriano Teixeira de Souza (20)

Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
 
Estrutura de dados em Java - Recursividade
Estrutura de dados em Java - RecursividadeEstrutura de dados em Java - Recursividade
Estrutura de dados em Java - Recursividade
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
 
Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)
 
Responsive web design
Responsive web designResponsive web design
Responsive web design
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
 
Estrutura de dados - Árvores Binárias
Estrutura de dados - Árvores BináriasEstrutura de dados - Árvores Binárias
Estrutura de dados - Árvores Binárias
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
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.