Configurar hibernate factory [RESOLVIDO]

Olá pessoal,

Eu utilizo annotations e hibernate.properties, faço o mapeamento das classes na factory, o problema é que estou constantemente recebendo o erro “too many connections”
pesquisei bastante e já descobri que a factory deve gerar o mapeamento somente uma vez, mas não sei como resolver isso, ao olhar no mysql existem várias conexões abertas em sleep.

Minha factory

public class FabricaDeSessao {

	public Session abreSessao() {

		AnnotationConfiguration cfg = new AnnotationConfiguration();
		// cfg.addAnnotatedClass(objeto.getClass());
		cfg.addAnnotatedClass(Cliente.class);
		cfg.addAnnotatedClass(Usuario.class);
		cfg.addAnnotatedClass(Taxi.class);
		cfg.addAnnotatedClass(Corrida.class);
		SessionFactory factory = cfg.buildSessionFactory();
		Session session = factory.openSession();
		session.beginTransaction();

		return session;

	}

	public void fechaSessao(Session session) {
		session.getTransaction().commit();
		session.close();
	}
}

Dao

	public void PesquisaCorridaDataGerada(Date dataInicial,
			Date dataFinal) {
		try{
		session = fabricaDeSessao.abreSessao();
		Criteria select = session.createCriteria(Corrida.class);
		select.add(Restrictions.between("dataCorridaGerada", dataInicial, dataFinal));
		  List<Corrida> listaCorridas = select.list();
		  System.out.println("fiz pesquisa no banco");
		  for(Iterator<Corrida> it = 
		listaCorridas.iterator();it.hasNext();){
		  Corrida corrida = (Corrida) it.next();
		  System.out.println("Corrida cliente nome:"+corrida.getCliente().getNome());
		  
		  }
		}
		catch (Exception e) {
			System.out.println(e);
		}
		//return select.list();
	}

Obrigado

Vc notou que para cada sessão vc cria novamente um Sessionfactory?!.

Olha no google por HibernateUtil, existe várias implementações que vc pode usar como base, mas no geral eles tem um SessionFactory static, a sessão usa uma ThreadLocal, etc.

Abaixo tem um código de um HibernateUtil que fiz.

[code]public final class HibernatePersistenceHelper implements PersistenceHelper {

private static HibernatePersistenceHelper	instance	= new HibernatePersistenceHelper();

private static ThreadLocal<Session>			session		= new ThreadLocal<Session>();

private SessionFactory						factory;

private HibernatePersistenceHelper() {
	super();
	this.factory = new Configuration().configure().buildSessionFactory();
}

@Override
public void close() {
	Session s = HibernatePersistenceHelper.session.get();
	if (s != null) {
		Transaction t = s.getTransaction();
		if (t.isActive()) {
			t.commit();
		}
		s.flush();
		s.close();
		HibernatePersistenceHelper.session.set(null);
	}
}

@Override
public Session get() {
	Session s = HibernatePersistenceHelper.session.get();
	if (s == null) {
		s = this.factory.openSession();
		HibernatePersistenceHelper.session.set(s);
	}
	return s;
}

public static HibernatePersistenceHelper getInstance() {
	return HibernatePersistenceHelper.instance;
}

}[/code]

pois é eu vi isso, pesquisei e li bastante, o problema é q não consegui adaptar para o método q estou usando q tem que passar as classes a mapear no factory.

[code]public class FabricaDeSessao {
private static SessionFactory factory;

static {
    AnnotationConfiguration cfg = new AnnotationConfiguration();  
    // cfg.addAnnotatedClass(objeto.getClass());  
    cfg.addAnnotatedClass(Cliente.class);  
    cfg.addAnnotatedClass(Usuario.class);  
    cfg.addAnnotatedClass(Taxi.class);  
    cfg.addAnnotatedClass(Corrida.class);  
    factory = cfg.buildSessionFactory();  
}
public static Session abreSessao() {  
    Session session = factory.openSession();  
    session.beginTransaction();  
    return session;  
}  

public static void fechaSessao(Session session) {  
    session.getTransaction().commit();  
    session.close();  
}  

} [/code]

Desculpa eu ter demorado tanto tempo para responder, mas eu estava a muito tempo sem dormir, programando esse sistema e pesquisando sobre como resolver este detalhe do hibernate.

Como existem muitas formas de fazer isso não tinha achado uma que fosse exatamente como eu precisava, sei que tem muita gente que não gosta de escrever código no aqui no forum, mas as vezes pode ser a única maneira de ajudar e ensinar alguém.

Muito obrigado, está funcionando perfeitamente, muito obrigado mesmo !!!