Atenção: esse artigo tem um vídeo complementar. Clique e assista!

De que se trata o artigo:

Seam 3 é marcantemente diferente das versões anteriores do framework, a ponto de até confundir antigos usuários da plataforma Seam. Neste artigo, veremos qual é a nova filosofia por trás do Seam, assim como algumas ferramentas úteis da nova versão: o gerador de código Forge, a biblioteca genérica Solder e o manipulador de exceções Catch. Deste modo, esperamos familiarizar o antigo usuário à nova plataforma.


Em que situação o tema é útil:

Conhecer a versão mais recente do JBoss Seam é importante especialmente para os programadores que utilizam Seam 2. Ainda há muito debate sobre o futuro desta nova versão, então conhecê-la permite que o membro da comunidade dê um feedback útil aos desenvolvedores. Entretanto, desenvolvedores recém-chegados à plataforma também têm muito a ganhar, pois Seam 3 facilita em vários aspectos o desenvolvimento para a plataforma Java EE 6, como ao gerenciar exceções, prover anotações de veto etc.

Resumo DevMan:

Seam 3 é a aguardada evolução do framework web Seam 2, da JBoss. Pesadamente baseado em CDI e Java EE 6, Seam 3 é um software completamente novo quando comparado à versão anterior. Neste artigo vamos entender por que esta versão é tão diferente, o processo em que vem mudando e como utilizar alguns de seus componentes: Forge, Solder e Catch.

Desde que foi lançado pela JBoss em 2006, o framework Seam cresceu em adoção e criou uma rica, ativa e fiel comunidade. A versão 2 de Seam consolidou o sucesso da plataforma, tornando-a uma das mais relevantes no universo do desenvolvimento de Java EE. Sua importância transformou o framework em uma das grandes inspirações na evolução das especificações de Java. Esta influência de Seam pode ser facilmente percebida em especificações como a JSR-299 e a JSR-330.

A Figura 1 apresenta um esquema simplificado da arquitetura de Seam 2. O framework permite trabalhar com JSF, EJB 3 e Hibernate de maneira consistente e fácil. A interação entre estes três componentes é gerenciada pelo núcleo de Seam 2, que provê um sofisticado sistema de injeção de dependências.


Figura 1. Representação simplificada da arquitetura de Seam 2.

Muitas das ideias do core de Seam 2 acabaram por influenciar o CDI, de modo que várias funcionalidades do núcleo passaram a ser fornecidas pela própria plataforma oficial Java EE 6. Isto representou um novo desafio aos desenvolvedores de Seam: se as funcionalidades do núcleo do framework já estão disponíveis na própria plataforma Java EE, o que a nova versão do framework poderá oferecer? A resposta veio com Seam 3.

Ao contrário de seu antecessor, Seam 3 dificilmente pode ser definido como um framework monolítico. Enquanto Seam 2 definia vários aspectos das tecnologias e arquitetura adotadas em sua aplicação, a versão 3 deixa isto em aberto. Na verdade, é mais adequado descrever o novo framework como um conjunto de componentes fracamente acoplados, a serem usados em uma plataforma integrada via CDI. O papel do core de Seam 2 foi delegado a Weld, e Seam 3 tornou-se um conjunto de bibliotecas, provendo ferramentas e facilidades diversas para o desenvolvimento em Java EE. O diagrama da Figura 2 esquematiza a relação da versão 3 da plataforma com um ambiente Java EE 6.


Figura 2. Representação esquemática do papel de Seam 3 em uma pilha Java EE 6.

Em resumo, Seam 3 é mais um conjunto de ferramentas para a nova plataforma Java EE que um framework integrado. Pode-se dizer que, na versão 3, Seam é apenas um conjunto de componentes e Java EE 6 é o framework. Esta nova postura deixou muitos na comunidade confusos, por não conseguirem ver como migrar de uma versão 2 para a mais recente. O fato é que não existe transição fácil: Seam 3 é um produto totalmente novo, com uma filosofia diferente, e dificilmente comparável às versões anteriores. Esta mudança também não veio sem polêmica. Alguns desenvolvedores tradicionais de Seam 2 sentem-se incomodados pela mudança, e reclamam tanto da nova filosofia quanto das implementações, ainda imaturas e pouco documentadas, dos módulos de Seam 3.

