Error java.lang.NoClassDefFoundError in Java WEB with JSF

1

Hello, I'm getting the following error message when I run the project:

java.lang.NoClassDefFoundError: javax/enterprise/context/spi/Contextual
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at com.sun.faces.util.Util.loadClass(Util.java:297)
    at com.sun.faces.config.processor.ApplicationConfigProcessor.addSystemEventListener(ApplicationConfigProcessor.java:943)
    at com.sun.faces.config.processor.ApplicationConfigProcessor.process(ApplicationConfigProcessor.java:352)
    at com.sun.faces.config.processor.AbstractConfigProcessor.invokeNext(AbstractConfigProcessor.java:155)
    at com.sun.faces.config.processor.LifecycleConfigProcessor.process(LifecycleConfigProcessor.java:138)
    at com.sun.faces.config.processor.AbstractConfigProcessor.invokeNext(AbstractConfigProcessor.java:155)
    at com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:240)
    at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:443)
    at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:229)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4797)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5221)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
    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: java.lang.ClassNotFoundException: javax.enterprise.context.spi.Contextual
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1293)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1145)
    ... 20 more

Classes I'm using: View

package br.com.valueprojects.view;

import java.io.Serializable;
import java.util.Collection;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.primefaces.event.RowEditEvent;
import br.com.valueprojects.business.JogadorBusiness;
import br.com.valueprojects.business.JogadorBusiness.MensagemEnum;
import br.com.valueprojects.model.Jogador;
import br.com.valueprojects.util.JSFUtil;

@ManagedBean
@ViewScoped
public class JogadorMB implements Serializable {

    private static final long serialVersionUID = 1L;
    private Jogador jogador = new Jogador();
    JogadorBusiness jb = new JogadorBusiness();
    Collection<Jogador> jogadores;

    public Jogador getJogador(){
        return jogador;
    }
    public void setJogador(Jogador jogador){
        this.jogador = jogador;
    }

    public void salvar(){
        if (jb.salvarJogador(jogador)==MensagemEnum.SUCESSO) {
            System.out.println("Sucesso!");
            jogador = new Jogador();
        } else {
            System.out.println("Erro!");
        }
        JSFUtil.addMessage("msg", jb.getMsg());
    }

    public Collection<Jogador> getJogadores(){
        if(jogadores == null)
            jogadores = jb.getAllJogadores();
        return jogadores;
    }

    public void excluir(Jogador jogador){
        if (jb.removerJogador(jogador)==MensagemEnum.SUCESSO) {
            System.out.println("Sucesso!");
            jogador = new Jogador();
        } else {
            System.out.println("Erro!");
        }
        JSFUtil.addMessage("msg", jb.getMsg());
    }

    public void atualizar(Jogador jogador){
        if (jb.atualizarJogador(jogador)==MensagemEnum.SUCESSO) {
            System.out.println("Sucesso!");
            jogador = new Jogador();
        } else {
            System.out.println("Erro!");
        }
        JSFUtil.addMessage("msg", jb.getMsg());
    }

    public void onRowEdit(RowEditEvent event){
        Jogador j = (Jogador) event.getObject();
        System.out.println(j.getCod());
        System.out.println(j.getNome());
        atualizar((Jogador)event.getObject());
    }
}

Util

 package br.com.valueprojects.util;

    import java.util.Locale;
    import java.util.ResourceBundle;
    import javax.faces.application.FacesMessage;
    import javax.faces.context.FacesContext;

    public abstract class JSFUtil {


        public static String getMsg(String id) 
        {    
            FacesContext facesContext = FacesContext.getCurrentInstance();
            facesContext.getViewRoot().setLocale(new Locale("pt","BR"));
            String msg = "";    
            Locale locale = facesContext.getViewRoot().getLocale();    
            ResourceBundle bundle = ResourceBundle.getBundle("application", locale);    
            try {    
                msg = bundle.getString(id);    
            } catch (Exception e) {    
            }    
            return msg;    
        }

        public static void addMessage(String idTitulo, String idMensagem) {


            String titulo   = getMsg(idTitulo);
            String mensagem = getMsg(idMensagem);

            System.out.println(titulo);
            System.out.println(mensagem);

            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(titulo,mensagem));

        }


    }

