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

Erro ao usar o CDI

Boa tarde, o meu projeto tava tudo rodando e to fazendo um curso de CDI e aqui ja deu problema kk :( segue o meu código.

Meu bean com CDI

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

import javax.inject.Inject;
import javax.inject.Named;

import br.com.bercalini.dao.ClienteDao;
import br.com.bercalini.dao.EnderecoDao;
import br.com.bercalini.modelo.Cliente;
import br.com.bercalini.modelo.Endereco;
import br.com.bercalini.util.MensagemUtil;
import br.com.bercalini.util.Redirecionador;

@Named
@javax.enterprise.context.SessionScoped
public class ClienteBean implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private Cliente cliente = new Cliente();
    private Endereco endereco = new Endereco();
    @Inject
    private ClienteDao clienteDao;
    @Inject
    private EnderecoDao enderecoDao;
    private List<Cliente> clientes = clienteDao.listaTodos();

    public void adicionar() {
        if (cliente.getCodigo() == null) {
            cliente.setEndereco(endereco);
            enderecoDao.adicionar(endereco);
            clienteDao.adicionar(cliente);
            new MensagemUtil().mensagemInfo("CLIENTE adicionado com SUCESSO");
            this.clientes = new ClienteDao().listaTodos();
        } else {
            clienteDao.alterar(cliente);
            enderecoDao.alterar(endereco);
            new MensagemUtil().mensagemInfo("CLIENTE atualizada com SUCESSO");
        }
        this.cliente = new Cliente();
        this.endereco = new Endereco();
    }

    public void deletar(Cliente cliente) {
        new MensagemUtil().mensagemInfo("CIENTE removido com SUCESSO " + cliente.getNome());
        clienteDao.deletar(cliente);
        enderecoDao.deletar(cliente.getEndereco());
        this.cliente = new Cliente();
    }

    public Redirecionador alterar(Cliente cliente) {
        this.cliente = cliente;
        this.endereco = cliente.getEndereco();
        return new Redirecionador("cliente");
    }

    public List<Cliente> getListaClientes() {
        return clienteDao.listaTodos();
    }

    public Redirecionador formularioCadastro() {
        cliente = new Cliente();
        endereco = new Endereco();
        return new Redirecionador("cliente");
    }

    public Redirecionador formularioClientes() {
        return new Redirecionador("clientePesquisa");
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public Endereco getEndereco() {
        return endereco;
    }

    public void setEndereco(Endereco endereco) {
        this.endereco = endereco;
    }

    public List<Cliente> getClientes() {
        if (clientes == null) {
            clienteDao.listaTodos();
        }
        return clientes;
    }

    public void setClientes(List<Cliente> clientes) {
        this.clientes = clientes;
    }

}

Meu DAO com CDI.

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

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

import br.com.bercalini.modelo.Cliente;

public class ClienteDao implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Inject
    private EntityManager em;

    public ClienteDao() {}

    public ClienteDao(EntityManager em) {
        this.em = em;
    }

    public void adicionar(Cliente cliente) {
        em.getTransaction().begin();
        em.persist(cliente);
        em.getTransaction().commit();
    }

    @SuppressWarnings("unchecked")
    public List<Cliente> listaTodos() {
        Query query = em.createNamedQuery("Cliente.listaClientes");
        List<Cliente> lista = query.getResultList();
         return lista;
    }

    public void deletar(Cliente cliente) {
        em.getTransaction().begin();
        em.remove(em.merge(cliente));
        em.getTransaction().commit();
    }

    public void alterar(Cliente cliente) {
        em.getTransaction().begin();
        em.merge(cliente);
        em.getTransaction().commit();
    }

    public Cliente buscaPorId(Long codigo) {
        Cliente cliente = em.find(Cliente.class, codigo);
        return cliente;
    }
}
public class EnderecoDao implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private EntityManager em;

    public void adicionar(Endereco endereco) {
        em.getTransaction().begin();
        em.persist(endereco);
        em.getTransaction().commit();
    }

    public void alterar(Endereco endereco) {
        em.getTransaction().begin();
        em.merge(endereco);
        em.getTransaction().commit();
    }

    public void deletar(Endereco endereco) {
        em.getTransaction().begin();
        em.remove(em.merge(endereco));
        em.getTransaction().commit();
    }
}
jan 06, 2017 2:35:34 PM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [Faces Servlet] in context with path [/tcc] threw exception [null] with root cause
java.lang.NullPointerException
    at br.com.bercalini.bean.ClienteBean.<init>(ClienteBean.java:31)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.jboss.weld.injection.ConstructorInjectionPoint.newInstance(ConstructorInjectionPoint.java:119)
    at org.jboss.weld.injection.ConstructorInjectionPoint.invokeAroundConstructCallbacks(ConstructorInjectionPoint.java:92)
    at org.jboss.weld.injection.ConstructorInjectionPoint.newInstance(ConstructorInjectionPoint.java:78)
    at org.jboss.weld.injection.producer.AbstractInstantiator.newInstance(AbstractInstantiator.java:28)
    at org.jboss.weld.injection.producer.BasicInjectionTarget.produce(BasicInjectionTarget.java:116)
    at org.jboss.weld.injection.producer.BeanInjectionTarget.produce(BeanInjectionTarget.java:180)
    at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:158)
    at org.jboss.weld.util.bean.IsolatedForwardingBean.create(IsolatedForwardingBean.java:45)
    at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:96)
    at org.jboss.weld.context.PassivatingContextWrapper$AbstractPassivatingContextWrapper.get(PassivatingContextWrapper.java:76)
    at org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.get(ContextualInstanceStrategy.java:101)
    at org.jboss.weld.bean.ContextualInstanceStrategy$CachingContextualInstanceStrategy.get(ContextualInstanceStrategy.java:178)
    at org.jboss.weld.bean.ContextualInstance.get(ContextualInstance.java:50)
    at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:742)
    at org.jboss.weld.el.AbstractWeldELResolver.lookup(AbstractWeldELResolver.java:107)
    at org.jboss.weld.el.AbstractWeldELResolver.getValue(AbstractWeldELResolver.java:90)
    at org.jboss.weld.environment.servlet.util.ForwardingELResolver.getValue(ForwardingELResolver.java:49)
    at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67)
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
    at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:72)
    at org.apache.el.parser.AstValue.getValue(AstValue.java:161)
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)
    at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50)
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
    at javax.faces.component.UIOutput.getValue(UIOutput.java:174)
    at javax.faces.component.UIInput.getValue(UIInput.java:291)
    at org.primefaces.util.ComponentUtils.getValueToRender(ComponentUtils.java:94)
    at org.primefaces.util.ComponentUtils.getValueToRender(ComponentUtils.java:58)
    at org.primefaces.component.inputtext.InputTextRenderer.encodeMarkup(InputTextRenderer.java:71)
    at org.primefaces.component.inputtext.InputTextRenderer.encodeEnd(InputTextRenderer.java:52)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:920)
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312)
    at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185)
    at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:890)
    at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:85)
    at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:72)
    at org.primefaces.component.fieldset.FieldsetRenderer.encodeContent(FieldsetRenderer.java:94)
    at org.primefaces.component.fieldset.FieldsetRenderer.encodeMarkup(FieldsetRenderer.java:76)
    at org.primefaces.component.fieldset.FieldsetRenderer.encodeEnd(FieldsetRenderer.java:47)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:920)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863)
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:890)
    at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:85)
    at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:72)
    at org.primefaces.component.layout.LayoutUnitRenderer.encodeEnd(LayoutUnitRenderer.java:49)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:920)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:458)
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:134)
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:659)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    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:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    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:1041)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    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)

