RONG>

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

Quer ler esse conteúdo completo? Tenha acesso completo