[Resolvido] CDI - Weld erro NullPointerException

Amigos em primeiro lugar deixo claro que antes de postar já fiz várias pesquisas, tenho N links aqui nos favoritos, rsrsrs, sobre o assunto, encontrei alguns posts semelhantes, admito que poderiam até resolver porém por falta de experiência ainda em Java, posso não ter compreendido, o que é bem provável.

Bom ao tentar executar minha aplicação recebo este erro:

Jun 21, 2013 3:41:44 PM com.sun.faces.lifecycle.InvokeApplicationPhase execute
WARNING: #{candidatoMB.localizarCPF()}: java.lang.NullPointerException
javax.faces.FacesException: #{candidatoMB.localizarCPF()}: java.lang.NullPointerException
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:117)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:791)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1256)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:101)
	... 23 more
Caused by: java.lang.NullPointerException
	at controlador.CandidatoMB.localizarCPF(CandidatoMB.java:85)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
	at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:39)
	at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
	... 24 more

Bom como base para o aprendizado em CDI estou usando este link:

Bom está tudo configurado como manda o figurino, uso Tomcat 7, Hibernate, JPA, JSF, Eclipse Juno, o tomcat tinha um problema ao iniciar resolvi conforme orientações em outros sites, enfim mas este erro realmente não sei se é o EntityManager que está nulo ou o meu DAO generic, ambos que entendi que poderia ser injetado.

Segue as partes relevantes do código fonte:

DAO (Genérico)


public class DAO<T> implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private final Class<T> classe;

	private EntityManager em;

	public DAO(Class<T> classe) {
		this.classe = classe;
	}

	public void adiciona(T t) {
		try {
			em.getTransaction().begin();
			em.persist(t);
			em.getTransaction().commit();
		} catch (Exception e) {
			e.printStackTrace();
			em.getTransaction().rollback();
		} finally {
			em.close();
		}
	}

	public void remove(T t) {
		try {
			em.getTransaction().begin();
			em.remove(em.merge(t));
			em.getTransaction().commit();
		} catch (Exception e) {
			e.printStackTrace();
			em.getTransaction().rollback();
		} finally {
			em.close();
		}
	}

	public void atualiza(T t) {
		try {
			em.getTransaction().begin();
			em.merge(t);
			em.getTransaction().commit();
		} catch (Exception e) {
			e.printStackTrace();
			em.getTransaction().rollback();
		} finally {
			em.close();
		}
	}

	@SuppressWarnings("unchecked")
	public List<T> getAll() {
		CriteriaQuery<T> query = em.getCriteriaBuilder().createQuery(classe);
		query.select(query.from(classe));
		List<T> lista = em.createQuery(query).getResultList();
		em.close();
		return lista;
	}

	@SuppressWarnings("unchecked")
	public List<T> getListaPaginado(int inicio, int quantidade) {
		Query query = em
				.createQuery("SELECT e FROM " + classe.getName() + " e")
				.setFirstResult(inicio).setMaxResults(quantidade);
		List<T> lista = query.getResultList();
		em.close();
		return lista;
	}

	public T buscaPorId(int id) {
		return em.find(classe, id);
	}

	@SuppressWarnings("unchecked")
	public int count() {
		Long resultado = new Long(0L);
		Query query = em.createQuery("select count(e) from " + classe.getName()
				+ " e");
		resultado = (Long) query.getSingleResult();
		em.close();
		return resultado.intValue();
	}

	@SuppressWarnings("unchecked")
	public List<T> getLista(String cSql) {
		List<T> lista = em.createQuery(cSql).getResultList();
		em.close();
		return lista;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	public Class<T> getClasse() {
		return classe;
	}

}

DaoFactory


public class DAOFactory<T extends Serializable> {

	@Inject
	EntityManager em;

	@SuppressWarnings({ "rawtypes", "unchecked" })
	@Produces
	public DAO createDAO(InjectionPoint injectionPoint)
			throws ClassNotFoundException {

		ParameterizedType type = (ParameterizedType) injectionPoint.getType();
		Class classe = (Class) type.getActualTypeArguments()[0];
		return new DAO(classe);
	}
}