O erro vem quando eu puxo uma lista que me retorna nulla nessa parte, mais como disse estava tudo rodando certo, acho que é alguma anotação ou um erro que não to prestando atenção.

7 respostas

Olá Alisson, tudo bem?

dei uma olhada no seu código e aparentemente está tudo certo.

A única coisa que me chamou a atenção é a declaração dessa linhas:

private List<Cliente> clientes = clienteDao.listaTodos();

Creio que a necessidade é de ter a lista preenchida para exibir na tela.

Lembre-se que o CDI sempre irá dar new no seu objeto antes de injetar todas as dependências.

Com isso em mente, quando o CDI instanciar um objeto ClienteBean nessa linha ainda não terá sido injetado o ClienteDao e a chamada ao método pode retornar um NullPointerException.

Se precisamos preencher algum objeto antes de disponibilizar o Bean. E esse preenchimento dependa de algo injetado, devemos usar o @PostConstruct.

por exemplo:

@PostConstruct
public void antesDeDispoinibilizarOClienteBean(){
    this.clientes = clienteDao.listaTodos();
}

Esse método será invocado depois que o CDI injetou todas as dependências e antes que o CDI devolva a instancia desse objeto para o JSF.

Outra coisa Alisson,

Olhando novamente o código percebi que no método adicionar você está instanciando novamente o ClienteDao para preencher a lista após persistir no banco.

