Solucionado (ver solução)
Solucionado
(ver solução)
16
respostas

Erro - Dao não conseguiu criar EntityManager

O vídeo mostra que se criarmos a classe EntityManagerProducer, este erro sairá. Criei e o erro ainda persiste.

import javax.enterprise.inject.Produces;
import javax.persistence.EntityManager;

public class EntityManagerProducer {

    @Produces
    public EntityManager criaEM() {
        return JPAUtil.criaEntityManager();
    }

}
package br.com.caelum.vraptor.dao;

import java.util.List;

import javax.inject.Inject;
import javax.persistence.EntityManager;

import br.com.caelum.vraptor.model.Produto;

public class ProdutoDao {

    private final EntityManager em;

    @Inject
    public ProdutoDao(EntityManager em) {
        this.em = em;
    }

    public ProdutoDao() {
        this(null);
    }

    public void adiciona(Produto produto) {
        em.getTransaction().begin();
        em.persist(produto);
        em.getTransaction().commit();
    }

    public void remove(Produto produto) {
        em.remove(busca(produto));
    }

    public Produto busca(Produto produto) {
        return em.find(Produto.class, produto.getId());
    }

    @SuppressWarnings("unchecked")
    public List<Produto> lista() {
        return em.createQuery("select p from Produto p").getResultList();
    }
}

Erro console

Set 16, 2014 12:54:51 PM org.apache.catalina.core.StandardContext listenerStart
GRAVE: Exception sending context initialized event to listener instance of class org.jboss.weld.environment.servlet.Listener
org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type EntityManager with qualifiers @Default
  at injection point [BackedAnnotatedParameter] Parameter 1 of [BackedAnnotatedConstructor] @Inject public br.com.caelum.vraptor.dao.ProdutoDao(EntityManager)
  at br.com.caelum.vraptor.dao.ProdutoDao.<init>(ProdutoDao.java:0)
16 respostas

Oi Chryss! Em qual pacote está sua classe EntityManagerProducer?

Se for no br.com.caelum.vraptor.util, move pra outro que vai funcionar.

Esse pacote tem um exclude global, as classes dele não são gerenciadas.

Olá Rodrigo,

Fiz alguma coisa errada, mas não estou conseguindo identificar.

A classe estava no pacote util, criei um pacote producer e coloquei lá, como sua sugestão, mas não funcionou, (404).

Desfiz tudo, deixei sem injeção de dependência, testei o listar e funcionou.

Fiz novamente, porém o erro persistiu (404). A página não existe.

Erro do meu console:

Set 16, 2014 3:01:47 PM org.apache.catalina.core.AprLifecycleListener init
INFORMAÇÕES: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/jni:/lib:/usr/lib
Set 16, 2014 3:01:48 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
ADVERTÊNCIA: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:vraptor-produtos' did not find a matching property.
Set 16, 2014 3:01:49 PM org.apache.coyote.AbstractProtocol init
INFORMAÇÕES: Initializing ProtocolHandler ["http-bio-8080"]
Set 16, 2014 3:01:49 PM org.apache.coyote.AbstractProtocol init
INFORMAÇÕES: Initializing ProtocolHandler ["ajp-bio-8009"]
Set 16, 2014 3:01:49 PM org.apache.catalina.startup.Catalina load
INFORMAÇÕES: Initialization processed in 2155 ms
Set 16, 2014 3:01:49 PM org.apache.catalina.core.StandardService startInternal
INFORMAÇÕES: Starting service Catalina
Set 16, 2014 3:01:49 PM org.apache.catalina.core.StandardEngine startInternal
INFORMAÇÕES: Starting Servlet Engine: Apache Tomcat/7.0.55
log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
Set 16, 2014 3:02:15 PM org.apache.catalina.core.StandardContext filterStart
GRAVE: Exception starting filter vraptor
java.lang.IllegalStateException: Transaction already active
    at org.hibernate.jpa.internal.TransactionImpl.begin(TransactionImpl.java:58)
    at br.com.caelum.vraptor.dao.ProdutoDao.adiciona(ProdutoDao.java:24)
    at br.com.caelum.vraptor.observers.InitialDataObserver.insert(InitialDataObserver.java:33)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)
    at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)
    at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)
    at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:165)
    at org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:119)
    at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:112)
    at org.jboss.weld.event.EventImpl.fire(EventImpl.java:83)
    at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:92)
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4828)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5508)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