PersistenceUtil


public class PersistenceUtil {

	private static EntityManagerFactory emf = Persistence
			.createEntityManagerFactory("rhnec");

	@Produces
	@RequestScoped
	public EntityManager getEntityManager() {
		return emf.createEntityManager();
	}

	public void close(@Disposes @Any EntityManager em) {
		em.close();
	}

}

Bean - este é onde entendo que devo injetar o meu DAO


import java.io.IOException;
import java.io.Serializable;
import java.util.List;

import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.persistence.Query;

import modelo.Candidato;

import org.primefaces.event.FlowEvent;

import dao.DAO;

@ManagedBean(name = "candidatoMB")
@SessionScoped
public class CandidatoMB implements Serializable {

	private static final long serialVersionUID = 1L;
	private Candidato candidato = new Candidato();
	private List<Candidato> candidatos;
	private String cpf = "";
	private String senha = "";
	private boolean showNewButton = false;

	@Inject
	private DAO<Candidato> dao;

	public CandidatoMB() {
		super();
	}


	public boolean localizarCPF() {

		[b]candidatos = dao.getLista("Select c from Candidato c where c.cpf = '"
				+ cpf + "' and c.senha = '" + senha + "'");[/b]
		boolean encontrado = !((Query) candidatos).getResultList().isEmpty();

		String mensagem = null;
		this.showNewButton = false;
		if (encontrado) {
			editarCandidato(candidato);
			mensagem = "cadCurriculo.jsf";
		} else {
			mensagem = "CPF não localizado!";
			FacesContext.getCurrentInstance().addMessage(null,
					new FacesMessage(mensagem));
			this.showNewButton = true;
		}
		return encontrado;
	}

O erro acontece nesta parte acima ai do Bean no dao.getLista(), bom peço a ajuda e desculpas por repetições no forum, mas realmente já estou a muito tempo nisto, alguma idéia, erro?
Apenas para ressaltar o web.xml, beans.xml, context.xml tudo está nas suas pastas e configurados.

Agradeço

César

Seu problema é simples de resolver.
Debuga esse seu metodo ‘localizarCPF’ e verifica o que ela nulo. Pode ser o 'candidatos, o ‘dao’ sem get/set.
Nullpointer geralmente acontece quando voce tenta chamar algo que está nulo, para resolver é debugar o metodo e descobrir o que falta no codigo

Em primeiro lugar mr.michels obrigado pela atenção e também peço desculpas pela demora, pois estava fora e agora estou de novo tentando resolver este problema.
Bom eu não comentei no tópico acima, mas eu já havia debugado várias vezes sabe, e o dao está vindo nulo, não deixei muito claro isto, pois estou tendo dificuldades com CDI, estou sem conceito, estou lendo vários posts, até mesmo com Spring enfim, correndo atrás.
Eu não postei antes mas o dao tem os getters/setters mas o que não sei se esta correto a forma de injetar ele está vindo nulo mesmo!

Alguma sugestão, onde estou errando?

abs.

César

Cara talvez seja problema de mapeamento, você esta fazendo por anotações verifique se os mesmo são para a sua necessidade.
http://mkblog.exadel.com/2009/08/learning-jsf2-managed-beans/

posta o codigo todo do seu candidatoMB quero ver a linha 85 dele

outra coisa

vc vai ter que alterar esse cara tambem

public class DAO<T> implements Serializable {  
  
    /** 
     *  
     */  
    private static final long serialVersionUID = 1L;  
    private final Class<T> classe;  
  
    private EntityManager em;  
  
    public DAO(Class<T> classe) {  
        this.classe = classe;  
    }  
  
    public void adiciona(T t) {  
        try {  
            em.getTransaction().begin();  
            em.persist(t);  
            em.getTransaction().commit();  
        } catch (Exception e) {  
            e.printStackTrace();  
            em.getTransaction().rollback();  
        } finally {  
            em.close();  
        }  
    }  
  
    public void remove(T t) {  
        try {  
            em.getTransaction().begin();  
            em.remove(em.merge(t));  
            em.getTransaction().commit();  
        } catch (Exception e) {  
            e.printStackTrace();  
            em.getTransaction().rollback();  
        } finally {  
            em.close();  
        }  
    }  
  
