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.