Set 16, 2014 3:02:15 PM org.apache.catalina.core.StandardContext startInternal
GRAVE: Error filterStart
Set 16, 2014 3:02:15 PM org.apache.catalina.core.StandardContext startInternal
GRAVE: Context [/vraptor-produtos] startup failed due to previous errors
Set 16, 2014 3:02:16 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
GRAVE: The web application [/vraptor-produtos] registered the JDBC driver [org.hsqldb.jdbc.JDBCDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
Set 16, 2014 3:02:16 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
GRAVE: The web application [/vraptor-produtos] created a ThreadLocal with key of type [org.apache.log4j.helpers.ThreadLocalMap] (value [org.apache.log4j.helpers.ThreadLocalMap@67dde6de]) and a value of type [java.util.Hashtable] (value [{}]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Set 16, 2014 3:02:16 PM org.apache.coyote.AbstractProtocol start
INFORMAÇÕES: Starting ProtocolHandler ["http-bio-8080"]
Set 16, 2014 3:02:16 PM org.apache.coyote.AbstractProtocol start
INFORMAÇÕES: Starting ProtocolHandler ["ajp-bio-8009"]
Set 16, 2014 3:02:16 PM org.apache.catalina.startup.Catalina start
INFORMAÇÕES: Server startup in 26743 ms

Não entendi o erro do JDBC.

Oi Chryss, note que agora o erro é esse:

java.lang.IllegalStateException: Transaction already active

Parece que você está abrindo a transação duas vezes.

Duas coisas, no seu EntityManagerCreator, além de @Produces adicione a anotação @RequestScoped. Se isso não fizer diferença, pode mandar como está o seu Controller e Dao?

Ainda não funcionou :(

Controller

package br.com.caelum.vraptor.controller;

import javax.inject.Inject;

import br.com.caelum.vraptor.Controller;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.dao.ProdutoDao;
import br.com.caelum.vraptor.model.Produto;
import br.com.caelum.vraptor.view.Results;

@Controller
public class ProdutoController {

    private final Result result;
    protected final ProdutoDao dao;

    @Inject
    public ProdutoController(Result result, ProdutoDao dao) {
        this.result = result;
        this.dao = dao;
    }

    public ProdutoController() {
        this(null, null);
    }

    @Get
    public void sobre(){}

    @Get
    public void formulario(){}

    @Get
    public void lista(){
        result.include("produtoList",dao.lista());
    }

    @Get
    public void listaXML(){
        result.use(Results.xml()).from(dao.lista()).serialize();
    }

    @Post
    public void adiciona(Produto produto){
        dao.adiciona(produto);
        result.include("mensagem", "Produto adicionado com sucesso!");
        result.redirectTo(this).lista();

    }

    public void remove(Produto produto){
        dao.remove(produto);
        result.include("mensagem", "Produto removido com sucesso!");
        result.redirectTo(this).lista();
    }


}

Dao

package br.com.caelum.vraptor.dao;

import java.util.List;

import javax.inject.Inject;
import javax.persistence.EntityManager;

import br.com.caelum.vraptor.model.Produto;

public class ProdutoDao {

    private final EntityManager em;

    @Inject
    public ProdutoDao(EntityManager em) {
        this.em = em;
    }

    public ProdutoDao() {
        this(null);
    }

    public void adiciona(Produto produto) {
        em.getTransaction().begin();
        em.persist(produto);
        em.getTransaction().commit();
    }

    public void remove(Produto produto) {
        em.getTransaction().begin();
        em.remove(busca(produto));
        em.getTransaction().commit();
    }

    public Produto busca(Produto produto) {
        return em.find(Produto.class, produto.getId());
    }

    @SuppressWarnings("unchecked")
    public List<Produto> lista() {
        return em.createQuery("select p from Produto p").getResultList();
    }
}

Console

Set 16, 2014 3:57:31 PM org.apache.catalina.core.AprLifecycleListener init
INFORMAÇÕES: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/jni:/lib:/usr/lib
Set 16, 2014 3:57:31 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
ADVERTÊNCIA: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:vraptor-produtos' did not find a matching property.
Set 16, 2014 3:57:31 PM org.apache.coyote.AbstractProtocol init
INFORMAÇÕES: Initializing ProtocolHandler ["http-bio-8080"]
Set 16, 2014 3:57:31 PM org.apache.coyote.AbstractProtocol init
INFORMAÇÕES: Initializing ProtocolHandler ["ajp-bio-8009"]
Set 16, 2014 3:57:31 PM org.apache.catalina.startup.Catalina load
INFORMAÇÕES: Initialization processed in 1056 ms
Set 16, 2014 3:57:31 PM org.apache.catalina.core.StandardService startInternal
INFORMAÇÕES: Starting service Catalina
Set 16, 2014 3:57:31 PM org.apache.catalina.core.StandardEngine startInternal
INFORMAÇÕES: Starting Servlet Engine: Apache Tomcat/7.0.55
log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
Set 16, 2014 3:57:52 PM org.apache.catalina.core.StandardContext filterStart
GRAVE: Exception starting filter vraptor
java.lang.IllegalStateException: Transaction already active
    at org.hibernate.jpa.internal.TransactionImpl.begin(TransactionImpl.java:58)
    at br.com.caelum.vraptor.dao.ProdutoDao.adiciona(ProdutoDao.java:24)
    at br.com.caelum.vraptor.observers.InitialDataObserver.insert(InitialDataObserver.java:33)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)
    at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)
    at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)
    at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:165)
    at org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:119)
    at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:112)
    at org.jboss.weld.event.EventImpl.fire(EventImpl.java:83)
    at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:92)
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4828)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5508)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

