2013-01-19 11 views
22

प्रति एप्लिकेशन केवल एक सत्र फैक्टरी ऑब्जेक्ट का उपयोग क्यों करें? प्रति आवेदन एकल सत्र फैक्ट्री ऑब्जेक्ट का उपयोग करने के क्या फायदे हैं?प्रति एप्लिकेशन केवल एक सत्र फैक्ट्री ऑब्जेक्ट का उपयोग क्यों करें?

+1

अधिक जानकारी के लिए यहां देखें http://stackoverflow.com/a/4544053/366964 –

उत्तर

33

सत्र कारखाने की वस्तुओं को सिंगलटन डिज़ाइन पैटर्न का उपयोग करके कार्यान्वित किया जाना है। सत्र फैक्ट्री के उदाहरण थ्रेड-सुरक्षित हैं और आमतौर पर एक एप्लिकेशन में साझा किए जाते हैं। चूंकि ये वस्तुएं भारी वजन होती हैं क्योंकि उनमें कनेक्शन जानकारी होती है, कॉन्फ़िगरेशन जानकारी और मानचित्रण फ़ाइलों को हाइबरनेट करें, स्थान पथ। तो उदाहरणों की संख्या बनाने से हमारे आवेदन भारी वजन बन जाएगा। लेकिन सत्र वस्तुएं थ्रेड सुरक्षित नहीं हैं। तो संक्षेप में यह है - सत्र फैक्ट्री ऑब्जेक्ट्स प्रति एप्लिकेशन एक हैं और सत्र ऑब्जेक्ट प्रति क्लाइंट हैं।

इसलिए यह डेटा स्रोत प्रति सत्र फ़ैक्टरी होगा। आपके एप्लिकेशन में एक से अधिक डेटासोर्स हो सकते हैं ताकि आपके पास उस उदाहरण में एक से अधिक सत्र फ़ैक्टरी हो। लेकिन आप एक आवेदन में एक से अधिक सत्र सत्र बनाना नहीं चाहते हैं।

लाभ: जाहिर है अपने अपने आवेदन के सुधार के प्रदर्शन :)

अद्यतन - निकालें Hibernate Doc

से एक SessionFactory की आंतरिक स्थिति अपरिवर्तनीय है। एक बार यह बनाया गया है यह आंतरिक स्थिति सेट है। इस आंतरिक स्थिति में ऑब्जेक्ट/रिलेशनल मैपिंग के बारे में मेटाडेटा के सभी शामिल हैं।

+2

कोई भी गलत नहीं है DarkHorse सत्र फ़ैक्टरी को सिंगलटन डिज़ाइन पैटर्न का उपयोग करके लागू नहीं किया गया है। –

+3

@ डार्कहोर्स सत्र फैक्टरी सिंगलटन नहीं है, इसे सिंगलटन के रूप में उपयोग किया जाता है, यह अपरिवर्तनीय है http://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/SessionFactory.html – anshulkatta

14

क्योंकि एक SessionFactory के निर्माण के एक बेहद महंगी प्रक्रिया है जो हाइबरनेट विन्यास/मानचित्रण गुण पार्स करने और एक डेटाबेस कनेक्शन पूल .Creating कनेक्शन पूल डेटाबेस बनाना शामिल है डेटाबेस कनेक्शन (यानी Connection वस्तुओं बनाने), जो भूमि के ऊपर की वजह से है स्थापित करने की आवश्यकता है डीबी सर्वर का पता लगाने के लिए लिया गया समय, एक संचार चैनल स्थापित करें और प्रमाणीकरण करने के लिए जानकारी का आदान-प्रदान करें।

तो यदि आप प्रत्येक अनुरोध के लिए SessionFactory बनाते हैं, तो इसका तात्पर्य है कि आप अपने अनुरोध को पूरा करने के लिए डेटाबेस कनेक्शन पूल का उपयोग नहीं कर रहे हैं। आपको खोले जाने के बजाय प्रत्येक अनुरोध के लिए उपरोक्त ओवरहेड प्रक्रिया द्वारा एक नया कनेक्शन सेट करना होगा डेटाबेस कनेक्शन पूल से कनेक्शन।

2

कुछ प्रमुख आवेदन प्रति एक SessionFactory वस्तु के बारे में अंक के होते हैं: -

1.Single डाटा स्टोर: - यह अपने पूरे आवेदन के लिए एकल डेटा की दुकान है। यद्यपि आपके पास एकाधिक सत्र फैक्ट्री हो सकती है लेकिन प्रत्येक सत्र फ़ैक्टरी के साथ एक अलग डेटाबेस होगा।

2. थ्रेड सुरक्षित: - सत्र फैक्ट्री थ्रेड सुरक्षित है इसलिए इस सुविधा के कारण कई धागे सत्र फैक्ट्री तक पहुंच सकते हैं।

3. अतुलनीय: - सत्र फैक्ट्री की वस्तु बनने के बाद आप सत्र Facotyr के मूल्यों को बदल या सेट नहीं कर सकते हैं। इसकी आंतरिक स्थिति सृजन के समय निर्धारित है।

4. सिंगलेटन: - सत्र स्टार्टअप एप्लिकेशन स्टार्टअप के समय बनाया गया है और यह सिंगलटन डिज़ाइन पैटर्न का पालन करता है।

मुझे आशा है कि यह आपके प्रश्न का उत्तर देगा ..http://techpost360.blogspot.in/2015/07/what-is-hibernate-sessionfactory.html

2

हां, इसका बहुत सरल समझना महत्वपूर्ण है कि sessionFactory सिंगलटन डिजाइन पैटर्न का पालन करें:

कैसे sessionfactory बनाने के लिए कृपया URL देखें है अधिक जानकारी के लिए

। तो आप छेद आवेदन में केवल एक वस्तु बना सकते हैं। सत्र फैक्ट्री भी थ्रेड सुरक्षित है, इसलिए केवल एक थ्रेड अपने कोड के समय निष्पादित कर सकता है। SessionFactory का उदाहरण हेवीवेटेड है क्योंकि इसमें कनेक्शन, हाइबरनेट कॉन्फ़िगरेशन, मैपिंग फाइलें, स्थान पथ शामिल है, इसलिए यदि आप sessionFactory के उदाहरण की संख्या बनाते हैं तो आपका कोड बहुत भारी हो जाता है। इसी कारण से हम एक आवेदन के लिए केवल एक सत्र फैक्टरी उदाहरण का उपयोग कर रहे हैं। हमारे आवेदन के प्रदर्शन में सुधार करने के लिए हम एक आवेदन में सत्र फैक्टरी का केवल एक उदाहरण उपयोग कर रहे हैं।

संबंधित मुद्दे