    public void atualiza(T t) {  
        try {  
            em.getTransaction().begin();  
            em.merge(t);  
            em.getTransaction().commit();  
        } catch (Exception e) {  
            e.printStackTrace();  
            em.getTransaction().rollback();  
        } finally {  
            em.close();  
        }  
    }  
  
    @SuppressWarnings("unchecked")  
    public List<T> getAll() {  
        CriteriaQuery<T> query = em.getCriteriaBuilder().createQuery(classe);  
        query.select(query.from(classe));  
        List<T> lista = em.createQuery(query).getResultList();  
        em.close();  
        return lista;  
    }  
  
    @SuppressWarnings("unchecked")  
    public List<T> getListaPaginado(int inicio, int quantidade) {  
        Query query = em  
                .createQuery("SELECT e FROM " + classe.getName() + " e")  
                .setFirstResult(inicio).setMaxResults(quantidade);  
        List<T> lista = query.getResultList();  
        em.close();  
        return lista;  
    }  
  
    public T buscaPorId(int id) {  
        return em.find(classe, id);  
    }  
  
    @SuppressWarnings("unchecked")  
    public int count() {  
        Long resultado = new Long(0L);  
        Query query = em.createQuery("select count(e) from " + classe.getName()  
                + " e");  
        resultado = (Long) query.getSingleResult();  
        em.close();  
        return resultado.intValue();  
    }  
  
    @SuppressWarnings("unchecked")  
    public List<T> getLista(String cSql) {  
        List<T> lista = em.createQuery(cSql).getResultList();  
        em.close();  
        return lista;  
    }  
  
    public static long getSerialversionuid() {  
        return serialVersionUID;  
    }  
  
    public Class<T> getClasse() {  
        return classe;  
    }  
  
}

altera esse construtor pra receber um EntityManager tambem

vai ficar assim o construtor

  public DAO(Class<T> classe, EntityManager em) {  
        this.classe = classe;
        this.em = em;
    }  

e no seu factory
faz isso


public class DAOFactory<T extends Serializable> {  
  
    @Inject  
    EntityManager em;  
  
    @SuppressWarnings({ "rawtypes", "unchecked" })  
    @Produces  
    public DAO createDAO(InjectionPoint injectionPoint)  
            throws ClassNotFoundException {  
  
        ParameterizedType type = (ParameterizedType) injectionPoint.getType();  
        Class classe = (Class) type.getActualTypeArguments()[0];  
        return new DAO(classe,em);  //passa o EntityManager tambem
    }  
}  

Boa tarde, obrigado aos amigos ai que estão me ajudando, Danilo antes de vc pedir ai para alterar o DAO, como estou realizando buscas achei um tópico aqui no GUJ o mesmo problema, eu fiz as alterações conforme sugerido agora vou postar os códigos como estão neste momento, porém o erro persiste, não sei onde estou errando, peço desculpas a vcs pelos erros, como disse não tenho experiência ainda como java, pode ser como mr.michels disse posso estar usando annotations erradas, misturando as coisas ai.

Obrigado novamente segue os códigos atuais:

DAO

package dao;

import java.io.Serializable;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaQuery;

public class DAO<T> implements Serializable {

	private static final long serialVersionUID = 1L;
	private final Class<T> classe;

	public DAO(Class<T> classe, EntityManager em) {
		this.classe = classe;
		this.em = em;
	}

	private EntityManager em;

	public void adiciona(T t) {
		try {
			em.getTransaction().begin();
			em.persist(t);
			em.getTransaction().commit();
		} catch (Exception e) {
			e.printStackTrace();
			em.getTransaction().rollback();
		} finally {
			em.close();
		}
	}

	public void remove(T t) {
		try {
			em.getTransaction().begin();
			em.remove(em.merge(t));
			em.getTransaction().commit();
		} catch (Exception e) {
			e.printStackTrace();
			em.getTransaction().rollback();
		} finally {
			em.close();
		}
	}

