Dúvida abrir e fechar session hibernate

Olá pessoal! Estou com uma dúvida ou um problema.

Seguinte: Eu estou desenvolvendo uma aplicação com JSF + Hibernate. Antes de eu começar com o JSF eu abria e fechava a session do hibernate toda hora. Beleza funcionava perfeitamente, mas agora preciso abrir por filtros pois ele dá problema daqueles quando você dá um forward depois de fechar a session. Então fis o filtro e está funcionando perfeitamente(estava).

package Filtros;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class HibSession implements Filter {

  public void init(FilterConfig filterConfig) throws ServletException {
  }

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    DAOs.HibSession.AbreSession();
    
    chain.doFilter(request, response);
    
    DAOs.HibSession.FechaSession();
  }

  public void destroy() {
  }
}

Classe HibSession:

package DAOs;

import org.hibernate.Session;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibSession {
  protected static Session session;

  public static void AbreSession() {
    AnnotationConfiguration conf = new AnnotationConfiguration();
    conf.configure();
    
    HibSession.session = conf.buildSessionFactory().openSession();
  }
  
  public static void FechaSession() {
    HibSession.session.close();
  }
}

E todos os meus DAOs estendem dessa classe e eles pegam a session direto dela.
O Problema é que aparentemente essa session não está fechando a cada vez que abre pois me deparei com um erro de muitas conexões agora:

HTTP Status 500 -

type Exception report

message

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

exception

javax.servlet.ServletException: org.hibernate.exception.JDBCConnectionException: Cannot open connection
root cause

javax.faces.el.EvaluationException: org.hibernate.exception.JDBCConnectionException: Cannot open connection
root cause

org.hibernate.exception.JDBCConnectionException: Cannot open connection
root cause

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: "Too many connections"
note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 3.1.1 logs.

GlassFish Server Open Source Edition 3.1.1

Obrigado pessoal!

Tenta implementar com SessionFactory.getCurrentSession() ao invés de SessionFactory.openSession().

Ou da uma olhada nesse link: http://community.jboss.org/wiki/OpenSessionInView

Vai uma dica:
A melhor forma de tratar “sessão de persistências” em aplicativos web em java é usando Thread-Local - http://fernandofranzini.wordpress.com/2011/09/05/escopo-thread-local/

Vc poderia me mostrar um exemplo de session usando thread local?

Obrigado

[quote=Raiduster]Vc poderia me mostrar um exemplo de session usando thread local?

Obrigado[/quote]
No meu link tem um exemplo de uso global de thread local, vc q escolhe o colocar la dentro…