Este é um post disponível para assinantes MVPou para quem possui Créditos DevMedia. Clique aqui para saber mais!
Seam 3 - Revista Java Magazine 94
Este artigo introduz ao leitor a especificação Contexts and Dependency Injection for Java EE 6 (CDI) e sua implementação, Weld, como um passo necessário no estudo do framework web JBoss Seam 3.
[Artigo disponível no Leitor Digital DevMedia. Clique aqui para acessá-lo]
> Clique aqui para ler todos os artigos da Java Magazine 94
Seam 2 é um poderoso framework de desenvolvimento web da JBoss. Ele permite desenvolver aplicações corporativas de maneira mais rápida e menos burocrática. Continuando a evolução de seu framework, a Red Hat, companhia por trás da JBoss, lançou no início de 2011 a versão 3 do Seam. Tal como seu antecessor, o Seam 3 disponibiliza inúmeras facilidades, tanto em sua API quanto em ferramentas para geração de código (caso em que Maven archetypes fazem o papel do antigo seam-gen). Por outro lado, esta nova versão também apresenta características novíssimas.
Uma diferença marcante de Seam 3 para o Seam 2 é a modularidade. Enquanto Seam 2 era uma ferramenta relativamente pesada e complexa, baseada em EJBs e focada em servidores de aplicações corporativas, o novo framework pode ser visto como um conjunto de módulos independentes a serem utilizados à medida que forem necessários.
O Seam 3 se destaca também por ser o primeiro framework baseado em Contexts and Dependency Injection, ou CDI, uma poderosa e flexível especificação para Java EE. CDI é a cola que une os diversos módulos que compõem o Seam 3 e lhe dá tamanha modularidade. Assim, para compreender como funciona o Seam 3, é importante conhecer o CDI.
Na verdade, o Seam 2 foi uma das grandes inspirações por trás do CDI. Deste modo, não é de se surpreender que a JBoss também tenha desenvolvido o Weld, a implementação de referência da nova especificação. Weld não só é a implementação de referência como também é uma das mais usadas, seja em servidores de aplicações como JBoss AS e GlassFish v3, seja em aplicações rodando em containers de servlets como, por exemplo, o Tomcat. Naturalmente, o Weld também é utilizado pelo framework Seam 3. Aliás, mais que meramente utilizado, Weld é o centro do framework.
Deste modo, nosso objetivo é conhecer o Seam 3, mas é impossível compreender este novo framework sem entender CDI e Weld. Assim, neste artigo, estudaremos estes pré-requisitos.
Utilizando o Weld
Há várias maneiras de se utilizar o Weld. A mais simples é implantar a aplicação CDI em algum servidor de aplicação Java EE que já possua Weld por padrão, como o JBoss AS 6 e o GlassFish v3. Se você for implantar sua aplicação em algum destes servidores, basta utilizar as funcionalidades de CDI sem se preocupar em configurar o servidor. Ademais, apenas um servidor de aplicações Java EE 6 pode prover certas funcionalidades intimamente ligadas a CDI, como EJBs.
Entretanto, nem sempre é prático utilizar um servidor de aplicação, que tende a consumir muitos recursos e pode ser um tanto sofisticado de se configurar. Uma alternativa popular é utilizar um container de servlets, como o Tomcat. Neste caso, é necessário acrescentar o Weld à aplicação. Para isto, basta copiar o arquivo weld-servlet.jar para o diretório WEB-INF/lib do seu projeto. (Este arquivo encontra-se em qualquer pacote ZIP baixado do site do Weld. Há um link para a página de downloads ao final do artigo.).
Uma vez que tenhamos acrescentado o Weld ao projeto, devemos configurar o listener de Weld no arquivo web.xml:
<listener>
<listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
</listener>
A partir deste ponto, cada container de servlets pode exigir configurações específicas. Para o Tomcat, por exemplo, é preciso habilitar a comunicação via JNDI do gerenciador de beans do projeto, acrescentando o seguinte conteúdo no arquivo context.xml do projeto (que pode vir dentro do diretório META-INF ou do diretório WEB-INF/classes/META-INF):
<Context>
<Resource name="BeanManager"
auth="Container"
type="javax.enterprise.inject.spi.BeanManager"
factory="org.jboss.weld.resources.ManagerObjectFactory"/>
</Context>
Por fim, precisamos declarar este recurso JNDI para a aplicação, acrescentando o seguinte código ao fim do arquivo web.xml:
<resource-env-ref>
<resource-env-ref-name>BeanManager</resource-env-ref-name>
<resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type>
</resource-env-ref>
Isto nos permitirá utilizar quase todas as funcionalidades providas pelo Weld. As exceções são apenas os recursos dependentes de um servidor de aplicações completo: EJBs e eventos transacionais. Ademais, como CDI funciona especialmente bem com JSF, é provável que o desenvolvedor também queira instalar uma implementação JSF, como Mojarra, embora isto não seja estritamente necessário.
De qualquer forma, para utilizar o Weld, seja em um servidor que já o disponibilize, seja em uma aplicação web, é preciso criar um arquivo chamado "
Este é um post disponível para assinantes MVPou para quem possui Créditos DevMedia. Clique aqui para saber mais!
Adam Victor Nazareth Brandizzi
Desenvolvedor Java há cinco anos e já desenvolveu aplicações Web que utilizavam threads e JNI para acesso a hardware.
4 COMENTÁRIOS
Parabéns !!!
Até!
Adam, eu tenho uma dúvida: No CDI não existe um escopo parecido com o View do jsf? Como é possível ter este comportamento? Fazer que meu Bean esteja ativo enquanto a página em questão estiver aberta(sendo manipulada)?
Desde já agradeço sua atenção...
Valeu.........