	public void atualiza(T t) {
		try {
			em.getTransaction().begin();
			em.merge(t);
			em.getTransaction().commit();
		} catch (Exception e) {
			e.printStackTrace();
			em.getTransaction().rollback();
		} finally {
			em.close();
		}
	}

	@SuppressWarnings("unchecked")
	public List<T> getAll() {
		CriteriaQuery<T> query = em.getCriteriaBuilder().createQuery(classe);
		query.select(query.from(classe));
		List<T> lista = em.createQuery(query).getResultList();
		em.close();
		return lista;
	}

	@SuppressWarnings("unchecked")
	public List<T> getListaPaginado(int inicio, int quantidade) {
		Query query = em
				.createQuery("SELECT e FROM " + classe.getName() + " e")
				.setFirstResult(inicio).setMaxResults(quantidade);
		List<T> lista = query.getResultList();
		em.close();
		return lista;
	}

	public T buscaPorId(int id) {
		return em.find(classe, id);
	}

	@SuppressWarnings("unchecked")
	public int count() {
		Long resultado = new Long(0L);
		Query query = em.createQuery("select count(e) from " + classe.getName()
				+ " e");
		resultado = (Long) query.getSingleResult();
		em.close();
		return resultado.intValue();
	}

	@SuppressWarnings("unchecked")
	public List<T> getLista(String cSql) {
		List<T> lista = em.createQuery(cSql).getResultList();
		em.close();
		return lista;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	public Class<T> getClasse() {
		return classe;
	}

}

Bean

package controlador;

import java.io.IOException;
import java.io.Serializable;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.persistence.Query;

import modelo.Candidato;

import org.primefaces.event.FlowEvent;

import dao.DAO;

@ManagedBean(name = "candidatoMB")
@ViewScoped
public class CandidatoMB implements Serializable {

	private static final long serialVersionUID = 1L;
	private Candidato candidato = new Candidato();
	private List<Candidato> candidatos;
	private String cpf = "";
	private String senha = "";
	private boolean showNewButton = false;

	@Inject
	private DAO<Candidato> dao;

	public CandidatoMB() {
		super();
	}

	public String salvar() throws IOException {
		if (candidato.getId() == 0) {
			dao.adiciona(candidato);
		} else {
			dao.atualiza(candidato);
		}

		FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_INFO,
				"Currículo salvo", "Registro salvo com sucesso");
		FacesContext.getCurrentInstance().addMessage(null, facesMsg);

		return "Registro salvo com sucesso";
	}

	public String novoCandidato() {
		candidato = new Candidato();
		return "novoCandidato.jsf";
	}

	public String editarCandidato(Candidato candidato) {
		this.candidato = candidato;
		return "novoCandidato.jsf";
	}

	public Candidato getCandidato() {
		return candidato;
	}

	public void setCandidato(Candidato candidato) {
		this.candidato = candidato;
	}

	public List<Candidato> getCandidatos() {
		candidatos = dao.getAll();
		return candidatos;
	}

	public void setCandidatos(List<Candidato> candidatos) {
		this.candidatos = candidatos;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	public boolean localizarCPF() {

		candidatos = dao.getLista("Select c from Candidato c where c.cpf = '"
				+ cpf + "' and c.senha = '" + senha + "'"); //Aqui ocorre o erro debugando eu vi o dao = null
		boolean encontrado = !((Query) candidatos).getResultList().isEmpty();

		String mensagem = null;
		this.showNewButton = false;
		if (encontrado) {
			editarCandidato(candidato);
			mensagem = "cadCurriculo.jsf";
		} else {
			mensagem = "CPF não localizado!";
			FacesContext.getCurrentInstance().addMessage(null,
					new FacesMessage(mensagem));
			this.showNewButton = true;
		}
		return encontrado;
	}

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String onFlowProcess(FlowEvent event) {
		if (candidato.getId() == 0) {
			return "tab1";
		} else {
			return event.getNewStep();
		}
	}

	public boolean isShowNewButton() {
		return showNewButton;
	}

	public void setShowNewButton(boolean showNewButton) {
		this.showNewButton = showNewButton;
	}

	public DAO<Candidato> getDao() {
		return dao;
	}

	public void setDao(DAO<Candidato> dao) {
		this.dao = dao;
	}

}

DAOFactory

package dao;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;

import javax.context.Dependent;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.inject.Inject;
import javax.persistence.EntityManager;

public class DAOFactory<T extends Serializable> {

