J'avais une méthode avec beaucoup d'appels de persistance qui utilisaient une session nHibernate, ça fonctionnait, ça allait. Mais j'avais besoin de refactoriser cette méthode, en extrayant une méthode d'un contenu à l'intérieur d'une boucle, pour des raisons multithread. Ensuite, j'ai créé une classe avec cette méthode. C'est comme un refactoring normal, mais la session nHibernate dans cet appel de méthode est cassée, sans contexte, je ne l'ai pas finalisé à aucun moment. Est-ce que nHibernate a des problèmes de multithreading? Même lorsque je n'ai plus qu'un thread en cours d'exécution, j'ai le même problème.nHibernate session et multithread
J'utilise nHibernate Session via un modèle SessionFactory et Façade, cela signifie que la session n'est pas un champ de ces objets, elle est globale chez SessionFactory.
Faire un peu plus clair:
AVANT:
Method()
{
... persistence calls
foreach(Thing..)
{
...persistence calls for each thing (1)
}
...
}
APRÈ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
}
Notre nHibernate Session Factory est sensible aux threads et stocke/récupère la session nHibernate par thread. Il fonctionne bien maintenant;)
merci Aleksey. J'aurai des problèmes pour le faire (travailler avec une autre session), car cela viole mon design, je pense à oublier cette chose multithread. –
en fait, ma fabrique de sessions est robuste et peut maintenir une session par thread, son fonctionnement: D –
Lien mis à jour à la documentation http://nhforge.org/doc/nh/fr/index.html#transactions – AlfeG