Só que isso também pode causar um NPE, pois a classe ClienteDao depende da injeção do EntityManager e como você está instanciando o objeto manualmente o CDI não irá injetar o EntityManger.

O erro agora é esse :( Mais fico assim minha classe.

@Named
@javax.enterprise.context.SessionScoped
public class ClienteBean implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private Cliente cliente = new Cliente();
    private Endereco endereco = new Endereco();
    @Inject
    private ClienteDao clienteDao;
    @Inject
    private EnderecoDao enderecoDao;

    private List<Cliente> clientes = clienteDao.listaTodos();

    public void adicionar() {
        if (cliente.getCodigo() == null) {
            cliente.setEndereco(endereco);
            enderecoDao.adicionar(endereco);
            clienteDao.adicionar(cliente);
            new MensagemUtil().mensagemInfo("CLIENTE adicionado com SUCESSO");
            this.clientes = clienteDao.listaTodos();
        } else {
            clienteDao.alterar(cliente);
            enderecoDao.alterar(endereco);
            new MensagemUtil().mensagemInfo("CLIENTE atualizada com SUCESSO");
        }
        this.cliente = new Cliente();
        this.endereco = new Endereco();
    }

    public void deletar(Cliente cliente) {
        new MensagemUtil().mensagemInfo("CIENTE removido com SUCESSO " + cliente.getNome());
        clienteDao.deletar(cliente);
        enderecoDao.deletar(cliente.getEndereco());
        this.cliente = new Cliente();
    }

    public Redirecionador alterar(Cliente cliente) {
        this.cliente = cliente;
        this.endereco = cliente.getEndereco();
        return new Redirecionador("cliente");
    }

    @PostConstruct
    public List<Cliente> getListaClientes() {
        return clienteDao.listaTodos();
    }

    public Redirecionador formularioCadastro() {
        cliente = new Cliente();
        endereco = new Endereco();
        return new Redirecionador("cliente");
    }

    public Redirecionador formularioClientes() {
        return new Redirecionador("clientePesquisa");
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public Endereco getEndereco() {
        return endereco;
    }

    public void setEndereco(Endereco endereco) {
        this.endereco = endereco;
    }

    @PostConstruct
    public List<Cliente> getClientes() {
        if (clientes == null) {
            clienteDao.listaTodos();
        }
        return clientes;
    }

    public void setClientes(List<Cliente> clientes) {
        this.clientes = clientes;
    }

}

o erro e esse

jan 06, 2017 3:23:40 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: C:\Program Files\Java\jre1.8.0_111\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Program Files/Java/jre1.8.0_111/bin/server;C:/Program Files/Java/jre1.8.0_111/bin;C:/Program Files/Java/jre1.8.0_111/lib/amd64;C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\EgisTec MyWinLocker\x64;C:\Program Files (x86)\EgisTec MyWinLocker\;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x64;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\MySQL\MySQL Fabric 1.5.4 & MySQL Utilities 1.5.4 1.5\;C:\Program Files (x86)\MySQL\MySQL Fabric 1.5.4 & MySQL Utilities 1.5.4 1.5\Doctrine extensions for PHP\;C:\Program Files (x86)\GtkSharp\2.12\bin;C:\Users\Alison\AppData\Local\Microsoft\WindowsApps;;C:\Users\Alison\eclipse\jee-neon2\eclipse;;.
jan 06, 2017 3:23:40 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:tcc' did not find a matching property.
jan 06, 2017 3:23:40 PM org.apache.coyote.AbstractProtocol init
INFORMAÇÕES: Initializing ProtocolHandler ["http-bio-8080"]
jan 06, 2017 3:23:40 PM org.apache.coyote.AbstractProtocol init
INFORMAÇÕES: Initializing ProtocolHandler ["ajp-bio-8009"]
jan 06, 2017 3:23:40 PM org.apache.catalina.startup.Catalina load
INFORMAÇÕES: Initialization processed in 815 ms
jan 06, 2017 3:23:40 PM org.apache.catalina.core.StandardService startInternal
INFORMAÇÕES: Starting service Catalina
jan 06, 2017 3:23:40 PM org.apache.catalina.core.StandardEngine startInternal
INFORMAÇÕES: Starting Servlet Engine: Apache Tomcat/7.0.47
jan 06, 2017 3:23:44 PM org.jboss.weld.environment.servlet.EnhancedListener onStartup
INFO: WELD-ENV-001008: Initialize Weld using ServletContainerInitializer
jan 06, 2017 3:23:44 PM org.jboss.weld.bootstrap.WeldStartup <clinit>
INFO: WELD-000900: 2.3.2 (Final)
jan 06, 2017 3:23:44 PM org.jboss.weld.bootstrap.WeldStartup startContainer
INFO: WELD-000101: Transactional services not available. Injection of @Inject UserTransaction not available. Transactional observers will be invoked synchronously.
jan 06, 2017 3:23:45 PM org.jboss.weld.environment.tomcat.TomcatContainer initialize
INFO: WELD-ENV-001100: Tomcat 7+ detected, CDI injection will be available in Servlets, Filters and Listeners.
jan 06, 2017 3:23:45 PM org.apache.catalina.core.ContainerBase startInternal
GRAVE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/tcc]]
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    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: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/tcc]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    ... 6 more
Caused by: org.jboss.weld.exceptions.DefinitionException: WELD-000805: Cannot have more than one post construct method annotated with @PostConstruct for [EnhancedAnnotatedTypeImpl] public @SessionScoped @Named class br.com.bercalini.bean.ClienteBean
    at org.jboss.weld.util.BeanMethods$2.duplicateMethod(BeanMethods.java:276)
    at org.jboss.weld.util.BeanMethods$AbstractLifecycleEventCallbackMethodListBuilder.processMethod(BeanMethods.java:170)
    at org.jboss.weld.util.BeanMethods.getMethods(BeanMethods.java:141)
    at org.jboss.weld.util.BeanMethods.getPostConstructMethods(BeanMethods.java:267)
    at org.jboss.weld.injection.producer.DefaultLifecycleCallbackInvoker.<init>(DefaultLifecycleCallbackInvoker.java:67)
    at org.jboss.weld.injection.producer.DefaultLifecycleCallbackInvoker.of(DefaultLifecycleCallbackInvoker.java:60)
    at org.jboss.weld.injection.producer.BeanInjectionTarget.<init>(BeanInjectionTarget.java:63)
    at org.jboss.weld.injection.producer.BeanInjectionTarget.createDefault(BeanInjectionTarget.java:47)
    at org.jboss.weld.manager.InjectionTargetFactoryImpl.chooseInjectionTarget(InjectionTargetFactoryImpl.java:113)
    at org.jboss.weld.manager.InjectionTargetFactoryImpl.createInjectionTarget(InjectionTargetFactoryImpl.java:86)
    at org.jboss.weld.bean.ManagedBean.<init>(ManagedBean.java:100)
    at org.jboss.weld.bean.ManagedBean.of(ManagedBean.java:80)
    at org.jboss.weld.bootstrap.AbstractBeanDeployer.createManagedBean(AbstractBeanDeployer.java:261)
    at org.jboss.weld.bootstrap.BeanDeployer.createClassBean(BeanDeployer.java:228)
    at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$2.doWork(ConcurrentBeanDeployer.java:78)
    at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$2.doWork(ConcurrentBeanDeployer.java:75)
    at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:63)
    at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:56)
    ... 4 more

