2008-11-06 12 views
7

जावा डेस्कटॉप स्विंग एप्लिकेशन में आप अपने हाइबरनेट सत्र प्रबंधन कैसे करते हैं? क्या आप एक सत्र का उपयोग करते हैं? एकाधिक सत्र?एक स्विंग एप्लिकेशन में हाइबरनेट का उपयोग करके सत्र प्रबंधन

उत्तर

10

एकल सत्र:

यहाँ इस विषय पर कुछ संदर्भ हैं। लेनदेन शुरू करें जब आपको संचालन का एक सेट करने की आवश्यकता होती है (जैसे डायलॉग बॉक्स ओके बटन के बाद डेटा अपडेट करें), अंत में टीएक्स को प्रतिबद्ध करें। हालांकि कनेक्शन लगातार खुला रहता है (क्योंकि यह वही सत्र है), और इस प्रकार कैशिंग के लिए सभी अवसरों का उपयोग हिब और आरडीबीएमएस दोनों द्वारा किया जा सकता है।

कनेक्शन समाप्त होने पर पारदर्शी सत्र को फिर से खोलने के लिए भी एक अच्छा विचार हो सकता है - उपयोगकर्ता विस्तारित अवधि के लिए आवेदन खोलने के लिए जाते हैं, और इसे सोमवार को काम करना जारी रखना चाहिए भले ही डीबी सर्वर सप्ताहांत पर रिबूट किया गया था। सत्र के लिए आंशिक (अवांछित) अद्यतन:

अद्यतन

जेन्स Schauder कई सत्रों का उपयोग करने के लिए एक कारण प्रदान की है। खैर, यह हाइबरनेट का उपयोग करने के तरीके के नीचे आता है।

मान लीजिए कि हमारे पास दो संवाद खुले हैं (जैसा कि जेन्स के ब्लॉग उदाहरण में)। यदि उपयोगकर्ता रेडियोबॉक्स पर क्लिक करता है, और हम तुरंत इस रेडियोबॉक्स से जुड़े एक हाइबरनेट इकाई को अपडेट करते हैं, तो जब उपयोगकर्ता रद्द करता है, तो हम परेशानी में हैं - सत्र पहले ही अपडेट हो चुका है।

सही तरीके से, जैसा कि मैंने इसे देखा है, केवल संवाद चर (गैर-हाइबरनेट ऑब्जेक्ट) को अपडेट करना है। फिर, जब उपयोगकर्ता ठीक क्लिक करता है, तो हम एक लेनदेन शुरू करते हैं, अद्यतन वस्तुओं को मर्ज करते हैं, लेनदेन करते हैं। कोई कचरा कभी सत्र में सहेजा नहीं जाता है।

MyHibernateUtils.begin(); 
Settings settings = DaoSettings.load(); 
// update setttings here 
DaoSettings.save(settings); 
MyHibernateUtils.commit(); 

हम चिंताओं में से इस तरह के एक स्वच्छ जुदाई लागू करते हैं तो हम बाद में MyHibernateUtils.begin() कार्यान्वयन का एक सरल परिवर्तन के साथ कई सत्रों के लिए स्विच कर सकते हैं।

संभावित स्मृति रिसाव के लिए, अच्छी तरह से ... Transaction.commit() सत्र सत्र। फ्लश(), जो AFAIK, कैश को भी साफ करता है। साथ ही, कोई सत्र.सेट कैशमोड() को कॉल करके कैशिंग नीति को मैन्युअल रूप से नियंत्रित कर सकता है।

4

एक सत्र का उपयोग न करें। सब कुछ के लिए, लेकिन सबसे छोटे अनुप्रयोगों में यह बढ़ेगा, स्वचालित डेटा एकत्रित हो जाएगा और धीमे और धीमे हो जाएंगे, क्योंकि गंदे चेक को सत्र में प्रत्येक इकाई की जांच करने की आवश्यकता है।

यदि आपको आलसी लोड द्वारा आलसी लोडिंग और परिवर्तनों की ट्रैकिंग की आवश्यकता नहीं है, तो आप अल्पकालिक सत्रों का उपयोग कर सकते हैं।

लेकिन अगर आप aproach मैं अपने ब्लॉग में वर्णित का उपयोग हाइबरनेट की शक्ति से लाभ करना चाहते हैं: http://blog.schauderhaft.de/2008/09/28/hibernate-sessions-in-two-tier-rich-client-applications/

या जर्मन संस्करण में:

http://blog.schauderhaft.de/2007/12/17/hibernate-sessions-in-fat-client-anwendungen/

यह AFAIK वास्तव में है http://in.relation.to/Bloggers/HibernateAndSwingDemoApp में वर्णित एक ही अपवाद लेकिन सिफारिश के साथ वास्तव में अपने सत्र को कैसे गुंजाइश करें: प्रति फ्रेम सत्र पर, मूल फ्रेम के सत्र का उपयोग करने वाले मोडल फ्रेम्स के अपवाद के साथ।

बस सुनिश्चित करें कि विभिन्न सत्रों से वस्तुओं को कभी भी गठबंधन न करें। इससे बहुत सारी परेशानी होगी।

Vladimirs अद्यतन करने के लिए जवाब में:

  • वास्तव में रद्द मेरी aproach साथ extremly अच्छा काम करता है: फेंक सत्र।
  • session.flush जब आप एप्लिकेशन के लिए एक सत्र के साथ काम करते हैं तो हमेशा के सत्र की समस्या को ठीक नहीं करता है। निस्संदेह आप वर्णन करते हैं कि आप अल्पकालिक सत्रों के साथ काम कर सकते हैं, जो ठीक काम करना चाहिए। लेकिन
  • आप बहुत खो देते हैं: आलसी लोडिंग केवल संलग्न वस्तुओं के साथ काम करती है, गंदे वस्तुओं का स्वचालित पता लगाना। यदि आप अलग-अलग वस्तुओं (या ऑब्जेक्ट्स जो सभी संस्थाओं में नहीं हैं) के साथ काम करते हैं तो आपको इसे स्वयं करना होगा।
+0

अच्छे अंक, जेन्स! –

1

आशावादी समेकन की अनुमति देने के लिए एक सत्र प्रति थ्रेड (doc) और संस्करण या टाइमस्टैम्प कॉलम का उपयोग करें और इस प्रकार सत्र-से-उदाहरण संघर्षों से परहेज करें। आवश्यकता होने पर सत्र में उदाहरण संलग्न करें जब तक कि आपको लंबे समय तक चलने वाले लेन-देन या प्रतिबंधित अलगाव स्तर की आवश्यकता न हो।

+0

स्विंग एप्लिकेशन में मूल रूप से सबकुछ एक थ्रेड में होता है। तो यह दस्तावेज कमियों के साथ, आवेदन के लिए एकल सत्र में आता है। –

4

"प्रति सत्र सत्र" के साथ समस्या "अच्छा है स्विंग अनुप्रयोग ईडीटी के बाहर डेटाबेस पहुंच करते हैं, आमतौर पर नव निर्मित स्विंगवर्कर थ्रेड में। इस तरह, "'प्रति थ्रेड सत्र' '" जल्दी से "" सत्र प्रति क्लिक "बन जाता है"।