Model

package br.com.valueprojects.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class Usuario {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int cod;
    private String nome;
    private int rg;
    private String bio;

    public int getCod() {
        return cod;
    }
    public void setCod(int cod) {
        this.cod = cod;
    }
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public int getRg() {
        return rg;
    }
    public void setRg(int rg) {
        this.rg = rg;
    }

    public String getBio(){
        return bio;
    }
    public void setBio(String bio){
        this.bio = bio;
    }

    @Override
    public String toString(){
        return "Usuário [Cod.: "+cod+" Nome: "+nome+" RG: "+rg+" Bio.: "+bio+"]";
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + cod;
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Usuario other = (Usuario) obj;
        if (cod != other.cod)
            return false;
        return true;
    }
}


import javax.persistence.Entity;

@Entity
public class Jogador extends Usuario {
    private String posicao;
    private int numCamisa;

    public String getPosicao() {
        return posicao;
    }
    public void setPosicao(String posicao) {
        this.posicao = posicao;
    }
    public int getNumCamisa() {
        return numCamisa;
    }
    public void setNumCamisa(int numCamisa) {
        this.numCamisa = numCamisa;
    }

    @Override
    public String toString(){
        return "Jogador: "+super.toString()+" [Posicao: "+posicao+" Num. Camisa: "+numCamisa+"]";
    }
}

Business

package br.com.valueprojects.business;

import java.util.List;
import br.com.valueprojects.model.Jogador;
import br.com.valueprojects.services.JogadorService;

public class JogadorBusiness {

    public enum MensagemEnum{SUCESSO, ERROR};
    private String msg;

    public MensagemEnum salvarJogador(Jogador jogador){
        MensagemEnum retorno;

        if (jogador == null) {
            msg = "br.com.valueprojects.business.jogadorNullError";
            retorno = MensagemEnum.ERROR;
        }else {
            if((jogador.getNome().equals(""))&&(jogador.getRg()==0)&&(jogador.getPosicao().equals(""))){
                msg = "br.com.valueprojects.business.jogadorIncomplete";
                retorno = MensagemEnum.ERROR;
            }
            else{
                JogadorService jogadorService = new JogadorService();
                if (jogadorService.save(jogador)) {
                    retorno = MensagemEnum.SUCESSO;
                    msg = "br.com.valueprojects.business.jogadorSucesso";
                } else {
                    retorno = MensagemEnum.ERROR;
                    msg = "br.com.valueprojects.business.erroBanco";
                }
            }
        }

        return retorno;
    }

    public MensagemEnum removerJogador(Jogador jogador){
        MensagemEnum retorno;

        if (jogador == null) {
            msg = "br.com.valueprojects.business.jogadorNullError";
            retorno = MensagemEnum.ERROR;
        } else {
            JogadorService jogadorService = new JogadorService();
            if (jogadorService.delete(jogador)) {
                retorno = MensagemEnum.SUCESSO;
                msg = "br.com.valueprojects.business.jogadorExcluirSucesso";
            } else {
                retorno = MensagemEnum.ERROR;
                msg = "br.com.valueprojects.business.erroBanco";
            }
        }

        return retorno;
    }

    public MensagemEnum atualizarJogador(Jogador jogador){
        MensagemEnum retorno;

        if (jogador == null) {
            msg = "br.com.valueprojects.business.jogadorNullError";
            retorno = MensagemEnum.ERROR;
        }else {
            if((jogador.getNome().equals(""))&&(jogador.getRg()==0)&&(jogador.getPosicao().equals(""))){
                msg = "br.com.valueprojects.business.jogadorIncomplete";
                retorno = MensagemEnum.ERROR;
            }
            else{
                JogadorService jogadorService = new JogadorService();
                if (jogadorService.update(jogador)) {
                    retorno = MensagemEnum.SUCESSO;
                    msg = "br.com.valueprojects.business.jogadorAtualizarSucesso";
                } else {
                    retorno = MensagemEnum.ERROR;
                    msg = "br.com.valueprojects.business.erroBanco";
                }
            }
        }

        return retorno;
    }