jan 06, 2017 3:23:45 PM org.apache.catalina.core.ContainerBase startInternal
GRAVE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:732)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:691)
    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.catalina.startup.Bootstrap.start(Bootstrap.java:322)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:456)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    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: org.apache.catalina.LifecycleException: A child container failed during start
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1131)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 6 more

jan 06, 2017 3:23:45 PM org.apache.catalina.startup.Catalina start
GRAVE: The required Server component failed to start so Tomcat is unable to start.
org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:691)
    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.catalina.startup.Bootstrap.start(Bootstrap.java:322)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:456)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:732)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 7 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 9 more
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1131)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 11 more

jan 06, 2017 3:23:45 PM org.apache.coyote.AbstractProtocol pause
INFORMAÇÕES: Pausing ProtocolHandler ["http-bio-8080"]
jan 06, 2017 3:23:45 PM org.apache.coyote.AbstractProtocol pause
INFORMAÇÕES: Pausing ProtocolHandler ["ajp-bio-8009"]
jan 06, 2017 3:23:45 PM org.apache.catalina.core.StandardService stopInternal
INFORMAÇÕES: Stopping service Catalina
jan 06, 2017 3:23:45 PM org.apache.coyote.AbstractProtocol destroy
INFORMAÇÕES: Destroying ProtocolHandler ["http-bio-8080"]
jan 06, 2017 3:23:45 PM org.apache.coyote.AbstractProtocol destroy
INFORMAÇÕES: Destroying ProtocolHandler ["ajp-bio-8009"]
jan 06, 2017 3:23:45 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: The web application [/tcc] appears to have started a thread named [weld-worker-1] but has failed to stop it. This is very likely to create a memory leak.
jan 06, 2017 3:23:45 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: The web application [/tcc] appears to have started a thread named [weld-worker-2] but has failed to stop it. This is very likely to create a memory leak.
jan 06, 2017 3:23:45 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: The web application [/tcc] appears to have started a thread named [weld-worker-3] but has failed to stop it. This is very likely to create a memory leak.
jan 06, 2017 3:23:45 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: The web application [/tcc] appears to have started a thread named [weld-worker-4] but has failed to stop it. This is very likely to create a memory leak.
jan 06, 2017 3:23:45 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: The web application [/tcc] appears to have started a thread named [weld-preloader-1] but has failed to stop it. This is very likely to create a memory leak.
jan 06, 2017 3:23:45 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: The web application [/tcc] appears to have started a thread named [weld-preloader-2] but has failed to stop it. This is very likely to create a memory leak.
jan 06, 2017 3:23:45 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
GRAVE: The web application [/tcc] appears to have started a thread named [weld-preloader-3] but has failed to stop it. This is very likely to create a memory leak.
solução!