Set 16, 2014 3:57:52 PM org.apache.catalina.core.StandardContext startInternal
GRAVE: Error filterStart
Set 16, 2014 3:57:52 PM org.apache.catalina.core.StandardContext startInternal
GRAVE: Context [/vraptor-produtos] startup failed due to previous errors
Set 16, 2014 3:57:52 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
GRAVE: The web application [/vraptor-produtos] registered the JDBC driver [org.hsqldb.jdbc.JDBCDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
Set 16, 2014 3:57:52 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
GRAVE: The web application [/vraptor-produtos] created a ThreadLocal with key of type [org.apache.log4j.helpers.ThreadLocalMap] (value [org.apache.log4j.helpers.ThreadLocalMap@7ce3d64e]) and a value of type [java.util.Hashtable] (value [{}]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Set 16, 2014 3:57:52 PM org.apache.coyote.AbstractProtocol start
INFORMAÇÕES: Starting ProtocolHandler ["http-bio-8080"]
Set 16, 2014 3:57:52 PM org.apache.coyote.AbstractProtocol start
INFORMAÇÕES: Starting ProtocolHandler ["ajp-bio-8009"]
Set 16, 2014 3:57:52 PM org.apache.catalina.startup.Catalina start
INFORMAÇÕES: Server startup in 20973 ms
package br.com.caelum.vraptor.producer;

import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Produces;
import javax.persistence.EntityManager;

import br.com.caelum.vraptor.util.JPAUtil;


public class EntityManagerProducer {

    @Produces  @RequestScoped
    public EntityManager criaEM() {
        return JPAUtil.criaEntityManager();
    }

}

hum, que estranho.

Chryss, faz o seguinte, deixa seu EntityManagerProducer assim:

public class EntityManagerProducer {

    @Produces  @RequestScoped
    public EntityManager criaEM() {
        return JPAUtil.criaEntityManager();
    }

    public void mataEM(@Disposes EntityManager em) {
        em.close();
        System.out.println("matando o EM");
    }
}

E além disso, tente adicionar a anotação @RequestScoped no seu DAO.

Tinha 2 discussões em aberto, 1 vraptor 3 e esta. Quando fui testar a discussão do vraptor 3 acho que fiz alguma besteira no servidor, pois estou olhando a workspace e o projeto vraptor 4 não está lá.

Já fechei o eclipse, abri novamente e só este projeto não está lá.

Pode ser isso? Exclui, inclui novamente, mas o erro persiste.

Rodrigo,

Fiz alguns testes mas nenhum com sucesso.

Excluí todos os projetos que eu tinha (via eclipse), importei o vraptor 4, direto do zip do exercício 1. Startei o servidor novamente e deu aquele erro. Agora não consigo startar nenhum projeto.

Set 16, 2014 6:31:30 PM org.apache.catalina.core.AprLifecycleListener init
INFORMAÇÕES: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/jni:/lib:/usr/lib
Set 16, 2014 6:31:30 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
ADVERTÊNCIA: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:vraptor-produtos' did not find a matching property.
Set 16, 2014 6:31:30 PM org.apache.coyote.AbstractProtocol init
INFORMAÇÕES: Initializing ProtocolHandler ["http-bio-8080"]
Set 16, 2014 6:31:30 PM org.apache.coyote.AbstractProtocol init
INFORMAÇÕES: Initializing ProtocolHandler ["ajp-bio-8009"]
Set 16, 2014 6:31:30 PM org.apache.catalina.startup.Catalina load
INFORMAÇÕES: Initialization processed in 1017 ms
Set 16, 2014 6:31:30 PM org.apache.catalina.core.StandardService startInternal
INFORMAÇÕES: Starting service Catalina
Set 16, 2014 6:31:30 PM org.apache.catalina.core.StandardEngine startInternal
INFORMAÇÕES: Starting Servlet Engine: Apache Tomcat/7.0.55
log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
Set 16, 2014 6:31:45 PM org.apache.catalina.core.StandardContext filterStart
GRAVE: Exception starting filter vraptor
java.lang.IllegalStateException: Transaction already active
    at org.hibernate.jpa.internal.TransactionImpl.begin(TransactionImpl.java:58)
    at br.com.caelum.vraptor.dao.ProdutoDao.adiciona(ProdutoDao.java:26)
    at br.com.caelum.vraptor.observers.InitialDataObserver.insert(InitialDataObserver.java:33)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)
    at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)
    at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)
    at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:165)
    at org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:119)
    at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:112)
    at org.jboss.weld.event.EventImpl.fire(EventImpl.java:83)
    at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:92)
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4828)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5508)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

