Trabalhando com JBoss Weld e JSF 2.0
Olás!
O framework de desenvolvimento JSF vem ganhando bastante espaço entre desenvolvedores e empresas. A versão 1.2 trouxe bastante melhorias, mas ainda é como se ele tivesse diversos GAPs, por exemplo, por muito tempo utilizei o JBoss Seam para suprir coisas chatas que o JSF 1.2 não provia por padrão.
Não vamos gastar tempo aqui explicando o que é o JBoss Weld; veja abaixo a explicação sobre ele, a partir do site oficial http://seamframework.org/Weld.
Weld is the reference implementation (RI) for JSR-299: Java Contexts and Dependency Injection for the Java EE platform (CDI). CDI is the Java standard for dependency injection and contextual lifecycle management. JSR-299 is a Java Community Process (JCP) standard that integrates cleanly with the Java EE platform. Any Java EE 6-compliant application server provides support for JSR-299 (even the web profile).
Pré-Requisitos
Ter JDK 6 instalada, Maven 2.2.1 ou posterior e um editor à sua escolha. No meu caso, vou utilizar o bom e velho Eclipse.
Criando o projeto Web vazio
Vamos criar nosso projeto base a partir do archetype:generate do maven. Crie o diretório com o nome do seu projeto e execute a seguinte linha de comando:
mvn archetype:generate -DinteractiveMode=n -DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-SNAPSHOT -DgroupId=br.com.brenooliveira.weld -DartifactId=weld_tutorialAcredito que você já utilizava o Maven antes e já deve saber que ele não cria todos as pastas necessárias, mas apenas a estrutura mínima. Então ainda precisamos criar as seguintes pastas:
weld_tutorial/src/test<br /><br />weld_tutorial/src/test/java<br /><br />weld_tutorial/src/test/resources<br /><br />weld_tutorial/src/main/javaConfigurando o pom.xml
No pom.xml, apenas vamos adicionar as dependências necessárias para que nosso projeto funcione e também vamos configurar um jetty para facilitar nosso desenvolvimento.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><br /> <modelversion>4.0.0</modelversion><br /> <groupid>teste-weld</groupid><br /> <artifactid>weld-tutorial</artifactid><br /><packaging>war</packaging><br /> <version>1.0.0-SNAPSHOT</version><br /> <name>spronline Maven Webapp</name><br /> <url>http://maven.apache.org</url><br /><br /> <repositories><br /> <!-- Adicionamos o Repositório do JBoss para garantia de encontrar as dependências --><br /> <repository><br /> <id>repository.jboss.org</id><br /> <name>JBoss Repository</name><br /> <url>http://repository.jboss.org/maven2</url><br /> <releases><br /> <enabled>true</enabled><br /> </releases><br /> <snapshots><br /> <enabled>false</enabled><br /> </snapshots><br /> </repository><br /> </repositories><br /> <dependencies><br /> <dependency><br /> <groupid>junit</groupid><br /> <artifactid>junit</artifactid><br /> <version>3.8.1</version><br /> <scope>test</scope><br /> </dependency><br /><br /> <!-- Comum --><br /> <dependency><br /> <groupid>javax.enterprise</groupid><br /> <artifactid>cdi-api</artifactid><br /> <scope>provided</scope><br /> <version>1.0-CR1</version><br /> </dependency><br /><br /> <dependency><br /> <groupid>javax.annotation</groupid><br /> <artifactid>jsr250-api</artifactid><br /> <version>1.0</version><br /> </dependency><br /><br /> <dependency><br /> <groupid>javax.faces</groupid><br /> <artifactid>jsf-api</artifactid><br /> <version>2.0.0-RC</version><br /> </dependency><br /><br /> <!-- Especifico para Jetty --><br /> <dependency><br /> <groupid>javax.faces</groupid><br /> <artifactid>jsf-impl</artifactid><br /> <scope>runtime</scope><br /> <version>2.0.0-RC</version><br /> </dependency><br /><br /> <dependency><br /> <groupid>javax.servlet</groupid><br /> <artifactid>jstl</artifactid><br /> <version>1.2</version><br /> <scope>runtime</scope><br /> </dependency><br /><br /> <dependency><br /> <groupid>org.jboss.weld.servlet</groupid><br /> <artifactid>weld-servlet</artifactid><br /> <version>1.0.0-CR1</version><br /> <scope>runtime</scope><br /> </dependency><br /><br /> <dependency><br /> <groupid>org.glassfish.web</groupid><br /> <artifactid>el-impl</artifactid><br /> <version>2.1.2-b04</version><br /> <scope>runtime</scope><br /> <exclusions><br /> <exclusion><br /> <groupid>javax.el</groupid><br /> <artifactid>el-api</artifactid><br /> </exclusion><br /> </exclusions><br /> </dependency><br /> </dependencies><br /><br /> <build><br /> <finalname>weldtutorial</finalname><br /><plugins><br /> <!-- Força compilar em Java 1.6 --><br /><plugin><br /> <groupid>org.apache.maven.plugins</groupid><br /> <artifactid>maven-compiler-plugin</artifactid><br /> <configuration><br /> 1.6<br /> <target>1.6</target><br /> </configuration><br /> </plugin><br /><br /> <!-- Embedded Jetty (jetty:run) --><br /><plugin><br /> <groupid>org.mortbay.jetty</groupid><br /> <artifactid>maven-jetty-plugin</artifactid><br /> <configuration><br /> <!-- Coloca um path com um nome mais amigavel --><br /> <contextpath>${build.finalName}</contextpath><br /> <!-- Aqui é onde declaramos BeanManager é contruido. --><br /> <jettyenvxml>${basedir}/src/test/resources/jetty-env.xml</jettyenvxml><br /> <!-- Para quem já trabalhou com JRebel sabe o quanto isso é bom. Um ótima feature do Jetty --><br /> <scanintervalseconds>3</scanintervalseconds><br /> </configuration><br /> </plugin><br /> </plugins><br /> </build><br /></project>Configurando nosso web.xml
Com o JSF 2 ainda precisamos configurar algumas coisas no web.xml, o que se tornou opcional é aquele arquivo faces-config.xml, então no web.xml:
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"><br /> <display-name>Weld Tutorial</display-name><br /><br /> <context-param><br /><param-name>javax.faces.DEFAULT_SUFFIX</param-name><br /><param-value>.xhtml</param-value><br /> </context-param><br /> <servlet><br /> <servlet-name>Faces Servlet</servlet-name><br /> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class><br /> <load-on-startup>1</load-on-startup><br /> </servlet><br /> <servlet-mapping><br /> <servlet-name>Faces Servlet</servlet-name><br /> <url-pattern>*.jsf</url-pattern><br /> </servlet-mapping><br /><br /> <!-- Configuração de alguns parametros do Weld para o Jetty --><br /><listener><br /><listener-class>org.jboss.weld.environment.servlet.Listener</listener-class><br /> </listener><br /><br /> <resource-env-ref><br /> <description>Object factory for the CDI Bean Manager</description><br /> <resource-env-ref-name>BeanManager</resource-env-ref-name><br /> <resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type><br /> </resource-env-ref><br /></web-app>Também é necessário indicar ao Weld para inicializar o DI (Dependency Injection). Para isso, basta criar um arquivo chamado beans.xml dentro da pasta WEB-INF/. A simples presença desse arquivo diz ao container que WEB-INF/classes é um bean deployment archive.
Preparando o Jetty
Para que nosso aplicativo funcione no jetty, precisamos configurar o jetty-env.xml, apenas vamos declarar quem é o nosso injetor de dependências.
<configure id="webAppCtx" class="org.mortbay.jetty.webapp.WebAppContext"><br /> <new id="appManager" class="org.mortbay.jetty.plus.naming.Resource"><br /> <arg><br /> <ref id="webAppCtx"><br /> </ref></arg><br /> <arg>BeanManager</arg><br /> <arg><br /> <new class="javax.naming.Reference"><br /> <arg>javax.enterprise.inject.spi.BeanManager</arg><br /> <arg>org.jboss.weld.resources.ManagerObjectFactory</arg><br /> <arg><br /> </arg></new><br /> </arg><br /> </new><br /></configure>Escrevendo nosso HelloWorld.java
Quem trabalhou com JSF 1.2 ou versões anteriores com certeza se lembra do quanto era entediante declarar todos os managed-bean; e quem já utilizou o JBoss Seam sabe o quanto é mais simples e também o quanto diminui a quantidade de linhas no faces-config.xml, pois essa configuração de XML é trocada para anotações, muito semelhante a como o JBoss Seam faz, para não falar igual. Então nossa classe HelloWorld.java↳Java42 conteúdosNovidades do Java 26 (para desenvolvedores)Dev (Back & Front) · mar 2026Visual Studio Code para Java: o guia completo (dicas, configuração e extensões)Dev (Back & Front) · out 2025Quarkus: Modernizando a linguagem Java para a era da nuvemDev (Back & Front) · nov 2020Ver tudo em Dev (Back & Front) → fica:
package br.com.brenooliveira.actions;<br /><br />import java.io.Serializable;<br />import javax.enterprise.context.SessionScoped;<br />import javax.inject.Inject;<br />import javax.inject.Named;<br /><br />@Named<br />@SessionScoped<br />public class HelloWorld implements Serializable {<br /><br /> private static final long serialVersionUID = 6325770734571129423L;<br /><br /> private String text = "Hello World JSF!";<br /><br /> public String getText() {<br /> return text;<br /> }<br />}Como você pode observar, apenas adicionamos a anotação @Named. Ainda seria possível passar um valor nela, que acabaria definindo o nome do managed-bean.
Escrevendo .xhtml
Criado o nosso managed-bean, vamos chamar o atributo dela em nossa página xhtml.
<?xml version="1.0" encoding="UTF-8"?><br /><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"><br /><html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"><br /><h:head><br /> <title>JSF Demo</title><br /></h:head><br /><h:body><br /> <h1>Funcionou?</h1><br /> <h:form><br /> <h:commandButton action="#{helloWorld.doAction}" value="Chamar doAction()" /><br /> <h:commandButton action="#{helloWorld.login}" value="Chamar login()" /><br /> </h:form><br /> <p>My weld-injected bean says: #{helloWorld.text}</p><br /></h:body><br /></html>Aqui não tem muito segredo, apenas chamamos o atributo de nosso managed-bean.
Executando o nosso projeto
Para executar o projeto, vamos utilizar o jetty. Se você observou no início, nós adicionamos o plugin do jetty para maven, então abra uma linha de comando no diretório do pom.xml e execute a seguinte linha de comando:
mvn war:inplace jetty:runDepois basta acessar http://localhost:8080/weldtutorial/index.jsf e ver o resultado final.
Até a próxima!










