[EclipseLink] NoClassDefFoundError: Could not initialize class eyra.db.EMFactory

3 respostas
G

Olá pessoal!

Estou iniciando meus estudos em J2EE e estou apanhando um pouco.

Tenho um projeto Web Dinâmico no Eclipse que depende de outro projeto JPA (EclipseLink).
No projeto Web, quando rodo minhas classes que usam os mecanismos de persistência de objetos como Java Application, tudo roda bonitinho.

Meu problema começou quando tentei usar as classes do projeto JPA nos meus servlets. Estou usando o Tomcat 7 e inicialmente o problema era que o Web Container não estava localizando as classes do projeto JPA. Exportei o projeto como .jar e o coloquei na pasta lib, aí o Container não reclamou mais da ausência das classes das entidades mas agora ele reclama que não consegue inicializar a minha classe utilitária que cria o EntityManagerFactory. O erro é:

Servlet.service() for servlet TestServlet threw exception
java.lang.NoClassDefFoundError: Could not initialize class eyra.db.EMFactory

E minha classe utilitária é:

package eyra.db;
import javax.persistence.*;

public class EMFactory{
   
     private static EntityManagerFactory emf;
     
     static{
          emf = Persistence.createEntityManagerFactory("EYRA");
     }

     public static EntityManagerFactory getEMF(){
          if(emf == null)
               emf = Persistence.createEntityManagerFactory("EYRA");
          return emf;
     }
}

Estou procurando a solução no google e em livros, mas acho que o verdadeiro problema é que eu nem sei exatamente qual o problema... será que alguém sabe o que pode ser ou me dar algumas dicas?

Agreço de antemão qualquer ajuda.
Abraços!

3 Respostas

B

Cara sobre o problema que tu ta passando agora eu não consegui visualizar assim de primeira. Alguém aqui com certeza vai te ajudar (eu espero).

Mas sobre o fato de tu ter gerado um jar do EclipseLink e posto nas shared libraries do tomcat, acho que não foi a melhor forma de fazer isso. O que tu deveria ter feito era importado esse jar para dentro do teu projeto. Mais especificamente para a pasta WebContent/WEB-INF/lib. Achei até estranho tu dizer que gerou um jar, tu por acaso tem o projeto EclipseLink no teu workspace? Se você não está fazendo alterações nele (mexendo no código fonte) tu não deveria ter ele no seu workspace, e sim ter ele somente com jar na pasta que eu falei ali…

Só especulando: parece que o contêiner não encotrou a sua classe eyra.db.EMFactory…

G

Olá Bruno.

Obrigado por responder.

Bem, os .jars do EclipseLink estão dentro do meu projeto JPA. O jar que gerei contém as entidades e classes utilitárias. A estrutura do projeto é essa:


http://www.flickr.com/photos/38969238@N00/[telefone removido]

Experimentei mover todos os .jars para WEB-INF/lib do meu projeto e a mensagem de erro continua a mesma. Creio que o problema não seja a ausência da classe, pois todas as classes são encontradas normalmente até o momento em que a classe EMFactory precisa ser usada.

Na pasta lib do Tomcat, coloquei o .jar do meu projeto mais todos os .jars do EclipseLink. Fiz o que você sugeriu e o erro continua o mesmo.
Qual seria o jeito “certo” de se integrar um projeto JPA com um projeto Web Dinâmico no Eclipse?

Valeu!

G

O problema era a minha burrice. Esqueci de configurar o build path corretamente. Faltava adicionar o pacote do Eclipse Link na aba order e sei lá o que.

Agradeço sua ajuda Bruno.
Abraço.

Criado 18 de agosto de 2010
Ultima resposta 31 de ago. de 2010
Respostas 3
Participantes 2