2011-02-28 15 views
22

समझना जेएनडीआई स्टेरॉयड पर एक मानचित्र की तरह है? मैं ऑब्जेक्ट्स के संदर्भ खोजने के लिए एक कुंजी का उपयोग करता हूं। इसके अलावा, InitialContext क्या है? मुझे विचार नहीं लगता है।जेएनडीआई

+5

स्टेरॉयड के बारे में पता नहीं, यह हमेशा एक तुच्छता से लागू किया मानचित्र की तुलना में धीमी है और चाबी के लिए केवल स्ट्रिंग या नाम अनुमति देता है। यदि आप मुझसे पूछें: यह मानचित्र का एक अपंग संस्करण है – bestsss

उत्तर

32

संकल्पनात्मक रूप से, जेएनडीआई स्टेरॉयड पर System.getProperties() की तरह है।

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

दूसरे शब्दों में, यह Service Locator pattern का कार्यान्वयन है: आपका कोड केंद्रीय रजिस्ट्री से पर्यावरण द्वारा कॉन्फ़िगर की गई सेवाओं को प्राप्त करता है।

आमतौर पर सेवा लोकेटर के साथ, आपके कोड में सेवा लोकेटर तक पहुंचने के लिए कुछ प्रविष्टि बिंदु होना चाहिए। InitialContext यह प्रविष्टि बिंदु है: आप InitialContext बनाते हैं और फिर lookup() के साथ जेएनडीआई से आवश्यक सेवाएं प्राप्त करते हैं।

9

चलिए बात करते हैं, कक्षा लोड करने वाली कक्षा एक सिंगलटन है, आप इसे अपने जेएनडीआई संसाधनों की कुंजी प्रदान करेंगे। नीचे, मैं एक डेटास्रोत लोड कर रहा हूं (डेटासोर्स = "जेडीबीसी/डमी")।

try { 
    Context initCtx = new InitialContext(); 
    Context envCtx = (Context) initCtx.lookup("jndicontext"); 
    ds = (DataSource) envCtx.lookup("JDBC/dummy"); 
} catch (Exception e) { 
    log.error(e); 
} 

प्रारंभिक संदर्भ मुझे संसाधन को एक वस्तु के रूप में लौटाता है। मैं एक बीन एक ही तरह से लोड हो सकता था।

Connection conn = ds.getConnection(); 

लेकिन बिंदु क्या है? अपने पर्यावरण पर विचार किए बिना विशिष्ट पर्यावरण के लिए वस्तुओं को संग्रहीत करना। और फिर फ्लाई पर अपनी जानकारी बदल रहा है। आप देखेंगे, मैं कोई लॉगिन/पासवर्ड नहीं लिख रहा हूं।

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

सादर