    public String getMsg(){
        return msg;
    }
    public void setMsg(String msg){
        this.msg = msg;
    }

    public List<Jogador> getAllJogadores(){
        JogadorService jogadorService = new JogadorService();
        return jogadorService.getAllJogadores();
    }
}

Persistence

package br.com.valueprojects.persistence;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class MyEntityManager {

    private EntityManager entityManager;
    private static EntityManagerFactory factory;


    public MyEntityManager(){
      if(factory ==null)
           factory = Persistence.createEntityManagerFactory("ProjetoES");
    }    

    public void beginTransaction(){

        entityManager.getTransaction().begin();
    }

    public void commit(){
        entityManager.getTransaction().commit();
    }

    public void close(){
        entityManager.close();
    }

    public void closeFactory()
    {
        factory.close();
    }

    public void rollBack(){
        entityManager.getTransaction().rollback();
    }

    public EntityManager getEntityManager(){
        this.entityManager = factory.createEntityManager();
        return entityManager;
    }

    public <T> T find(Class<T> entityClass, Object primaryKey)
    {
        return entityManager.find(entityClass, primaryKey);
    }    

}

package br.com.valueprojects.persistence;

import java.util.List;
import javax.persistence.EntityManager;

@SuppressWarnings("unchecked")
public class GenericDAO <PK, T>{

    private EntityManager entityManager;

    public GenericDAO(EntityManager entityManager){
        this.entityManager = entityManager;
    }

    public T getById(PK pk, Class<T> classe){
        return (T) entityManager.find(classe, pk);
    }

    public void save(T entity){
        entityManager.persist(entity);
    }

    public void update(T entity){
        entityManager.merge(entity);
    }
    public void delete(T entity){
        entityManager.remove(entity);
    }

    public List<T> findAll(Class <T> classe) {
        return entityManager.createQuery("Select obj FROM " + classe.getSimpleName() + " as obj").getResultList();
    }

    @SuppressWarnings("hiding")
    public <T> T find(Class<T> entityClass, Object primaryKey)
    {
        return entityManager.find(entityClass, primaryKey);
    } 
}

package br.com.valueprojects.persistence;

import javax.persistence.EntityManager;

import br.com.valueprojects.model.Jogador;

public class JogadorDAO extends GenericDAO<Integer, Jogador> {
    public JogadorDAO(EntityManager entityManager){
        super(entityManager);
    }
}

Service

package br.com.valueprojects.services;

import java.util.List;
import br.com.valueprojects.model.Jogador;
import br.com.valueprojects.persistence.JogadorDAO;
import br.com.valueprojects.persistence.MyEntityManager;

public class JogadorService {

    private JogadorDAO jogadorDAO;
    private MyEntityManager myEntityManager;

    public JogadorService(){
        this.myEntityManager = new MyEntityManager();
        jogadorDAO = new JogadorDAO(myEntityManager.getEntityManager());
    }

    public boolean save(Jogador jogador){
        boolean retorno = false;        
        try {
            myEntityManager.beginTransaction();
            jogadorDAO.save(jogador);
            myEntityManager.commit();
            retorno = true;
        } catch (Exception e) {
            e.printStackTrace();
            myEntityManager.rollBack();
        }finally {
            myEntityManager.close();
        }       
        return retorno;
    }

    public boolean delete(Jogador jogador){
        boolean retorno = false;

        try {
            myEntityManager.beginTransaction();
            Jogador j = jogadorDAO.find(Jogador.class, jogador.getCod());
            jogadorDAO.delete(j);
            myEntityManager.commit();
            retorno = true;
        } catch (Exception e) {
            e.printStackTrace();
            myEntityManager.rollBack();
        }finally {
            myEntityManager.close();
        }

        return retorno;
    }

