Erro de NoClassDefFoundError

17 respostas
5

Pessoal,

Alguém poderia me dar uma mão? Quanto tento rodar minha aplicação web aparece o seguinte erro no navegador:

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Filter execution threw an exception

root cause

java.lang.NoClassDefFoundError: Could not initialize class br.edu.unifeob.sgu.uteis.HibernateConnection
	br.edu.unifeob.sgu.filtros.FiltroHibernate.doFilter(FiltroHibernate.java:65)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.16 logs.
Aparentemente está me dizendo que a classe HibernateConnection não está no classpath. Mas é apanas uma classe que está em um package e cria a conexão a partir do hibernate.cfg.xml que está no pacote padrão. Não estou conseguindo achar o que pode ser. Se alguém puder me dar uma luz eu agradeço. Obrigado.

17 Respostas

B

Ola,

Verifique se as bibliotecas requeridas pelo hibernate estão no classpath, tais como o driver de conexão com o banco, os jars do proprio hibernate…

S

Isso já aconteceu comigo algumas vezes, parece que sua classe esta fora do classpath, no meu caso reiniciei o TomCat e funcionou, acho que o TomCat por algum motivo não conseguiu carregar sua classe no classpath.

5

Pessoal,

Já verifiquei e estão todas as bibliotecas necessárias aqui, já reiniciei o tomcat e o problema persiste. Alguém tem alguma ideia do que pode ser?

B

504843:
Pessoal,

Já verifiquei e estão todas as bibliotecas necessárias aqui, já reiniciei o tomcat e o problema persiste. Alguém tem alguma ideia do que pode ser?

O que acontece na classe br.edu.unifeob.sgu.filtros.FiltroHibernate.java linha 65???

5

Bruno Carlo,

Eu tenho o seguinte código:

HibernateConnection.closeSession();
B

Estranho,

Pega o log da exception completo… fica em Tomcat/6.0.16/logs/localhost… e posta ae, tá estranho, mas a priori parece que alguma classe que o br.edu.unifeob.sgu.uteis.HibernateConnection precisa para ser instanciada não está no classpath…

Todas as classes que são importadas pela br.edu.unifeob.sgu.uteis.HibernateConnection estão no classpath? (ps.: dá uma conferida… :wink: )

5

Bruno Carlos,

Segue o log do erro:

java.lang.NoClassDefFoundError: Could not initialize class br.edu.unifeob.sgu.uteis.HibernateConnection
        at br.edu.unifeob.sgu.filtros.FiltroHibernate.doFilter(FiltroHibernate.java:65)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
B

Faz seguinte, põe um try/catch no construtor da classe br.edu.unifeob.sgu.uteis.HibernateConnection, printa a exception e posta ela ae pra gente… ex.:

public HibernateConnection(){ try{ // o codigo original do construtor... }catch(Throwable t){ t.printStackTrace(); } }

5

Bruno Carlo,

Olha só o código da classe:

public class HibernateConnection {
    
    private static final SessionFactory sessionFactory;
    private static final ThreadLocal threadSession = new ThreadLocal();
    private static final ThreadLocal threadTransaction = new ThreadLocal();
    private static final AnnotationConfiguration configuration;
    
    static {
        
        try {
            
            configuration = new AnnotationConfiguration();
            
            configuration.configure("hibernate.cfg.xml");
            
            sessionFactory = configuration.buildSessionFactory();
            
        } catch (Throwable t) {
            
            throw new ExceptionInInitializerError(t);
            
        }
    }
    
    public static Session getSession(){
        
        Session s = (Session) threadSession.get();
        
        
        try {
            
            if( s == null ){
                s = sessionFactory.openSession();
                threadSession.set(s);
            }
            
        } catch (HibernateException e){
            
            e.printStackTrace();
            
        }
        
        //System.out.println("--(CONEXAO: PEGOU A SESSAO.)--");
        
        return s;
        
    }
    
    public static AnnotationConfiguration getConfig() {
        
        return configuration;
        
    }
    
    public static void closeSession(){
        
        try {
            
            Session s = (Session) threadSession.get();
            
            threadSession.set(null);
            
            if( s != null && s.isOpen() ){
                s.close();
            }
            
        } catch (HibernateException e){
            
            e.printStackTrace();
            
        }
        
        //System.out.println("--(CONEXAO: FECHOU A SESSAO.)--");
    }
    
    public static void beginTransaction(){
        
        Transaction t = (Transaction) threadTransaction.get();
        
        try {
            
            if( t == null ){
                
                t = getSession().beginTransaction();
                threadTransaction.set(t);
                
            }
            
        } catch (HibernateException e){
            
            e.printStackTrace();
            
        }
        
        //System.out.println("--(CONEXAO: BEGIN DE TRANSAÇÃO.)--");
        
    }
    
    public static void commitTransaction(){
        
        Transaction t = (Transaction) threadTransaction.get();
        
        try {
            
            if( t != null && !t.wasCommitted() && !t.wasRolledBack() ){
                
                t.commit();
                threadTransaction.set(null);
                
            }
            
        } catch (HibernateException e){
            
            rollbackTransaction();
            e.printStackTrace();
            
        }
        
        //System.out.println("--(CONEXAO: COMMIT DE TRANSAÇÃO.)--");
        
    }
    
    public static void rollbackTransaction(){
        
        Transaction t = (Transaction) threadTransaction.get();
        
        try {
            
            threadTransaction.set(null);
            
            if( t != null && !t.wasCommitted() && !t.wasRolledBack() ){
                
                t.rollback();
                
            }
            
        } catch (HibernateException e){
            
            e.printStackTrace();
            
        } finally {
            
            closeSession();
            
        }
        
        //System.out.println("--(CONEXAO: ROLLBACK DE TRANSAÇÃO.)--");
        
    }
    
}
B

Opa,

No bloc estatico printa este throwable… e faz um teste, troque a linha

configuration.configure("hibernate.cfg.xml");

Por

configuration.configure("/hibernate.cfg.xml");

E verifique se o arquivo hibernate.cfg.xml tá em %WEB_APP%/WEB-INF/classes/

5

Pessoal,

Achei uma coisa interessante, quanto vou executar o projeto, aparece a seguinte mensagem na saída (run) do netbeans:

[code]
Note: C:\ProjetosJava\SGU\src\java\br\edu\unifeob\sgu\uteis\HibernateConnection.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
[/code}

5

Bruno Carlo,

Coloquei para imprimir o erro Trowable como vc sugeriu e olha o que constou no tomcat:

at org.hibernate.connection.C3P0ConnectionProvider.configure(C3P0ConnectionProvider.java:154)
        at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124)
        at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:56)
        at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:414)
        at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62)
        at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)
        at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:915)
        at br.edu.unifeob.sgu.uteis.HibernateConnection.<clinit>(HibernateConnection.java:37)
        at br.edu.unifeob.sgu.filtros.FiltroHibernate.doFilter(FiltroHibernate.java:55)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
B

Pô, mais nada??? foi só isto o log da exception???

Eu dei uma rápida busca aqui nos gogle e tudo que achei foi que possívelmente o driver de conexão ocm a base não esta no classpath…

5

Bruno Carlo,

O driver está sim, eu tentei rodar a aplicação no Netbeans 6.1 e funcionou perfeitamente. O que será que pode ser?
B

504843:
Bruno Carlo,

O driver está sim, eu tentei rodar a aplicação no Netbeans 6.1 e funcionou perfeitamente. O que será que pode ser?</blockquote>

Ixi, agora fiquei sem opções…

Mas antes, quando estava dando o erro, vc tava fazendo de que forma?

Compara o war da forma que tava dando o erro e o war gerado pelo netbenas 6.1…

5

Pessoal,

Funcionou !!! Desinstalei o Netbeans 6.5 e instalei novamente da mesma forma e está funcionando perfeitamente. Não faço a mínima ideia do que seja mas está funcionando. Obrigado.
B

504843:
Pessoal,

Funcionou !!! Desinstalei o Netbeans 6.5 e instalei novamente da mesma forma e está funcionando perfeitamente. Não faço a mínima ideia do que seja mas está funcionando. Obrigado.</blockquote>

Putz… então tá, falou.

Criado 12 de março de 2009
Ultima resposta 12 de mar. de 2009
Respostas 17
Participantes 3