Java Web
Seam Framework
Um overview sobre o framework contextual para Java Enterprise
LEAD: BOX
De que se trata o artigo:
O artigo apresenta o Seam Framework destacando algumas de suas principais características.
Para que serve:
Existem diferentes frameworks de apoio ao desenvolvimento de aplicações java web no mercado. É importante conhecer as principais características de cada um para saber em que situações cada framework é mais adequado. Neste contexto, este artigo apresenta algumas das principais características do Seam Framework.
Em que situação o tema é útil:
O seam framework apóia o desenvolvimento de aplicações java web. Ele traz um conjunto de características de forma a facilitar o desenvolvimento de aplicações.
A plataforma Java oferece diversas opções para desenvolvimento de aplicações para a Web. Além do maduro JSP/Servlet, há vários frameworks disponíveis no mercado, cada um com suas vantagens e desvantagens. Dentre os mais famosos, estão o Struts e o JavaServer Faces, além dos brasileiros VRaptor e Mentawai. Porém, há muitas críticas de que as configurações são onerosas, que eles têm muito XML que acaba impactando diretamente na produtividade.
Tomando como foco o JavaServer Faces, existem algumas questões criticadas por vários desenvolvedores. O excesso de configuração em XML, por exemplo, requer tempo de implementação e se mostra ineficiente durante refatorações, mesmo utilizando ferramentas avançadas. Outro motivo de críticas é a ausência de suporte padrão a requisições baseadas no protocolo HTTP/GET. Estas e outras questões acabam dificultando uma maior adoção do framework.
Diante destes e de outros aspectos, uma equipe de desenvolvimento liderada por Gavin King desenvolveu o Jboss Seam com intuito de simplificar o desenvolvimento. O Seam é inspirado em diversos princípios, como unificação da camada de negócios, integração de EJB 3 e JSF, suporte a AJAX, incentivo a anotações, integração com business process e fácil integração com testes unitários como JUnit e TestNG.
É notável o sucesso do Jboss Seam, tanto que, alguns dos melhores recursos serão padronizados na JSR 299, também conhecida como Web Beans. Com o lançamento do Web Beans, espera-se que o Seam irá oferecer os recursos do Web Beans - como desenvolvimento do modelo de negócios - e continuará oferecendo os recursos de segurança, envio de e-mails e geração de documentos PDF’s e planilhas eletrônicas.
A partir de agora, analisaremos algumas das principais características do Seam Framework.
Seam Core
O contexto de componentes é coração do Seam. Ele é responsável por integrar Entity Beans, Session Beans Statefull e Statelss, Message-driven Beans e Java Beans. Fornece também suporte a interceptadores e faz a injeção de dependências de maneira unificada. Os contextos que o Seam suporta serão abordados a seguir.
Estes componentes, para serem reconhecidos dentro do contexto Seam, precisam ser anotados com a anotação @Name(”nomeComponente”). Como convenção, componentes buit-in têm o nome devidamente qualificado, recomendável também para o desenvolvimento de grandes projetos. Os componentes são instanciados e adicionados usando o nome definido pela anotação Name, facilitando a obtenção do mesmo programaticamente.
A injeção de dependências é implementada de forma peculiar. O Seam enfatiza o uso de componentes Statefull, ou seja, todas as referências de um determinado componente devem ser mantidas atualizadas, o que não acontece nos modelos tradicionais de injeção de dependências. Por exemplo, o Spring injeta as dependências durante a inicialização do objeto e as mesmas sobreviverão até a destruição do objeto. Para contextos Stateless funciona bem. Imagine um objeto de sessão que é dependente de um objeto de evento. A referência a este objeto dependente ficará desatualizada. Mantendo-se as referências atualizadas, é possível ter um objeto com escopo maior que seja dependente de um objeto de escopo menor. Logo após a execução de um método do componente, as dependências são “desinjetadas”, recebendo a referência null. Assim, a cada execução de um método do componente as referências atualizadas são através de uma nova injeção de dependências. É possível também “devolver” a referência do objeto a uma determinada variável de contexto - comportamento também conhecido como outject. A injeção de dependências é controlada com o uso das anotações @In para injeção e @Out para outject.
Por padrão, todas chamadas ocorrem dentro de um contexto transacional. Basicamente, conhecemos dois tipos de transações: isoladas e uma transação para cada requisição. Porém, dentro de uma aplicação com baixo nível de acoplamento, o uso de transações isoladas não resolverá o problema, nem o uso de uma transação por requisição dará a garantia de dizer ao usuário se a transação foi concluída, uma vez que é necessária a renderização total da resposta para concluir a transação. Diante dos problemas existentes, o Seam oferece uma solução interessante para o controle de transações. ...