normalmente utilizo el modelo de gestión sesión de Hibernate ThreadLocal en proyectos web en Java:Hibernate ThreadLocal ¿Administración de sesión compatible con ForkJoinPool?
El patrón Session local Tema hace uso de la clase java.lang.ThreadLocal para crear una sesión que se puede acceder desde una sola aplicación hilo. Esto es particularmente conveniente en las aplicaciones multiproceso , como las aplicaciones web.
En proyectos implemento esto con
<property name="current_session_context_class">thread</property>
en el hibernate.xml
y el uso de SessionFactory.getCurrentSession()
para obtener una sesión cada vez que necesito uno.
Ahora tengo un programa que es no un Servlet, pero tiene un cómputo paralelo pesado e interacción con la base de datos.
Quiero implementar esto con un ForkJoinPool. Ahora me pregunto si es un error utilizar la gestión de sesiones de Hibernate ThreadLocal en este escenario. Por lo que yo entiendo, un ForkJoinPool utiliza una menor cantidad de subprocesos y los comparte entre las tareas en ejecución mientras otras tareas están inactivas. (Motivado por estancamiento/molesto "tarea en la transacción 'conexiones,) Quiero cerrar() cada sesión de Hibernación después de una unidad de trabajo.
Así que ... cuando llamo HibernateSessionFactory.getThreadLocalSession(). Close() en el final de mi tarea - y la tarea se ejecuta en un ForkJoinPool - surgirán problemas ¿Debo soltar el patrón ThreadLocal para los cálculos paralelos pesados y gestionar las sesiones de mí mismo
Gracias de antemano por cualquier respuesta
¿Está utilizando SessionFactory.getCurrentSession() o .openSession() para obtener sus objetos de sesión? Si getCurrentSession, ¿qué CurrentSessionContext estás usando? Supongo que ThreadLocalSessionContext, pero te estás refiriendo a él como un 'patrón' en contraposición a una clase. – sharakan
Gracias por mirar esto ... Actualicé la pregunta con más detalle. – alfonx