Erro - jpa + jsf

6 respostas
eullerbd

Pessoal estou desenvolvendo um sistema usando JSF + JPA, e estou com um problema que nao consegui encontrar a causa. Eu tinha até criado um topico anterior, onde eu achava que o erro poderia ser do JSF , mas creio que seja algo referente ao JPA.

eu tenho a seguinte classe de Entidade Setor com o metodo

public String cadastrar() {
        
        
        new ControleSetor().cadastrarSetor(this);
        return "sucesso";
    }

e tenho a classe de Persistencia com o metodo cadastrar Setor

public void cadastrarSetor(Setor setor) {
        
        System.out.println("Setor a ser cadastrado:" + setor.getNome());
        DAOGenerico.cadastrar(setor);
    }

Se eu rodo uma classe de teste, exemplo

public static void main(String[] args) {  
    Setor setor=new Setor();
      setor.setNome("setor12345");
      setor.cadastrar();
    }

Ele cadastra perfeitamente o objeto usando o DAOGenerico do JPA, mas caso eu tente cadastrar , chamando os metodos via JSF ele da a seguinte exeção

exception

javax.servlet.ServletException: #{setor.cadastrar}: java.lang.NoClassDefFoundError: Could not initialize class persistencia.DAOGenerico

root cause

javax.faces.FacesException: #{setor.cadastrar}: java.lang.NoClassDefFoundError: Could not initialize class persistencia.DAOGenerico

root cause

javax.faces.el.EvaluationException: java.lang.NoClassDefFoundError: Could not initialize class persistencia.DAOGenerico

Se alguém puder me ajudar, pois estou sem saber o que fazer, desde já agradeço.

6 Respostas

CintiaDR

Posta o método DAOGenerico.cadastrar(setor)

eullerbd
static {
        fabrica = Persistence.createEntityManagerFactory("ManutencaoPU");
        entityManager = fabrica.createEntityManager();
    }

    public static void cadastrar(Object o) {
        getEntityManager().getTransaction().begin();
        getEntityManager().persist(o);
        getEntityManager().getTransaction().commit();

    }
CintiaDR

Eu parei para ler o seu outro tópico. Diga uma coisa, em que LINHA dessas dá a excessão? Chamando pelo JSF, vai até onde?

Ele tá dentro do método chamado pelo botão?

eullerbd

O meu form está assim

<h:inputText  value="#{setor.nome}" />
        <h:commandButton value="Cadastrar" action="#{setor.cadastrar}"/>

Metodo cadastrar da classe Setor

public String cadastrar() {
        
        
        new ControleSetor().cadastrarSetor(this);
        return "sucesso";
    }

O jsf chega até aqui.

public void cadastrarSetor(Setor setor) {
        
       System.out.println("Setor a ser cadastrado:" + setor.getNome());    
    DAOGenerico.cadastrar(setor);    }

Ele executa até aqui

System.out.println("Setor a ser cadastrado:" + setor.getNome());

Dando erro quando chamo meu DAOGenerico.

[color=red] DAOGenerico.cadastrar(setor); [/color]

Ai ele da as seguintes excessões

exception

javax.servlet.ServletException: #{setor.cadastrar}: java.lang.ExceptionInInitializerError

root cause

javax.faces.FacesException: #{setor.cadastrar}: java.lang.ExceptionInInitializerError

CintiaDR

Não faço idéia, mesmo. Mas veja se isso ajuda mais, então:

public void cadastrarSetor(Setor setor) {  
    System.out.println("Setor a ser cadastrado:" + setor.getNome());      
    try{
    DAOGenerico.cadastrar(setor);    
   } catch (Exception e){
     e.printStackTrace();
   }
}

E sei lá, posta o código estático/construtor do DAOGenerico.

eullerbd

static { fabrica = Persistence.createEntityManagerFactory("ManutencaoPU"); entityManager = fabrica.createEntityManager(); }

Coloquei o try/catch gerou a excessao

java.lang.ExceptionInInitializerError

Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/sisinformatica

at java.sql.DriverManager.getConnection(DriverManager.java:602)

at java.sql.DriverManager.getConnection(DriverManager.java:154)

at oracle.toplink.essentials.sessions.DefaultConnector.connect(DefaultConnector.java:100)

O que fico mais encabulado é porque que ele cadastra normalmente quando faço a simulação via classe e via navegador (JSF) ele da erro. Muito estranho, bom, vou tentanto aqui. Obrigado Cintia

Criado 15 de maio de 2008
Ultima resposta 15 de mai. de 2008
Respostas 6
Participantes 2