É que não é possível ter dois métodos anotados com @PostConstruct.

O @PostConstruct é um callback do ciclo de vida do CDI (mais especificamente da spec de Interceptor). E existem outros callbacks.

Esse é o fluxo:1. CDI Instancia um objeto( da um new) 1. Com o objeto em mãos ele injeta as dependências 1. Executa o Callback @PostConstruct 1. Libera o objeto pronto para uso de algum outro framework ( no caso o JSF). 1. Antes do CDI liberar o objeto para o Garbage Collector o CDI executa outro callback, nesse caso o @PreDestroy. 1. Feito isso ele libera o objeto para se coletado.

Sendo assim quem chama os métodos com a anotação @PostConstruct ou @PreDestroy é o CDI e ele só pode chamar um de cada.

Para corrigir o código vamos fazer as seguintes alterações:

vamos alterar a linha:

private List<Cliente> clientes = clienteDao.listaTodos();

para:

private List<Cliente> clientes;

Nesse trecho de código:

@PostConstruct
    public List<Cliente> getListaClientes() {
        return clienteDao.listaTodos();
    }

Remova a anotação @PostConstruct.

Altere o método de:

@PostConstruct
    public List<Cliente> getClientes() {
        if (clientes == null) {
            clienteDao.listaTodos();
        }
        return clientes;
    }

