Hibernate Session Factory fazendo conexão com o BD

Olá galera mais uma vez estou com o seguinte problema:

Verificamos que o Firebird fica com a memória crescendo enquanto a conexão não é fechada corretamente, ou seja, tendo 3 conexões dierentes no banco simultaneamente, por mais que somente uma tenha executado statements, enquanto as 3 não forem fechados os processos continuam carregando no cache.
Comecei a correr o código tentando descobrir onde está o Connection Leak, porque tinha certeza que um lugar estava deixando uma conexão aberta. Acabei encontrando que o que fazia uma conexão com o banco e nunca fechava era a própria SessionFactory. Quando se fecha a SF a tal conexão perdida é automaticamente liberada. Isso é correto? Existe alguma maneira de que a SF não abra conexãoes, porque sempre cri que quem fazia a conexão era a Session e não a Session Factory

OBS.: Utilizo o C3p0 com a seguinte config:

<!-- Configura o C3p0 -->
		<property name="c3p0.acquire_increment">1</property> 
		<property name="c3p0.idle_test_period">100</property> <!-- seconds --> 
		<property name="c3p0.max_size">100</property> 
		<property name="c3p0.max_statements">0</property> 
		<property name="c3p0.min_size">10</property> 
		<property name="c3p0.timeout">100</property> <!-- seconds -->

Agradeço mais uma vez a atenção e a ajuda!!!
Abraço galera

fala raphaelcmacedo…
não sei como seus DAOs estao estruturados, tive um problema parecido com esse, a cada consulta no banco era criado uma nova conexao e ela não fechava mesmo com o ‘session .close()’ no finnaly, tb utilizava o c3p0

o meu problema era que eu estava abrindo um Session factory toda vez q eu ia no banco, ai chegava uma hr que o limite de conexoes estourava…
o que eu fiz para resolver foi abrir uma session factory do hibernate somente uma vez na hr de realizar o login por exemplo e gravar na sessao.

meu DAO…

    HttpSession req ;
    Session session ;
    Vendas venda;


    public VendasDAO(){
        req = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
        session = (Session) req.getAttribute("sessao");
    }

public List<Vendas> getListar(){
        try {
                List<Vendas> lista = new ArrayList<Vendas>();
                Criteria consulta = this.session.createCriteria(Vendas.class);
                lista = consulta.list();
                return lista;
        }
        catch (Exception sqle){
                throw new DAOException("Erro ao listar vendas."+sqle.getMessage(),sqle);
        }
        finally{
                session.disconnect();
                session.flush();
        }
    }

neste caso estou utilizando JSF

Verifiquei e utilizo a mesma SessionFactory em todo o sistema. O problema que eu tenho é que realmente não posso ter essa conexão que está ficando aberta o tempo todo. Preciso que quando o sistema esteja ocioso todas as conexões estejam fechadas. Fiz um teste aqui sem pé nem cabeça:
Logo em seguinda de dar o buildSessionFactory eu a fecho e nesse momento essa conexão é liberada. Quando vou fazer a próxima consulta, como um query.list() ou query.uniqueResult() ele consegue montar a session mesmo com a SessionFactory fechada e no momento que ele executa o statement ele cria uma outra conexão e fica no banco sem fechar, de um jeito parecido ao da SessionFactory. Não importa se eu faça session.disconect(), session.close() abrir e fechar uma transação nada fecha essa tal conexão