Set 16, 2014 6:31:45 PM org.apache.catalina.core.StandardContext startInternal
GRAVE: Error filterStart
Set 16, 2014 6:31:45 PM org.apache.catalina.core.StandardContext startInternal
GRAVE: Context [/vraptor-produtos] startup failed due to previous errors
Set 16, 2014 6:31:45 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
GRAVE: The web application [/vraptor-produtos] registered the JDBC driver [org.hsqldb.jdbc.JDBCDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
Set 16, 2014 6:31:45 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
GRAVE: The web application [/vraptor-produtos] created a ThreadLocal with key of type [org.apache.log4j.helpers.ThreadLocalMap] (value [org.apache.log4j.helpers.ThreadLocalMap@4455eb01]) and a value of type [java.util.Hashtable] (value [{}]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Set 16, 2014 6:31:45 PM org.apache.coyote.AbstractProtocol start
INFORMAÇÕES: Starting ProtocolHandler ["http-bio-8080"]
Set 16, 2014 6:31:45 PM org.apache.coyote.AbstractProtocol start
INFORMAÇÕES: Starting ProtocolHandler ["ajp-bio-8009"]
Set 16, 2014 6:31:45 PM org.apache.catalina.startup.Catalina start
INFORMAÇÕES: Server startup in 15038 ms

Bem, vamos lá... Acho que fiquei muito naquele erro e devo ter viajado...

Por favor, desconsidere o problema que falei do servidor... Considere apenas esta mensagem.

Estou com o mesmo erro que estava antes, novamente desfiz a injeção de dependência e funcionou a lista, formulário, adição, remoção. Coloquei a injeção de dependências e parou de funcionar.

Fiz as alterações que você pediu, porém não rodou.

Segue abaixo fontes e console:

ProdutoController

package br.com.caelum.vraptor.controller;

import java.util.List;

import javax.inject.Inject;

import br.com.caelum.vraptor.Controller;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.dao.ProdutoDao;
import br.com.caelum.vraptor.model.Produto;

@Controller
public class ProdutoController {

    private final Result result;
    private final ProdutoDao dao;

    @Inject
    public ProdutoController(Result result, ProdutoDao dao) {
        this.result = result;
        this.dao = dao;
    }

    public ProdutoController() {
        this(null, null);
    }

    public void sobre(){}

    @Get
    public void formulario(){}

    @Get
    public List<Produto> lista(){
        return dao.lista();
    }

    @Post
    public void adiciona(Produto produto){
        dao.adiciona(produto);
        result.include("mensagem", "Produto adicionado com sucesso!");
        result.redirectTo(this).lista();

    }

    public void remove(Produto produto){
        dao.remove(produto);
        result.include("mensagem", "Produto removido com sucesso!");
        result.redirectTo(this).lista();
    }

}

ProdutoDao

package br.com.caelum.vraptor.dao;

import java.util.List;

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.persistence.EntityManager;

import br.com.caelum.vraptor.model.Produto;

public class ProdutoDao {

    private final EntityManager em;

    @Inject
    public ProdutoDao(EntityManager em) {
        this.em = em;
    }

    public ProdutoDao() {
        this(null);
    }

    @RequestScoped
    public void adiciona(Produto produto) {
        em.getTransaction().begin();
        em.persist(produto);
        em.getTransaction().commit();
    }

    @RequestScoped
    public void remove(Produto produto) {
        em.getTransaction().begin();
        em.remove(busca(produto));
        em.getTransaction().commit();
    }

    @RequestScoped
    public Produto busca(Produto produto) {
        return em.find(Produto.class, produto.getId());
    }

    @SuppressWarnings("unchecked")
    public List<Produto> lista() {
        return em.createQuery("select p from Produto p").getResultList();
    }
}

EntityManagerProducer

package br.com.caelum.vraptor.producer;

import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Disposes;
import javax.enterprise.inject.Produces;
import javax.persistence.EntityManager;

import br.com.caelum.vraptor.util.JPAUtil;

public class EntityManagerProducer {

    @Produces  @RequestScoped
    public EntityManager criaEM() {
        return JPAUtil.criaEntityManager();
    }

    public void mataEM(@Disposes EntityManager em) {
        em.close();
        System.out.println("matando o EM");
    }
}

Console

Set 17, 2014 12:41:12 AM org.apache.catalina.core.AprLifecycleListener init
INFORMAÇÕES: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/jni:/lib:/usr/lib
Set 17, 2014 12:41:13 AM org.apache.tomcat.util.digester.SetPropertiesRule begin
ADVERTÊNCIA: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:vraptor-produtos' did not find a matching property.
Set 17, 2014 12:41:13 AM org.apache.coyote.AbstractProtocol init
INFORMAÇÕES: Initializing ProtocolHandler ["http-bio-8080"]
Set 17, 2014 12:41:13 AM org.apache.coyote.AbstractProtocol init
INFORMAÇÕES: Initializing ProtocolHandler ["ajp-bio-8009"]
Set 17, 2014 12:41:13 AM org.apache.catalina.startup.Catalina load
INFORMAÇÕES: Initialization processed in 1008 ms
Set 17, 2014 12:41:13 AM org.apache.catalina.core.StandardService startInternal
INFORMAÇÕES: Starting service Catalina
Set 17, 2014 12:41:13 AM org.apache.catalina.core.StandardEngine startInternal
INFORMAÇÕES: Starting Servlet Engine: Apache Tomcat/7.0.55
log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
Set 17, 2014 12:41:34 AM org.apache.catalina.core.StandardContext filterStart
GRAVE: Exception starting filter vraptor
java.lang.IllegalStateException: Transaction already active
    at org.hibernate.jpa.internal.TransactionImpl.begin(TransactionImpl.java:58)
    at br.com.caelum.vraptor.dao.ProdutoDao.adiciona(ProdutoDao.java:26)
    at br.com.caelum.vraptor.observers.InitialDataObserver.insert(InitialDataObserver.java:33)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)
    at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)
    at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)
    at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:165)
    at org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:119)
    at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:112)
    at org.jboss.weld.event.EventImpl.fire(EventImpl.java:83)
    at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:92)
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4828)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5508)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

