2008-10-28 17 views
12

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;)

Respuesta

17

Sesiones se no seguro para subprocesos en NHibernate por diseño. Por lo tanto, debe estar bien siempre que tenga una sesión utilizada por solo un hilo.

no estoy seguro de lo que estás thingResolver hace, pero si lo hace algunas llamadas persistencia en la misma sesión de que ha creado en el hilo originario - esto muy probablemente la causa de sus problemas, puede crear una sesión separada en su nuevo hilo para que sea una sesión por hilo si mi suposición es verdadera.

referencia NHibernate tiene en la sección 10,2

http://nhibernate.info/doc/nh/en/index.html#transactions

+0

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. –

+0

de hecho, mi fábrica de sesiones es robusta y puede mantener una sesión por hilo, funciona: D –

+1

Enlace actualizado a la documentación http://nhforge.org/doc/nh/en/index.html#transactions – AlfeG

Cuestiones relacionadas