	@Inject
	private EntityManager em;

	@SuppressWarnings({ "rawtypes", "unchecked" })
	@Produces
	@Dependent
	public DAO createDAO(final InjectionPoint injectionPoint)
			throws ClassNotFoundException {

		ParameterizedType type = (ParameterizedType) injectionPoint.getType();
		Class classe = (Class) type.getActualTypeArguments()[0];
		return new DAO(classe, em);
	}
}

No momento está assim.

abs.

tem que trocar isso tambem

@ManagedBean(name = "candidatoMB")  //essas são anotações do jsf
@SessionScoped  //essas são anotações do jsf
public class CandidatoMB implements Serializable {  

tem que trocar para as anotações do cdi

no lugar de @ManagedBean use o @Named

e no lugar @SessionScoped do jsf use a @SessionScoped do CDI

Agradeço a ajuda do mr.michels e DaniloAndrade como disse várias vezes a falta de experiência ainda prejudica rsrsrs, mas o erro estava em usar as anotações erradas, uma mistura que fiz aqui do JSF 2 com CDI, agora está quase 100%.
Tenho um erro aqui de EntityManager is closed mas pelo que vi teria que criar um filter para controlar isto, estou tentando implementar por ora muito obrigado.

abs.

Jun 25, 2013 2:25:37 PM org.apache.catalina.core.StandardContext fireRequestDestroyEvent
SEVERE: Exception sending request initialized lifecycle event to listener instance of class org.jboss.weld.environment.servlet.Listener
java.lang.IllegalStateException: EntityManager is closed
	at org.hibernate.ejb.EntityManagerImpl.close(EntityManagerImpl.java:121)
	at dao.PersistenceUtil.close(PersistenceUtil.java:23)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.jboss.weld.util.reflection.SecureReflections$13.work(SecureReflections.java:267)
	at org.jboss.weld.util.reflection.SecureReflectionAccess.run(SecureReflectionAccess.java:52)
	at org.jboss.weld.util.reflection.SecureReflectionAccess.runAsInvocation(SecureReflectionAccess.java:137)
	at org.jboss.weld.util.reflection.SecureReflections.invoke(SecureReflections.java:263)
	at org.jboss.weld.introspector.jlr.WeldMethodImpl.invokeOnInstance(WeldMethodImpl.java:170)
	at org.jboss.weld.introspector.ForwardingWeldMethod.invokeOnInstance(ForwardingWeldMethod.java:51)
	at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:154)
	at org.jboss.weld.bean.DisposalMethod.invokeDisposeMethod(DisposalMethod.java:159)
	at org.jboss.weld.bean.ProducerMethod$ProducerMethodProducer.dispose(ProducerMethod.java:126)
	at org.jboss.weld.bean.ProducerMethod.destroy(ProducerMethod.java:197)
	at org.jboss.weld.context.ForwardingContextual.destroy(ForwardingContextual.java:31)
	at org.jboss.weld.context.AbstractContext.destroy(AbstractContext.java:128)
	at org.jboss.weld.context.AbstractContext.destroy(AbstractContext.java:142)
	at org.jboss.weld.context.AbstractManagedContext.deactivate(AbstractManagedContext.java:41)
	at org.jboss.weld.context.AbstractBoundContext.deactivate(AbstractBoundContext.java:72)
	at org.jboss.weld.context.http.HttpRequestContextImpl.deactivate(HttpRequestContextImpl.java:86)
	at org.jboss.weld.servlet.WeldListener.requestDestroyed(WeldListener.java:103)
	at org.jboss.weld.servlet.api.helpers.ForwardingServletListener.requestDestroyed(ForwardingServletListener.java:42)
	at org.apache.catalina.core.StandardContext.fireRequestDestroyEvent(StandardContext.java:6084)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:207)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)