2009-08-29 13 views
70

का उद्देश्य क्या है यदि आप संभव हो तो उदाहरण के साथ जेएनडीआई के उपयोग को कैसे महसूस कर सकते हैं?जेएनडीआई

+3

आप उपयोग के मामलों के लिए एक व्यक्तिगत ब्लॉग पोस्ट की जांच कर सकते हैं: http : // tshikatshikaaa.blogspot.com/2013/01/what-is-jndi-spi-cci-ldap-and-jca.html – JVerstry

+0

@ जेवीरस्ट्री +1 एक ऐसे लेख को इंगित करने के लिए जो संबंधित एलडीएपी, जेसीए और सीसीआई के बारे में बात करता है। – Ajay

+0

[यह SO धागा] देखें (http://stackoverflow.com/a/21227726/2396539) –

उत्तर

90

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

उदाहरण के लिए, आप कोड है कि एक जावा ईई कंटेनर में चलाता लिख ​​रहे हैं, तो आप इस बारे में JNDI नाम "डेटाबेस" के साथ डेटा स्रोत की पकड़ पाने के लिए कर सकते हैं:


DataSource dataSource = null; 
try 
{ 
    Context context = new InitialContext(); 
    dataSource = (DataSource) context.lookup("Database"); 
} 
catch (NamingException e) 
{ 
    // Couldn't find the data source: give up 
} 

नोट वहाँ कुछ भी नहीं यहाँ है डेटाबेस ड्राइवर, या उपयोगकर्ता नाम, या पासवर्ड के बारे में। यह कंटेनर के अंदर कॉन्फ़िगर किया गया है।

जेएनडीआई डेटाबेस (जेडीबीसी) तक ही सीमित नहीं है; सभी प्रकार की सेवाओं को नाम दिया जा सकता है। अधिक जानकारी के लिए, आपको इस विषय पर Sun tutorial देखें।

+9

तो तस्वीर में इस उदाहरण के साथ, जेएनडीआई एक कॉन्फ़िगरेशन xml फ़ाइल या एक प्रॉपर्टी फ़ाइल में डेटाबेस नाम रखने से अलग कैसे है और फिर वहां से पढ़ रहे हो? – Ajay

+9

सबसे पहले, आपको अपनी कॉन्फ़िगरेशन फ़ाइल में सादा पाठ में पासवर्ड स्टोर करना होगा। दूसरा, यदि आपके पास एक ही डेटाबेस पर इंगित करने वाले कई ऐप्स हैं और डेटाबेस कॉन्फ़िगरेशन परिवर्तनों के बारे में कुछ है, तो आपको एकाधिक स्थानों में कॉन्फ़िगरेशन अपडेट करना होगा। –

+0

अच्छी तरह से, जेएनडीआई यहां कैसे मदद करता है? – Ajay

26

जेएनडीआई EventContext का उपयोग कर सेवाओं की खोज और सुनवाई दोनों के लिए कॉन्फ़िगरेशन जानकारी और दोनों के लिए एक बहुत ही शक्तिशाली तंत्र है। जेएनडीआई में आप किसी भी ऑब्जेक्ट (केवल DataSource एस नहीं) देख सकते हैं और सुन सकते हैं, मानते हैं कि आपका जेएनडीआई सेवा प्रदाता इसका समर्थन करता है।

बेशक, एकमात्र मुद्दा वास्तव में एक जेएनडीआई सेवा प्रदाता है; इसके बारे में बड़ी बात यह है कि यह आपके लिए रोल करना आश्चर्यजनक रूप से आसान है। इसके बाद आप Java12eans XMLEncoder और XMLDecoder का उपयोग कर किसी भी जावा इंस्टेंसXML में एन्कोड कर सकते हैं: आपको किसी एप्लिकेशन सर्वर के भीतर चलने पर भरोसा करने की आवश्यकता नहीं है!

तो कॉन्फ़िगरेशन फ़ाइलों के बीच क्या अंतर है? खैर, यह बहुत साफ हो सकता है क्योंकि आपके सभी एप्लिकेशन से उसी कॉन्फ़िगरेशन को से प्राप्त कर सकते हैं। यदि उन्हें कॉन्फ़िगरेशन जानकारी (जैसे डेटाबेस स्थान) साझा करने की आवश्यकता है तो इसे एक बार JNDI में परिभाषित किया जा सकता है। मान लीजिए कि आपने डेटाबेस सर्वर ले जाया है: आपको उस स्थान के साथ गैज़िलियन कॉन्फ़िगरेशन फ़ाइलों को याद रखने की आवश्यकता नहीं है। आप बस एक ही स्थान पर जाएं: जेएनडीआई।

3

जेएनडीआई एक संसाधन निर्माण के सरलीकरण को केवल नाम में बनाने की अनुमति देता है। इसलिए, यह सुविधा/सुरक्षा/आदि के लिए समूह 1 में कई विवरण हैं। (उर्फ अमूर्त परत)

साकार करने के लिए: एक गुण की सूची है कि JNDI प्रसंग इंटरफ़ेस में पूर्वनिर्धारित क्षेत्रों से मेल खाती है की स्थापना की।(इन गुणों JNDI निष्पादन के लिए सेटिंग्स निर्दिष्ट, लेकिन * नहीं खोज नाम)

Properties props = new Properties(); 
//field Context.INITIAL_CONTEXT_FACTORY => property name java.naming.factory.initial 
    //field Context.PROVIDER_URL => property name java.naming.provider.url 
props.load(new FileInputStream("*properties file*")); //prop file in this case 

Context ctx = new InitialContext(props); 
    Object o = ctx.lookup("*name of resource*"); 

आदर्श, एक विशेष समारोह के लिए अपने संगठन में एक LDAP निर्देशिका, डीएनएस, आदि, बनाए रखने के लिए मौजूद होगा (ताकि एक एकीकृत एकल मानचित्रण सेट सेवाओं सभी, को कम करने विसंगतियों)

JNDI सेवा प्रदाता की सूची: https://www.ibm.com/support/knowledgecenter/en/SSVSD8_8.4.1/com.ibm.websphere.dtx.adapjndi.doc/concepts/c_jndi_JNDI_Service_Providers_.htm

9

JNDI निर्देशिका और नामकरण सेवाओं (यानी साधन है जिसके द्वारा नाम वस्तुओं से जुड़े हैं) का उपयोग करने के लिए इस्तेमाल एक API है। किसी ऑब्जेक्ट के नाम के साथ संबंध को बाध्यकारी कहा जाता है।

नामकरण सेवा का एक मूल उदाहरण DNS है जो मशीन नामों को आईपी पते पर मैप करता है।

जेएनडीआई का उपयोग करके, एप्लिकेशन किसी भी प्रकार के नामित जावा ऑब्जेक्ट्स को स्टोर और पुनर्प्राप्त कर सकते हैं।

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

स्प्रिंग उदाहरण:

स्प्रिंग प्रसंग फ़ाइल

<bean id="WSClientConfig" class="com.example.BaseClientConfigImpl"> 
<property name="protocol"> 
    <jee:jndi-lookup jndi-name="java:comp/env/protocol" /> 
</property> 
<property name="endpoint"> 
    <jee:jndi-lookup jndi-name="java:comp/env/endpoint" /> 
</property> 
<property name="requestPath"> 
<jee:jndi-lookup jndi-name="java:comp/env/requestPath" />  
</property> 

बिलाव प्रसंग फ़ाइल

<Environment name="protocol" type="java.lang.String" value="https://"/> 
<Environment name="endpoint" type="java.lang.String" value="172.0.0.1"/> 
<Environment name="requestPath" type="java.lang.String" value="/path/to/service"/> 
संबंधित मुद्दे