2008-10-28 25 views
12

NHibernate oturumu kullanan çok sayıda kalıcı çağrı içeren bir yöntem kullandım, işe yaradı, iyiydi. Ancak, bu yöntemi yeniden işlemek için, çok satırlı nedenlerden dolayı, bir döngü içindeki bir içeriğin bir yöntemini ayıklamak gerekiyordu. Sonra bu yöntemle bir sınıf oluşturdum. Bu normal bir refactoring gibidir, ancak bu yöntem çağrısı içindeki nHibernate oturumu bağlamsızdır, herhangi bir anda kesinleştiremedim. Çok iş parçacıklı nHibernate sorunları var mı? Sadece bir tane daha iş parçacığım olsa bile, aynı soruna sahibim.nHabernate oturumu ve çoklu iş parçacığı

SessionFactory ve Cephe düzeni aracılığıyla nHibernate oturumunu kullanıyorum, oturum, bu nesnelerin alanı değil, SessionFactory'de global.


o Making daha net biraz:

ÖNCE:

Method() 
{ 
... persistence calls 
foreach(Thing..) 
{ 
...persistence calls for each thing (1) 
} 
... 
} 

SONRA:

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 
} 

nHibernate Oturum Fabrikamız iş parçacığıdır ve iş parçacığı başına nHibernate oturumunu kaydeder/alır.

cevap

17

Oturum tasarım tarafından NHibernate güvenli iplik değil) vardır; Artık güzel çalışıyor. Sadece bir iş parçacığı tarafından kullanılan bir oturumunuz olduğu sürece tamam olması gerekir.

Sana thingResolver yapar konum emin değilim ama üzerinde size kaynak parçacığı oluşturduğunuz aynı oturumu bazı Persistance çağrıları yaparsa - Sorunlarınızın bu büyük olasılıkla nedeni, yaratabileceğin Yeni iş parçanızda ayrı bir oturum, varsayımım doğruysa, iş parçacığı başına bir oturum olur.

NHibernate referansı Bu sürece her iş parçacığı için ayrı bir NHibernate oturumu olarak birden çok iş parçacığı için bir NHibernate SessionFactory olabilir

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

+0

teşekkürler Aleksey. Bunu yapmak için problemlerim olacak (başka bir oturumla çalışıyorum), çünkü tasarımımı ihlal ettiğinden, bu çok şeyi unutmayı düşünüyorum. –

+0

aslında, benim oturum fabrikası sağlam ve iş parçacığı başına bir oturum yönetebilir, çalışma: D –

+1

Güncelleştirilmiş belge dokümanı http://nhforge.org/doc/nh/en/index.html#transactions – AlfeG

İlgili konular