Tenía un método con muchas llamadas de persistencia que usaban una sesión nHibernate, funcionó, estaba bien. Pero necesitaba refactorizar este método, extrayendo un método de un contenido dentro de un bucle, por razones de subprocesamiento múltiple. Luego creé una clase con este método. Es como una refactorización normal, pero la sesión nHibernate dentro de esta llamada a método está rota, sin contexto, no la finalicé en ningún momento. Tiene problemas nHibernate con multihilo? Incluso cuando tengo solo un hilo más ejecutándose, tengo el mismo problema.nHibernate sesión y multiprocesamiento
Uso nHibernate Session a través de un patrón SessionFactory y Fachada, es decir, la sesión no es un campo de estos objetos, es global en SessionFactory.
lo que es un poco más claro:
ANTES:
Method()
{
... persistence calls
foreach(Thing..)
{
...persistence calls for each thing (1)
}
...
}
DESPUÉS:
Method()
{
... persistence calls
foreach(Thing..)
{
create a thingResolver object with some data
open a new thread with thingResolver.Method (1)
starts this thread
}
.. waits for finishing threads and continues
}
Nuestra nHibernate Session Factory tiene en cuenta los subprocesos y almacena/recupera sesiones nHibernate por subproceso. Está funcionando muy bien ahora;)
gracias Aleksey. Tendré problemas para hacerlo (trabajo con otra sesión), ya que viola mi diseño, estoy pensando en olvidar esta cosa de múltiples hilos. –
de hecho, mi fábrica de sesiones es robusta y puede mantener una sesión por hilo, funciona: D –
Enlace actualizado a la documentación http://nhforge.org/doc/nh/en/index.html#transactions – AlfeG