Hibernate: ¿Dónde exactamente necesitamos cerrar el objeto SessionFactory?

Estoy usando la versión Hibernate 3 para mi aplicación.

Mientras revisaba los tutoriales sobre Hibernate, descubrí que, SessionFactory debe crearse una sola vez para la aplicación. Entonces, para esto, he decidido usar un bloque estático dentro de una clase y un método estático para devolver esto como se muestra.

public class SessionFactoryInitiliaztion {
    static {
        try {
            sessionFactory = new Configuration().configure().buildSessionFactory();
        } catch (Exception x) {
            x.printStackTrace();
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

¿Dónde exactamente necesito cerrar esto? sessionFactory objeto, para que revenda la memoria?

preguntado el 12 de junio de 12 a las 12:06

Puedes tener en cuenta Spring. también lea stackoverflow.com/questions/8724259/… sobre la gestión de sesiones con Spring e Hibernate. -

Probablemente mientras la aplicación se esté ejecutando al salir. Puede referirse stackoverflow.com/a/4544053/366964 para más detalles. -

Gracias, pero no estoy usando Spring para esta aplicación, está basada en Servlets, JSP, Hibernate y MYSQL. -

Con los servlets, lo mejor que puede hacer es usar un oyente de contexto de servlet (docs.oracle.com/javaee/6/api/javax/servlet/…) para abrir SessionFactory en el momento de inicio de la aplicación y cerrar SessionFactory en el momento de cierre de la aplicación. -

2 Respuestas

No puedo pensar en ninguna razón (de improviso) por la que querría cerrar la fábrica de sesiones mientras existe su aplicación, por lo que no me preocuparía demasiado recuperar la memoria. Simplemente lo cerraría cuando su aplicación se esté cerrando.

Respondido el 12 de junio de 12 a las 12:06

Ha entendido mal mi pregunta, quiero cerrarla cuando exista la aplicación, entonces, ¿puedo hacer esto dentro del método de destrucción de servlet o hay algún lugar apropiado para cerrar el objeto sessionFactory de Hibernate? . - Pawan

lo siento, sí, ahí es donde debes cerrarlo, en destroy() - John Kane

Bueno, hacerlo en un método de destrucción de servlet supone que solo tiene un servlet y no está agrupado. La mejor opción es usar ServletContextListener - steve ebersole

Sí, tienes razón, no debería haber asumido que así fue como se preparó esto. - John Kane

Esto parece un error, sin embargo, con una configuración "obsoleta", sessionFactory se cierra correctamente:

    Configuration configuration = new Configuration().configure();
    sessionFactory = configuration.buildSessionFactory();

Respondido 17 Feb 14, 21:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.