Para:

@PostConstruct
    public void inicializador() {
        this.clientes =   clienteDao.listaTodos();
    }

Veja se isso resolve.

Fernando vi que quando usa CDI você ganha menos acoplamento correto? e depois deixa ver se entendi, quando usa CDI você sai um pouco do controle dos daos dos commit e do close deixando isso para o proprio CDI fazer correto? mais uma coisa não entendo, porque quando uso CDI tenho que usar o anotação @PostConstruct em minha lista? kkk vou criar um projeto do zero e ir testando só para gravar e depois usando uma lista pra ir diminuindo os erros, oque você acha?

Vou encerrar esse tópico aqui, alias encerra você com a melhor resposta que você acha que deu, ai concerteza irei ter erros no outro projeto de cadastro simples, mais quero ir por partes, ai você me ajuda se ocorrer o erro? obg kkkkk

Fernando tudo beleza? fiz um projeto do 0 só para cadastrar e fazer o teste, engraçado agora que eu fiz não deu aquele erro de antigamente, poderia verificar se meu código está correto usando CDI? é novo pra mim ainda e não sei se está correto kk.

@Named
@ViewScoped
public class ProdutoBean implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private Produto produto = new Produto();
    private Fabricante fabricante = new Fabricante();
    @Inject
    private ProdutoDao produtoDao;
    private List<Produto> produtos;

    @Transacional
    public void salvar() {
        if(produto.getCodigo() == null) {
            fabricante.setProduto(produto);
            produtoDao.salvar(produto, fabricante);
            System.out.println("Produto salvo com sucesso");
            this.produto = new Produto();
            this.fabricante = new Fabricante();
        }
    }

    @Transacional
    public void remover(Produto produto) {
        produtoDao.deletar(produto, fabricante);
    }

    public List<Produto> getLista() {
        return produtos = produtoDao.listaProdutos();
    }

    public Redirecionador formularioProduto() {
        return new Redirecionador("produtoPesquisa");
    }

    public Produto getProduto() {
        return produto;
    }
    public void setProduto(Produto produto) {
        this.produto = produto;
    }
    public Fabricante getFabricante() {
        return fabricante;
    }
    public void setFabricante(Fabricante fabricante) {
        this.fabricante = fabricante;
    }

    public List<Produto> getProdutos() {
        return produtos;
    }

    public void setProdutos(List<Produto> produtos) {
        this.produtos = produtos;
    }
public class ProdutoDao implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Inject
    EntityManager manager;


    public void salvar(Produto produto, Fabricante fabricante) {
        manager.persist(produto);
        manager.persist(fabricante);
    }

    @SuppressWarnings("unchecked")
    public List<Produto> listaProdutos() {
        Query query = manager.createNamedQuery("Produto.lista");
        return query.getResultList();
    }

    public void deletar(Produto produto, Fabricante fabricante) {
        manager.remove(manager.merge(produto));
        manager.remove(manager.merge(fabricante));
    }
}

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software