Hibernate Annotation - erro No suitable driver [Resolvido]

Boa noite a todos do fórum,

Estou quebrando a cabeça aqui e não estão conseguindo fazer o Hibernate + Annotation, funcionar… Estou utilizando o Netbeans 5.0 +

hibernate-3.2.0.cr2
hibernate-annotations-3.2.0.CR1

Adicionei ao ClassPath os arquivos -

log4j.properties
hibernate.cfg

Arquivo hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE hibernate-configuration
     PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 
 <hibernate-configuration>
     <session-factory >
 
 		<!-- local connection properties -->
         <property name="connection.driver_class">org.firebirdsql.jdbc.FBDriver</property>
         <property name="connection.url">"jdbc:firebirdsql:127.0.0.1/3050:D:/BANCOESTA.FDB"</property>
         <property name="connection.username">sysdba</property>
         <property name="connection.password">masterkey</property>
         <property name="dialect">org.hibernate.dialect.FirebirdDialect</property>
 
         <property name="hibernate.show_sql">true</property>
         <property name="hibernate.hbm2ddl.auto">update</property>
     	
	<!-- mapping files -->
      	<mapping package="modelo"/>
      	<mapping class="modelo.Estado"/>
 
     </session-factory>    
 </hibernate-configuration>

Classe HibernateUtility

package controle;

import org.hibernate.*;
import org.hibernate.cfg.*;

public class HibernateUtility {

    private static final SessionFactory factory;

    private static final ThreadLocal sessionThread = new ThreadLocal();

    private static final ThreadLocal transactionThread = new ThreadLocal();

    static {
    	//Bloco estático que inicializa o Hibernate, escreve o stack trace se houver algum problema e relança a exceção
    	try {
        factory = new AnnotationConfiguration().configure().buildSessionFactory();
    	} catch (RuntimeException e) {
    		e.printStackTrace();
    		throw e;
    	}
    }


    public static Session getSession() {
    	Session session = (Session) sessionThread.get();
    	if ( session  == null  || !session.isOpen()  ) {
    		session = factory.openSession();
    		sessionThread.set( session );
    	}
    	return (Session) sessionThread.get();
    }

    public static void closeSession() {
    	Session session = (Session) sessionThread.get();
    	if ( session != null && session.isOpen() ) {
    		sessionThread.set(null);
    		session.close();
    	}
    }

    public static void beginTransaction() {
    	Transaction transaction = getSession().beginTransaction();
    	transactionThread.set(transaction);
    }

    public static void commitTransaction() {
    	Transaction transaction = (Transaction) transactionThread.get();
    	if ( transaction != null &&  !transaction.wasCommitted() && !transaction.wasRolledBack() ) {
    		transaction.commit();
        	transactionThread.set(null);
    	}
    }

    public static void rollbackTransaction() {
    	Transaction transaction = (Transaction) transactionThread.get();
    	if ( transaction != null &&  !transaction.wasCommitted() && !transaction.wasRolledBack() ) {
    		transaction.rollback();
        	transactionThread.set(null);
    	}
    }

}

Classe Estado - Estou tentando fazer o mapeamento só para testar!


package modelo;

 import java.io.Serializable;
import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;

@Entity
public class Estado implements Serializable {
    
    @Id @GeneratedValue
    private long id;
    private String nome;
    private String sigla;
    
    public Estado() {
        id=0;
        nome="PARANA";
        sigla="PR";
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getSigla() {
        return sigla;
    }

    public void setSigla(String sigla) {
        if (sigla.length()==2){
             this.sigla = sigla;
        }       
    }
   
}

Classe Main

    public static void main(String[] args) {
            try {
		Session session = HibernateUtility.getSession();
		Transaction transaction = session.beginTransaction();

		Estado estado = new Estado();
	

		estado.setNome("Teste");
                estado.setSigla("OR");

		session.save(estado);

		transaction.commit();
		session.close();
 			
 		} catch (HibernateException e) {
 			e.printStackTrace();
 		}
 	}
 }

Ai o erro que aparece é esse:

2006-08-12 19:44:19,328 DEBUG hibernate.impl.SessionFactoryImpl  -> Checking 0 named SQL queries
2006-08-12 19:44:19,375 DEBUG hibernate.impl.SessionImpl  -> opened session at timestamp: 4732611212607488
2006-08-12 19:44:19,375 DEBUG hibernate.transaction.JDBCTransaction  -> begin
2006-08-12 19:44:19,375 DEBUG hibernate.jdbc.ConnectionManager  -> opening JDBC connection
2006-08-12 19:44:19,375 DEBUG hibernate.connection.DriverManagerConnectionProvider  -> total checked-out connections: 0
2006-08-12 19:44:19,375 DEBUG hibernate.connection.DriverManagerConnectionProvider  -> opening new JDBC connection
2006-08-12 19:44:19,375 DEBUG hibernate.util.JDBCExceptionReporter  -> Cannot open connection [???]
java.sql.SQLException: No suitable driver
        at java.sql.DriverManager.getConnection(DriverManager.java:545)
        at java.sql.DriverManager.getConnection(DriverManager.java:140)
        at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:110)
        at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:417)
        at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
        at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:118)
        at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:57)
        at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1319)
        at hibernateteste.Main.main(Main.java:35)