    public boolean update(Jogador jogador){
        boolean retorno = false;

        try {
            myEntityManager.beginTransaction();
            jogadorDAO.update(jogador);
            myEntityManager.commit();
            retorno = true;
        } catch (Exception e) {
            e.printStackTrace();
            myEntityManager.rollBack();
        }finally {
            myEntityManager.close();
        }

        return retorno;
    }

    public List<Jogador> getAllJogadores(){
        return jogadorDAO.findAll(Jogador.class);
    }
    public Jogador findJogador(Jogador jogador){
        return jogadorDAO.find(Jogador.class, jogador.getCod());
    }
}

HTML

<ui:composition template="templateMenu.xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui"
    xmlns:tm="http://java.sun.com/jsf/composite/terminal/1_0/components">
    <ui:define name="title">
        <h:outputText value="#{msg['pages.jogadorGerenciar.jogador.title']}" />
    </ui:define>
    <ui:define name="principal">
            <h:form id="jogadorForm">
            <p:growl id="msg" showDetail="true" life="3000" />
            <p:panelGrid columns="2">
                <f:facet name="header">
                    <p:outputLabel value="#{msg['pages.jogadorGerenciar.jogador.title']}" />
                </f:facet>
                <p:outputLabel value="#{msg['pages.jogadorGerenciar.jogador.nome']}" />
                <p:inputText value="#{jogadorMB.jogador.nome}" id="nomeJogador" />
                <p:commandButton actionListener="#{jogadorMB.salvar}" value="#{msg['pages.jogadorGerenciar.jogador.btnSalvar']}" update="msg, jogadorForm, :table:tableJogadores"></p:commandButton>
                <p:commandButton value="#{msg['pages.jogadorGerenciar.jogador.btnFechar']}" action="inicio"></p:commandButton>
            </p:panelGrid>
            </h:form>
            <h:form id="table" >
            <p:dataTable id="tableJogadores" value="#{jogadorMB.jogadores}" var="jogador" editable="true" style="margin-bottom:20px">               
                <p:ajax event="rowEdit" listener="#{jogadorMB.onRowEdit}"  />
                <p:ajax event="rowEditCancel" />
                <p:column headerText="#{msg['pages.jogadorGerenciar.jogador.cod']}" style="width:100px">
                    <h:outputLabel value="#{jogador.cod}" />
                </p:column>             
                <p:column headerText="#{msg['pages.jogadorGerenciar.jogador.nome']}">
                    <p:cellEditor>
                        <f:facet name="output"><h:outputText value="#{jogador.nome}" /></f:facet>
                        <f:facet name="input"><p:inputText id="modelInput" value="#{jogador.nome}" style="width:96%" /></f:facet>
                    </p:cellEditor>
                </p:column>
                <p:column headerText="#{msg['pages.jogadorGerenciar.jogador.btnExcluir']}" style="width:70px">
                    <p:commandButton actionListener="#{jogadorMB.excluir(jogador)}" id="excluir" update=":jogadorForm:msg, tableJogadores" icon="ui-icon-trash" title="Excluir"></p:commandButton>
                </p:column>                 
                <p:column style="width:32px">
                    <p:rowEditor />
                </p:column>                 
            </p:dataTable>
             </h:form>
    </ui:define>
</ui:composition>

I searched everywhere in Google, but I have not found a solution so far. Can anyone help me?

    
asked by anonymous 03.12.2015 / 18:58

1 answer

1

The CDI lib is probably missing.

If you have Maven, just add the following excerpt in your pom.xml:

<dependency>
    <groupId>javax.enterprise</groupId>
    <artifactId>cdi-api</artifactId>
    <version>1.2</version>
</dependency>

Otherwise you can download here > and add the library manually in your project.

    
03.12.2015 / 19:02