Set 17, 2014 12:41:34 AM org.apache.catalina.core.StandardContext startInternal
GRAVE: Error filterStart
Set 17, 2014 12:41:34 AM org.apache.catalina.core.StandardContext startInternal
GRAVE: Context [/vraptor-produtos] startup failed due to previous errors
Set 17, 2014 12:41:34 AM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
GRAVE: The web application [/vraptor-produtos] registered the JDBC driver [org.hsqldb.jdbc.JDBCDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
Set 17, 2014 12:41:34 AM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
GRAVE: The web application [/vraptor-produtos] created a ThreadLocal with key of type [org.apache.log4j.helpers.ThreadLocalMap] (value [org.apache.log4j.helpers.ThreadLocalMap@58ce5ef0]) and a value of type [java.util.Hashtable] (value [{}]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Set 17, 2014 12:41:34 AM org.apache.coyote.AbstractProtocol start
INFORMAÇÕES: Starting ProtocolHandler ["http-bio-8080"]
Set 17, 2014 12:41:34 AM org.apache.coyote.AbstractProtocol start
INFORMAÇÕES: Starting ProtocolHandler ["ajp-bio-8009"]
Set 17, 2014 12:41:34 AM org.apache.catalina.startup.Catalina start
INFORMAÇÕES: Server startup in 21551 ms

Mais uma vez obrigada e desculpe a confusão das mensagens acima.

Opa! Desculpe, o @RequestScoped vai na classe DAO e não nos métodos. Outra coisa, me manda o conteúdo do seu pom.xml? Um abraço

Oi Chryss! Achei o problema, está na classe InitialDataObserver.

Por favor, abre essa classe (que já vem no projeto) e tira as linhas que abrem e fecham a transação? Isso vai resolver. A classe deve ficar assim:

public class InitialDataObserver {

    public void insert(@Observes VRaptorInitialized event) {

        EntityManager em = JPAUtil.criaEntityManager();

        UsuarioDao usuarioDao = new UsuarioDao(em);
        usuarioDao.salva(new Usuario("vraptor", "vraptor"));

        ProdutoDao produtoDao = new ProdutoDao(em);
        produtoDao.adiciona(new Produto("DVD/Blu-ray Justin Bieber", 120.8, 2));
        produtoDao.adiciona(new Produto("Carro de F1", 1.99, 5));
        produtoDao.adiciona(new Produto("Livro da Casa do Código", 29.9, 10));

        em.close();
    }    
}
solução!

Aeee, funcionou! Muito Obrigada!

perfeito! Obrigado por reportar, vou corrigir no repo do curso.

Obrigado Rodigo, estava com o mesmo problema, mudei o EntityManagerProducer para outro pacote e tirei o begin e o commit do getTransaction da classe InitialDataObserver e funcionou 100%. Valeu mesmo!

boa Asser!