मेरे पास एक बहुत ही दृढ़ता कॉल के साथ एक विधि थी जिसने एक हाइबरनेट सत्र का उपयोग किया, यह काम किया, ठीक था। लेकिन मुझे बहुउद्देश्यीय कारणों से लूप के अंदर एक सामग्री से एक विधि निकालने, इस विधि को दोबारा करने की जरूरत है। तब मैंने इस विधि के साथ एक कक्षा बनाई। यह एक सामान्य रिफैक्टरिंग की तरह है, लेकिन इस विधि कॉल के अंदर nHibernate सत्र टूट गया है, संदर्भ के बिना, मैंने इसे किसी भी समय अंतिम रूप दिया नहीं है। मल्टीथ्रेडिंग के साथ nHibernate समस्या है? यहां तक कि जब मेरे पास केवल एक और थ्रेड निष्पादन होता है, तो मुझे भी यही समस्या है।nHibernate सत्र और multithreading
मैं सत्र फैक्ट्री और फैस्केड पैटर्न के माध्यम से nHibernate सत्र का उपयोग करता हूं, इसका मतलब है, सत्र इन वस्तुओं का एक क्षेत्र नहीं है, यह सत्र कारखाना में वैश्विक है।
यह बनाना और अधिक स्पष्ट एक छोटा सा:
से पहले:
Method()
{
... persistence calls
foreach(Thing..)
{
...persistence calls for each thing (1)
}
...
}
के बाद:
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 सत्र फैक्ट्री थ्रेड-जागरूक है, और प्रति थ्रेड nHibernate सत्र स्टोर/पुनर्प्राप्त करता है। यह अच्छी तरह से अब काम कर रहा है;)
धन्यवाद Aleksey। मुझे यह करने में समस्या होगी (किसी अन्य सत्र के साथ काम करें), क्योंकि यह मेरे डिजाइन का उल्लंघन करता है, मैं इस बहुप्रचारित चीज़ को भूलने के बारे में सोच रहा हूं। –
वास्तव में, मेरा सत्र कारखाना मजबूत है और प्रति थ्रेड सत्र कर सकता है, इसकी कामकाजी: डी –
प्रलेखन के लिए अद्यतन लिंक http://nhforge.org/doc/nh/en/index.html#transactions – AlfeG