DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL
ou 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.





Java Magazine 94

[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 "

A exibição deste artigo foi interrompida.

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL
ou 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.
O que você achou deste post?

    4 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Paulo Vicente Silva Moreira Calçada
Como sempre, o Adam evolui pelo artigo com uma excelente didática, bem acessivel, mesmo para o iniciante. O artigo está muito bom, claro (não é facil escrever de forma clara sobre um tema complexo como o CDI) , e acabou me tirando algumas dúvidas, que ficaram quando eu li o Java EE 6 Tutorial.
Parabéns !!!
[há +1 ano] - Responder

 

[autor] Adam Victor Nazareth Brandizzi
Olá, Paulo! Fico lisonjeado pelo elogio ao artigo. De fato, CDI é um tema mais complicado para os iniciantes, e esta série sobre Seam 3 será mais objetiva que os demais artigos... Mas estarei aqui para tirar quaisquer dúvidas que aparecerem, inclusive as básicas.

Até!
[há +1 ano] - Responder
 

Thiago Sotoriva Castanhari
Primeiramente gostaria d eparabenizar por esta fantástica série de artigos, finalmente alguém conseguiu explicar de forma clara os fundamentos do CDI.

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

[há +1 ano] - Responder

 

Dyego Souza Do Carmo
No CDI padrao não. Voce pode usar o SeamFaces para adicionar este tipo de escopo :)
[há +1 ano] - Responder
 
Cursos relacionados
Publicidade
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03