2012-04-09 10 views

Respuesta

37

Se abre una sesión siempre que se llame a sf.getCurrentSession() por primera vez. Esto crea una nueva sesión si no existe o utiliza una existente si ya existe.

En Tomcat esto asocia una sesión con un hilo que se crea utilizando el objeto subyacente ThreadLocal. Pero como Tomcat utiliza la agrupación de subprocesos, es muy posible que una solicitud pueda recibir un subproceso con una sesión ya asociada, lo que introduce la posibilidad de que ni siquiera se cree una nueva sesión. Otra cosa es que la sesión que obtuvo con sf.getCurrentSession() se vacía y se cierra automáticamente.

Por otro lado, el método sf.openSession() crea una nueva sesión pero no intenta asociarla con un subproceso. Pero recuerde que sf.openSession() introduce otro problema ya que espera que los usuarios manejen el cierre y el enjuague de las sesiones ellos mismos, en lugar de dejar que Hibernate lo haga automáticamente.

sf.getCurrentSession() suele ser suficiente. sf.openSession() proporciona y facilita un mayor nivel de gestión de donde se almacena y administra la sesión. Sin duda es una opción avanzada.

+1

¿Eso significa que si estoy usando sf.getCurrentSession para multithreads dentro de tomcat, usará la misma sesión? ¿está bien? – Dejell