Para aquecer ainda mais a discussão, mudanças ainda maiores foram anunciadas. Em um post recente no blog de in.relation.to, os desenvolvedores Shane Bryzak e Pete Muir anunciaram que planejam migrar vários componentes de Seam para outros projetos. Por exemplo, Seam Persistence pode vir a fazer parte do projeto Hibernate, tornando-se o Hibernate CDI; Seam REST iria para o projeto RESTEasy; e Seam Faces se tornaria o componente Faces CDI do projeto RichFaces. Estas propostas despertaram um debate ainda mais acalorado sobre o futuro da família Seam.

Você é um usuário de Seam 2, compreende inglês e acredita que pode colaborar com a discussão? Então participe! Ao fim do artigo, há um link para o fórum em que se debate como deve ser o futuro de Seam. Os desenvolvedores da plataforma aguardam ansiosamente por seu feedback sobre Seam 3.

Apesar disto, algumas tendências parecem propensas a se manter. Seam 3 provavelmente continuará como um framework extremamente portável e modular, e seus componentes serão mantidos, mesmo que em outros projetos. Parece improvável, também, que alguns módulos centrais sejam adotados por outros projetos. Assim, vale a pena estudar, desde já, como Seam 3 funciona, assim como compreender alguns dos componentes mais maduros da plataforma.

Como utilizar Seam 3

Seam 3 pode ser utilizado em qualquer sistema Java EE 6 ou CDI. Como o framework é modular e não exige nenhuma arquitetura específica, qualquer aplicativo deste tipo pode empregar um ou mais módulos de Seam 3. Além disso, como Java EE 6 e CDI são plataformas relativamente recentes, é provável que o framework seja utilizado principalmente em novas aplicações.

Weld archetypes

No artigo da Edição 94 da Java Magazine, vimos como criar um projeto CDI: basta acrescentar um arquivo beans.xml ao diretório META-INF ou WEB-INF de uma aplicação Web – com alguma configuração a mais caso a aplicação seja implantada em um container de servlets (como Tomcat ou Jetty), ao invés de um servidor de aplicação compatível Java EE 6. Uma solução mais prática é gerar um projeto Java EE 6 através de Maven archetypes. Existem dois archetypes para Weld: um cria projetos para servidores de aplicação e outro gera aplicações CDI para containers de servlets. A chamada abaixo cria uma aplicação a ser instalada em servidores Java EE 6:


  mvn archetype:generate -DarchetypeArtifactId=jboss-javaee6-webapp -DarchetypeGroupId=org.jboss.weld.archetypes -DgroupId=br.com.devmedia.seam3 -DartifactId=aplicacaoJavaEE6 

Naturalmente, os valores das propriedades groupId e artifactId devem ser alterados para cada projeto. Para gerar uma aplicação a ser implantada em um container de servlets, deve-se mudar o valor do atributo archetypeArtifactId para jboss-jsf-weld-servlet-webapp.

Uma vez que se tenha criado a aplicação CDI, utilizar Seam 3 consiste em basicamente adicionar o JAR do módulo desejado ao classpath do projeto. Isto pode ser feito manualmente, baixando o módulo, assim como suas dependências, e acrescentando-o ao projeto. Maven, porém, pode tornar este trabalho muito mais simples, de modo que a maneira mais comum de se começar uma aplicação Seam 3 é gerar o projeto e gerenciar as dependências via Maven. Assumiremos que o leitor gerenciará seus projetos desta maneira.

Seam Forge

Outra maneira de se iniciar um projeto Seam 3 é utilizando o Seam Forge. Este sucessor do antigo seam-gen facilita a criação de novos projetos ao gerar boa parte do código e arquitetura da nova aplicação – uma técnica frequentemente denominada scaffolding. Seam Forge é especialmente projetado para trabalhar com JBoss AS 7, embora suas aplicações possam ser portáveis.

...

Quer ler esse conteúdo completo? Tenha acesso completo