2006-08-12 19:44:19,375 WARN  hibernate.util.JDBCExceptionReporter  -> SQL Error: 0, SQLState: 08001
2006-08-12 19:44:19,375 ERROR hibernate.util.JDBCExceptionReporter  -> No suitable driver
org.hibernate.exception.JDBCConnectionException: Cannot open connection

Segue uma imagem dos jars adicionados! inclusive o do banco Firebird que estou tentando utilizar! Esse drive funciona normalmente em outra aplicacao JDBC

Se alguém puder ajudar! ficaria muito grato! já tentei bastante e nada!

Obrigado

Diego

Verifique se o jar do driver está na pasta \lib do seu server

Ele está em outro diretório, o que eu fiz foi add/jar folder e adicionei ele no Libraries!

Agora ele está no /src do projeto! tbm não funcionou mesmo erro! Alguma outra sugestão??

Você precisa que o driver esteja ou no classpath do seu sistema, ou dentro do diretório lib do seu application server/container web.

O problema foi resolvido o drive estava adicionado ao classpath da aplicação o problema estava nos arquivos de configuração principalmente no hibernate.cfg.xlm…

Segue os arquivos utilizados abaixo!

<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

         
        
<hibernate-configuration>
    <session-factory>

        <property
            name="hibernate.dialect">
            org.hibernate.dialect.FirebirdDialect
        </property>
        <property
            name="hibernate.connection.driver_class">
            org.firebirdsql.jdbc.FBDriver
        </property>
        <property
            name="hibernate.connection.url">
            jdbc:firebirdsql://localhost:3050/c:/banco.fdb
        </property>
        <property
            name="hibernate.connection.username">
            SYSDBA
        </property>
        <property
            name="hibernate.connection.password">
            masterkey
        </property>

        <!-- Condiguração do c3p0 -->

        <property name="hibernate.c3p0.max_size">10</property>
        <property name="hibernate.c3p0.min_size">2</property>
        <property name="hibernate.c3p0.timeout">5000</property>
        <property name="hibernate.c3p0.max_statements">10</property>
        <property name="hibernate.c3p0.idle_test_period">3000</property>
        <property name="hibernate.c3p0.acquire_increment">2</property>

        <!-- Configurações de debug -->

        <property name="show_sql">true</property>
        <property name="use_outer_join">true</property>
        <property name="hibernate.generate_statistics">true</property>
        <property name="hibernate.use_sql_comments">true</property>

        <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

        <mapping class="entidades.Curso" />


    </session-factory>
</hibernate-configuration>
package entidades;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity()
public class Curso {
    
    @Id @GeneratedValue()
    private int idCurso;
    
    private String descricao;
    
    private int duracao;
    
    public Curso() {
        duracao=4;
        descricao="Sistemas de Informação";
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public int getDuracao() {
        return duracao;
    }

    public void setDuracao(int duracao) {
        if (duracao>0){
            this.duracao = duracao;
        }
    }

    public int getIdCurso() {
        return idCurso;
    }

    public void setIdCurso(int idCurso) {
        this.idCurso = idCurso;
    }
    
}
package util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.hibernate.tool.hbm2ddl.SchemaUpdate;

public class HibernateUtility {
    
    private static final SessionFactory factory;
    
    private static final ThreadLocal sessionThread = new ThreadLocal();
    
    private static final ThreadLocal transactionThread = new ThreadLocal();
    
    static {
        //Bloco estático que inicializa o Hibernate, escreve o stack trace se houver algum problema e relança a exceção
        try {
            
            factory = new AnnotationConfiguration().configure().buildSessionFactory();
        } catch (RuntimeException e) {
            e.printStackTrace();
            throw e;
        }
    }
    
    public static void teste(){
        System.out.println("Testando");
    }
    
    
    public static Session getSession() {
        Session session = (Session) sessionThread.get();
        if ( session  == null  || !session.isOpen()  ) {
            session = factory.openSession();
            sessionThread.set( session );
        }
        return (Session) sessionThread.get();
    }
    
    public static void closeSession() {
        Session session = (Session) sessionThread.get();
        if ( session != null && session.isOpen() ) {
            sessionThread.set(null);
            session.close();
        }
    }
    
    public static void beginTransaction() {
        Transaction transaction = getSession().beginTransaction();
        transactionThread.set(transaction);
    }
    
    public static void commitTransaction() {
        Transaction transaction = (Transaction) transactionThread.get();
        if ( transaction != null &&  !transaction.wasCommitted() && !transaction.wasRolledBack() ) {
            transaction.commit();
            transactionThread.set(null);
        }
    }
    
    public static void rollbackTransaction() {
        Transaction transaction = (Transaction) transactionThread.get();
        if ( transaction != null &&  !transaction.wasCommitted() && !transaction.wasRolledBack() ) {
            transaction.rollback();
            transactionThread.set(null);
        }
    }
    
    public static void criaSchema() {
        Configuration cfg = new AnnotationConfiguration().configure();
        new SchemaExport(cfg).create(true, true);
    }
    public static void updateSchema() {
        Configuration cfg = new AnnotationConfiguration().configure();
        new SchemaUpdate(cfg).execute(true, true);
    }
    
}

Obrigado a todos!